Wargame
-
[Webhacking.kr] Challenge 26 풀이Wargame/Webhacking.kr 2019. 5. 18. 00:10
26번 문제로 들어가면, 아무것도 없이 그냥 index.phps 링크만 있다. 이 링크로 들어가보자. index.phps로 들어가면 아래와 같이 간단한 소스코드가 나온다. 제일 먼저 eregi 함수가 보이는데, 이 함수는 admin이라는 문자열을 필터링하고 있다. 따라서 admin을 입력하려면 eregi 함수를 우회할 필요가 있다. 그리고 GET 방식으로 입력받은 id를 urldecode 함수로 URL 디코딩한 후 다시 id에 저장한다. 그 다음 id가 admin인지 검사하여, id가 admin이면 문제가 해결된다. 처음에는 eregi 함수만 우회하기 위해 %00(null)을 써준 뒤에 admin을 URL 인코딩한 문자열인 %61%64%6d%69%6e을 GET 방식으로 전송해봤지만, no 메시지가 출력되..
-
[Webhacking.kr] Challenge 32 풀이Wargame/Webhacking.kr 2019. 5. 12. 03:21
32번 문제로 들어가면 hit 수에 따른 랭킹이 나와있고, 맨 아래에는 join 버튼이 있다. join 버튼을 클릭하면 Done이라는 팝업창이 뜨고, 화면에는 내 아이디와 함께 hit 수가 보인다. 처음에는 hit가 0인데, 내 아이디를 한번 클릭하면 hit가 1로 변한다. 한번 더 내 아이디를 클릭하면 no라는 팝업창이 뜨고 hit도 변하지 않는다. Fiddler로 no 알림창이 나올 때의 페이지를 확인해보니 vote_check라는 쿠키가 ok로 되어있는 것을 확인할 수 있었다. EditThisCookie로도 vote_check 쿠키를 확인할 수 있다. vote_check 쿠키를 삭제한 후 다시 내 아이디를 클릭하니 hit가 증가했고, vote_check 쿠키도 다시 생성됐다. 이러한 과정을 몇 번 반..
-
[Webhacking.kr] Challenge 27 풀이Wargame/Webhacking.kr 2019. 5. 12. 02:09
27번 문제는 SQL Injection 문제이다. 개발자도구로 소스를 확인해보면, index.phps를 확인해보라고 나와있으므로 index.phps로 접속해본다. index.phps로 접속하면 Challenge 27의 소스가 나온다. Challenge 27 페이지가 GET 방식으로 정수형 변수인 no의 값을 입력받고, 이때 eregi 함수를 통해 #, union, from, challenge, select, (, \t, /, limit, =, 0x를 no 값에서 필터링한다. 그 다음 쿼리문을 날려 id의 값이 guest면 guest 문구를 출력하고 admin이면 solve를 실행한다. (※ no=($_GET[no])에서 괄호( )를 통해 no가 정수형 변수임을 알 수 있다.) 쿼리문 $q는 id가 gue..
-
[Webhacking.kr] Challenge 25 풀이Wargame/Webhacking.kr 2019. 5. 12. 01:17
25번 문제로 들어가면 리눅스에서 ls -l 명령어를 사용했을 때의 결과 화면과 비슷한 화면이 나온다. 텍스트창에 hello world 문구가 있고 URL에 file=hello라고 되어있는 것으로 보아, GET 방식으로 hello.txt 파일이 전송되어 해당 파일이 실행된 것으로 추측된다. 즉, GET 방식으로 파일명을 전송하면 해당 파일이 실행된다는 것을 알 수 있다. 그래서 URL에 file=password.php와 file=index.php를 추가하여 실행해보았지만 아무 일도 일어나지 않았다. 오직 hello.txt 파일만 실행이 되었는데, 이때 .txt 확장자는 따로 URL에 표시되지 않는 것으로 보아, 내가 입력한 파일명에 .txt 문자열이 추가된 상태로 서버에 전송되는 것 같다. $file =..
-
[Webhacking.kr] Challenge 24 풀이Wargame/Webhacking.kr 2019. 5. 12. 00:33
24번 문제로 들어가면 내 ip와 user agent 정보가 나오고, Wrong IP라는 문구가 출력된다. 개발자도구를 실행해보면 index.phps에서 소스를 볼 수 있다고 나와있으므로, index.phps로 접속해보자. index.phps의 내용은 아래와 같다. extract: 배열 속의 키값을 변수화시켜주는 함수로, 위 코드에서는 $_SERVER와 $_COOKIE를 일반 변수처럼 사용할 수 있게 해주는 용도로 사용되었다. $_SERVER: 웹서버에 의해 만들어진 headers, paths, script locations와 같은 정보가 포함된 배열이다. $_COOKIE: name, value, expire 등의 쿠키 정보가 포함된 배열이다. $_SERVER[REMOTE_ADDR]: 현재 사이트에 접속..
-
[Webhacking.kr] Challenge 21 풀이Wargame/Webhacking.kr 2019. 5. 11. 00:22
21번 문제는 Blind SQL Injection 문제이다. 일단 아무 숫자나 입력해보면서 규칙을 찾아보자. 1이나 2를 입력했을 때에는 true가 출력되고, 3 이상의 정수를 입력했을 때에는 모두 false가 출력되는 것을 알 수 있다. 또한 숫자를 입력했을 때 URL은 아래와 같이 나타난다. 이 URL을 통해 테이블에는 최소 3개의 column(no, id, pw)이 있다는 것을 알 수 있다. 그 중 no 열은 정수형 데이터라는 것도 알 수 있다. 위 두 정보를 종합해보면, no열은 테이블 내 회원 정보를 구분해주는 열이고, 테이블 내 회원 수는 2명이라는 것을 알 수 있다. 이 정보를 통해 쿼리문도 유추해볼 수 있다. $q = mysql_fetch_array(mysql_query(select no,..
-
[Web Exploitation] The VaultWargame/picoCTF 2018 2019. 4. 3. 17:58
문제에서 제시된 링크에 접속하면 로그인 페이지와 함께 login.php의 소스 코드 링크가 나타난다. login.php의 소스 코드를 확인해보자. 위에서부터 확인해보면, username과 password는 모두 POST 방식으로 전송되고, SQL 쿼리를 통해 username과 password가 모두 일치해야만 로그인이 되는 것을 알 수 있다. 아래 validation check 코드를 보면, preg_match 함수를 통해 OR 또는 or을 필터링한다는 것을 알 수 있다. 이 때 주의할 점은, preg_match 함수는 $username에만 적용된다는 것이다. $password_match 변수를 보면, preg_match의 대상이 $password가 아닌 $username이므로, $password는 OR..
-
[Web Exploitation] ButtonsWargame/picoCTF 2018 2019. 4. 3. 17:26
문제에서 주어진 링크에 접속하면 Button1이라는 버튼이 존재한다. 해당 버튼을 클릭하면 button1.php에 접속되고, Button2라는 또다른 버튼이 나타난다. 두 번째 버튼인 Button2를 클릭하면 Access Denied 문구가 출력되고 이상한 동영상이 재생된다. 힌트는 두 버튼의 차이점이다. 다시 처음 화면으로 되돌아와서 개발자도구를 통해 Button1의 소스 코드를 확인해보면, button1.php가 POST 방식으로 전송되는 것을 알 수 있다. 반면 Button2의 경우 a 태그의 href 속성으로 button2.php가 전송되고, 전송 방식 또한 GET 방식이다. 따라서 button2.php에 제대로 접속하기 위해서는 전송 방식을 button1.php와 같은 POST 방식으로 바꿔줘야..