반응형

wargame 78

[webhacking.kr] 18번 문제

100점인 18번 문제를 풀어보자. 다음은 소스코드를 확인해서 힌트를 얻어내보자. $result['id']가 admin이면 문제가 해결되는 것을 알 수 있다. no=2이면 id 값이 admin인 것을 알 수 있으므로, SQL을 주입시켜 id가 admin으로 반환되게끔 만들면 된다. 우선 SQL injection을 막기 위한 필터링이 있다. -> | , / , & , select , from , 0x 해당 필터링을 우회하기 위해 \t(tab, %09) \n(개행, %0a)를 이용하여 쿼리문을 짜보기로 하자. 쿼리문 : 2 or no=2 select id from chall18 where id='guest' and no=2 or no=2 결과적으로 이렇게 쿼리문이 작성되게 되는데 연산자 우선순위에 따라 an..

[webhacking.kr] 16번 문제

100점인 16번 문제를 풀어보자. 소스 코드를 확인해보면 function mv(cd){ //mv 함수 선언과 cd 값을 mv함수에 입력 kk(star.style.left-50,star.style.top-50); //별모양을 만들어주는 kk함수 호출한 뒤 별의 위치 지정 if(cd==100) star.style.left=parseInt(star.style.left+0,10)+50+"px"; //cd변수 값이 100이면 별의 위치가 왼쪽으로 +50만큼 이동 if(cd==97) star.style.left=parseInt(star.style.left+0,10)-50+"px"; //cd변수 값이 97이면 별의 위치가 왼쪽으로 -50만큼 이동(오른쪽으로 이동) if(cd==119) star.style.top=p..

[webhacking.kr] 14번 문제

이번에는 100점인 14번 문제를 풀어보자. 첫 화면은 값을 입력할 수 있는 태그가 보이고, 개발자 도구를 통해 소스코드를 확인해보자. 해당 페이지의 URL을 ul변수에 저장하고, indexof(".kr")를 이용하여 URL의 ".kr"의 index번호를 찾는 것이다. 그리고 index값에 30을 곱한 숫자를 제출하면 문제가 해결된다. 우리가 입력해야 할 값은 540 이다. 해당 값을 입력하면 정상적으로 문제가 해결되는 것을 확인할 수 있다.

[webhacking.kr] 13번 문제

이번엔 1000점인 13번 문제를 풀어보자. 질의 보내기 부분에 값을 입력해 반응을 살펴본다. 1을 넣었을 때는 result에 1이 출력되고, 그 외 나머지는 0이 출력된다. 또 injection에 사용되는 특수문자 등은 필터링 된다. 문제를 해결하기 위해, DB 명 / 테이블 명 / 컬럼 명 / Flag 값 까지 구할 수 있는 파이썬 코드는 다음과 같다. import requests import string import re requests.packages.urllib3.disable_warnings() URL = "https://webhacking.kr/challenge/web-10/?no=" def str2bin(string): return '0b'+''.join(format(ord(x), 'b')..

[webhacking.kr] 12번 문제

이번엔 250점인 12번 문제를 풀어보도록 하자. 첫 화면은 "javascript challenge"문구만 뜨게 된다. 개발자 도굴에 들어가 소스를 확인해보면 javascript가 난독화되어 있는 것을 볼 수 있다. 난독화를 unpack 하기 위해 해당 사이트를 이용했다. https://lelinhtinh.github.io/de4js/ de4js JavaScript Deobfuscator and Unpacker lelinhtinh.github.io 인코드 방식을 AAencode로 체크한 후 해독해보면 아래와 같은 소스코드를 확인할 수 있다. 소스코드를 해석해 보면 URL의 "="문자부터 문자열을 잘라서 ck변수에 저장한다. for문에서는 아스키 코드의 1~121 까지의 문자를 enco변수에 저장한다. e..

[webhacking.kr] 11번 문제

이번에는 300점인 11번 문제를 풀어보도록 하자. 첫 화면은 다음과 같고, view_source를 클릭해 코드를 살펴 힌트를 얻도록 하자. 해당 문제를 풀기 위해서는 $pat 변수에 담겨있는 정규표현식을 이해하면 된다. [1-3] : 1~3 사이의 문자 중 하나 [a-f]{5}_ : a ~ f 문자 중 5번 반복하는 문자를 찾고 마지막에 "_"를 붙힌다. .*$_SERVER[REMOTE_ADDR] : 웹서버에 접속한 접속자의 IP가 0번 이상 반복(존재)한다면 문자를 찾는 정규표현식 .*\tp\ta\ts\ts : \t는 탭을 의미함으로 (탭)p(탭)a(탭)s(탭)s를 찾는 정규식표현, 하지만 문제에서는 GET방식으로 val변수에 값을 넣어 전달하므로 tab을 url 인코딩해야 한다. \t를 인코딩하게되..

[webhacking.kr] 10번 문제

이번엔 250점인 10번 문제를 풀어보도록 하자. 문제에 들어가면 첫 화면은 다음과 같다. 페이지를 살펴보니 별다른 힌트는 회식에 O라고 쓰여있는 부분에 마우스 커서를 올리면 yOu로 변한다는 점이다. 개발자 도구로 들어가 HTML 소스코드를 확인해보도록 하자. 마우스를 클릭했을 때는 onclick 부분에 1px씩 늘어나고, 1600px이 됬을 때 문제가 해결될 것으로 보인다. 우선 테스트를 위해 정상적으로 클릭할 때마다 1px씩 늘어나는 지 확인해보자. 정상적으로 동작하는 것을 확인했으니, 문제 해결을 위해 left에 담겨있는 픽셀을 1599px로 수정한 후, 마우스 클릭을 해보도록 하자. 이번 문제는 비교적 간단히 풀 수 있는 문제였다.

[webhacking.kr] 9번 문제

이번에는 점수가 900점인 9번 문제를 풀어보자. 처음 화면은 다음과 같고, 1,2,3을 각각 눌러보자. challenge/web-09/?no=1 challenge/web-09/?no=2 challenge/web-09/?no=3 URL의 파라미터 no에 값을 변경함에 따라 페이지가 변하는 것을 볼 수 있다. 테스트를 위해 인자값에 sleep(3)함수를 입력 해본 후 3초 뒤에 응답되는 것을 확인했으며, SQL Injection 시도가 가능할 것으로 판단된다. no=3 페이지에서 컬럼에는 id,no가 있고 passowrd는 id에 있다고 한다. 그럼 우리는 문제를 풀기 위해 id=password이고 no=3인 값을 가져와야 한다. 먼저, id의 길이를 알아내기 위해 쿼리문을 작성해보자. 쿼리문 : no=i..

반응형