반응형

CTF & WarGame 70

[webhacking.kr] 20번 문제

200점인 20번 문제를 풀어보도록 하자. 이 문제의 특이한 점은 제한시간 2초가 걸려있다. 2초 안에 이 값들을 입력해서 전송시키기가 어렵다. 개발자 도구를 통해 스크립트를 확인해보자. 코드를 확인해보면 각 id(nickname), cmt(comment), captcha 의 값이 빈값이면 각 폼으로 커서가 이동하고 captcha의 값과 captcha_의 값이 값지 않으면 captcha로 커서가 이동한다. 마지막은 submit 부분이다. 이제 문제 해결을 위해 스크립트 코드를 변조해보자. 우선, nickname과 comment 폼에 임의의 값 'test'를 저장하고, captcha부분에는 바로 임의의 코드값을 저장하게끔 해서 크롬의 console 기능을 이용해서 페이지 새로고침(F5) 후 코드를 전달해보..

[webhacking.kr] 19번 문제

150점인 19번 문제를 풀어보자. 입력값에 인젝션을 시도해봤지만 별다른 반응이 없었다. 문제의 힌트를 찾는 도중 임의의 문자로 submit 후 쿠키 값을 확인해보면 userid 쿠키값이 새로 생성되어 있는 것을 볼 수 있다. 맨 뒤에 %3d로 되어있는 것을 보아 URL 디코딩 하게 되면 YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWJjODFlNzI4ZDlkNGMyZjYzNmYwNjdmODljYzE0ODYyYw== 값이 나온다. Base64 디코딩까지 하게 되면 다음 값이 나온다. c4ca4238a0b923820dcc509a6f75849bc81e728d9d4c2f636f067f89cc14862c 여기에서 힌트를 찾는데 시간이 오래걸렸지만, md5로 인코딩 되어 있는 것으로 ..

[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를 인코딩하게되..

반응형