반응형

전체 글 259

[webhacking.kr] 24번 문제

100점인 24번 문제를 풀어보자. 문제를 들어가면 접속한 ip와 agent 정보가 나오게 된다. 소스코드를 확인해 힌트를 찾아보자. $REMOTE_ADDR은 클라이언트의 IP주소를 가져오고, $HTTP_USER_AGENT는 클라이언트의 접속환경 정보를 가져오게 된다. 그러나 $_SERVER보다 $_COOKIE가 뒤에 처리되므로 $REMOTE_ADDR를 쿠키에 넣어주고 조작할 수 있따. if문을 살펴보게 되면 만약 $REMOTE_ADDR이 존재한다면 a) .. -> . b) 12 -> 공백 c) 7. -> 공백 d) 0. -> 공백 으로 치환하게 된다. 문제에서는 $REMOTE_ADDR값이 127.0.0.1이면 문제가 풀리게 되는데, 치환되는 값을 생각해서 쿠키값을 입력해보자. REMOTE_ADDR : ..

[webhacking.kr] 23번 문제

200점인 23번 문제를 풀어보자. XSS 공격에 성공하면 문제가 풀리는 것 같다. 대소문자 변환, img태그, base64인코딩 등을 이용한 시도를 해보았지만 전부 no hack이 뜨게 된다. 특수문자가 이스케이프 처리 되는 지 입력해 보았는데 한 글자씩 입력해보면 치환을 거치지 않는 것을 확인했다. 그럼 문자열을 입력해보게 되면 필터링이 된다. 그럼 각 글자사이마다 NULL byte를 입력해서 재시도 해본다. 여기서 NULL byte injection이란? URL로 인코딩 된 널바이트 문자(0X00 또는 %00)를 이용해, 악의적인 공격자에 의해 의도하지 않은 동작을 시키는 것이다. 문자열을 저장할 때 null 문자를 삽입하여 null문자열이 있는 곳까지만 출력하고 끝난 것으로 간주함을 이용한 공격이..

[webhacking.kr] 22번 문제

500점인 22번 문제를 풀어보자. admin 계정으로 로그인을 하라고 문제에서 힌트를 주고 있다. join 페이지로 이동해서 admin 계정은 이미 존재하는 계정으로 나오고, 테스트를 위한 임의의 계정을 생성한다. - 참인 경우 - 거짓인 경우 이제 참/거짓 반응을 이용해서 Blind SQL Injection을 시도하자. Request는 POST 방식으로 보내게 된다. import requests url = "https://webhacking.kr/challenge/bonus-2/index.php" cookies = {'PHPSESSID':'세션'} pw_length = "" pw = "" # 패스워드 길이 구하기 for i in range(0,100): data = {"uuid":"admin' and..

[webhacking.kr] 21번 문제

250점인 21번 문제를 풀어보자. Blind SQL Injection을 통해 해결하라는 힌트를 알려주고 있다. id : guest / pw : guest 로 로그인을 시도해보면 login success가 뜨게 된다. 우리는 admin 계정으로 로그인 하기 위해 Blind SQL Injection을 통해 참 / 거짓일 때의 반응을 살펴보자. - 참일 경우 wrong password - 거짓일 경우 login fail 참 / 거짓일 경우의 반환값을 확인했으니 이 조건을 이용하여 파이썬 코드를 통해 패스워드를 알아보자. - 패스워드 길이 및 패스워드 문자열 구하기 import requests url = "https://webhacking.kr/challenge/bonus-1/index.php" cookie ..

[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..

반응형