Wargame/Webhacking.kr
-
[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,..
-
[Webhacking.kr] Challenge 18 풀이Wargame/Webhacking.kr 2019. 3. 30. 23:09
이번 문제는 SQL Injection 문제이다. 먼저 index.phps 페이지를 확인해보자. 코드를 확인해보면, no를 GET 방식으로 입력받아야 아래 소스가 실행된다는 것을 알 수 있다. 여기서 no는 입력칸에 입력된 값이 저장되는 변수이다. eregi는 php의 입력 문자열 필터링 함수이다. 이 함수로 인해 공백, /, 괄호, \t, |, &, union, select, from, 0x는 no의 입력값으로 올 수 없다. 만약 이 문자들이 입력되면 exit 함수가 실행되어 no hack 문구가 출력된다. 그 뒤에 나오는 $q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]"..
-
[Webhacking.kr] Challenge 17 풀이Wargame/Webhacking.kr 2019. 3. 30. 21:41
이번 문제는 매우 간단하게 해결되는 문제이다. 먼저 개발자 도구를 실행한다. Script 부분을 보면, 매우 긴 계산식과 함께 sub 함수가 정의된 것을 확인할 수 있다. unlock은 위 식의 결과값이고, 만약 login.pw.value와 unlock이 같다면 패스워드가 출력될 것임을 알 수 있다. (또한 패스워드는 unlock을 10으로 나눈 값과 같다.) 즉, 위 식을 계산한 결과값만 알면 문제는 해결된다. 계산 방법을 알아내는 방법은 여러 가지가 있는데, 나는 개발자 도구 내의 콘솔창에 식을 그대로 복붙해 돌렸다. 콘솔창에 나온 계산 결과값을 그대로 입력창에 입력한 뒤 check를 클릭한다.
-
[Webhacking.kr] Challenge 16 풀이Wargame/Webhacking.kr 2019. 3. 30. 21:20
** 이 문제는 크롬보다는 익스플로러 환경에서 풀어야 더 정확히 풀 수 있으므로 익스플로러 사용을 권장한다. 개발자 도구를 실행한다. 먼저 body 부분을 확인해보자. onkeypress는 키보드 이벤트 속성 중 하나로, 사용자가 키보드의 키를 눌렀을 때 해당 키의 ASCII 코드 값을 반환하는 event.keyCode를 인자로 받는다. 이 소스에서는 사용자의 키보드 입력값이 mv라는 함수의 인자로 들어간다. 또한 onload 이벤트에 의해 페이지가 로드된 후 바로 kk 함수가 호출된다. 이번엔 script 부분을 확인해보자. 맨 첫 부분에 나온 document.body.innerHTML+="*"; 코드는 aa라는 이름의 *을 (x, y) = (0, 0) 위치에 출력한다는 뜻이다. 그 다음 두 개의 함수..
-
[Webhacking.kr] Challenge 14 풀이Wargame/Webhacking.kr 2019. 3. 30. 19:26
먼저 개발자 도구를 실행한다. 여기서 script의 ck 함수를 살펴보자. 1) 먼저 ul이라는 변수에 Challenge 14 페이지의 전체 URL 문자열을 넣는다. (ul = http://webhacking.kr/challenge/javascript/js1.html) 2) indexOf 함수를 사용하여, ul 내에서 ".kr"이 처음 시작되는 위치의 인덱스를 찾아 ul에 저장한다. (indexOf 함수는 문자열 내에서 특정 문자열이 처음 시작되는 곳의 인덱스 값을 리턴하는 자바 스크립트 함수이다.) .kr은 ul의 18번째 위치에서 처음 시작하므로, 인덱스 값은 17이다. (ul = 17) 3) ul에 30을 곱한 값을 다시 ul에 저장한다. (ul = 17 * 30 = 510) 4) 내가 입력창에 입..