Wargame/Webhacking.kr
-
<Webhacking.kr> old-26Wargame/Webhacking.kr 2021. 12. 12. 22:05
old-26 view-source를 통해 페이지 소스 코드를 살펴보면 view-source GET 방식으로 전달받는 id에서 "admin"이란 문자열을 필터링한다. 만약 "admin" 문자열이 포함되어있으면 "no!"라는 메시지를 출력하고 종료된다. 그리고 id는 id를 urldecode()로 처리한 값이다. 이 값이 "admin"과 같다면 문제가 풀린다. URL은 ASCII 코드를 이용하고 인터넷을 통해서만 전송할 수 있다.(#을 %23으로 하는 것처럼) 따라서, 브라우저는 전송 데이터를 URL encoding하여 전송하게 된다. 또한 PHP 문서에 따르면, $_GET 및 $_REQUEST는 자동으로 urldecode()를 수행한다고 나와있다. 그럼 이 문제에서는 urldecode()를 2번 하게 된다..
-
<Webhacking.kr> old-23Wargame/Webhacking.kr 2021. 12. 6. 14:03
old-23 script로 alert(1)을 주입하라고 한다. 페이지 소스 코드를 살펴보면 GET 방식이라는 것 외에는 힌트가 될 만한 것이 보이지 않는다. input 박스에 1을 입력하면 입력한 값 그대로를 출력한다. GET방식이므로 URL 창에 "?code="를 입력하면 "no hack"을 출력한다. input 박스에 ;()를 입력하면 , ;, ()는 필터링의 대상이 아닌 것을 알 수 있다. input 박스에 alert나 script를 입력하면 "no hack"을 출력한다. 즉, alert와 script 문자열 그대로를 필터링한다. 이 경우, 문자 사이사이에 NULL 문자(URL encoding 방식으로 %00)을 입력하면 된다. "?code=a%00l%00e%00r%00t(1);"를 입력하면 문제를..
-
<Webhacking.kr> old-24Wargame/Webhacking.kr 2021. 12. 6. 13:21
old-24 IP 주소와 브라우저 정보 그리고 "Wrong IP"를 출력한다. view-source를 통해 페이지 소스 코드를 살펴보면 view-source php 구문을 살펴보면 extract()는 배열 속의 키 값들을 변수화시킨다. 따라서, $_SERVER["REMOTE_ADDR"]을 $REMOTE_ADDR로 사용할 수 있다. $REMOTE_ADDR인 $ip에서 ".."을 "."으로, "12"를 ""으로, "7."를 ""으로, "0."를 ""으로 변환시킨다. 그리고 $ip가 127.0.0.1이면 문제가 풀린다. 그럼 127.0.0.1에서 거슬러 올라가면 된다. 127.00..00..1 -> 127.0.0.1 1277..00..00..1 -> 127.00..00..1 112277..00..00..1 -..
-
<Webhacking.kr> old-22Wargame/Webhacking.kr 2021. 12. 5. 17:41
old-22 가입과 로그인을 할 수 있는 폼이 있다. 'admin'으로 로그인하라고 한다. 'guest/guest'로 가입하고 계정이 이미 존재한다고 한다. 'guest'로 로그인해보면 비밀번호 해시값이 출력된다. 이 해시값이 32자리인 것으로 보아 md5가 적용되있는 것 같다. 해시값을 md5 decrypt 사이트를 통해 해시되기 전 값을 구해보면 'guestapple'이 출력된다. 그럼 'woong/abc'로 가입하고 로그인해보면 해시되기 전 값을 구해보면 'abcapple'이 출력된다. 즉, password hash값은 'apple'을 salt값으로 사용하여 '{pw}+apple'을 md5로 해시한 값임을 알 수 있다. ※ md5는 단방향 해시함수이므로 복호화가 불가능하지만 여러 단어의 해시값을 미..
-
<Webhacking.kr> old-21Wargame/Webhacking.kr 2021. 12. 3. 16:31
old-21 admin으로 로그인해야 하는 것 같다. 페이지 소스 코드를 살펴보면 BLIND SQL INJECTION id : pw : Result : GET 방식이므로 URL 창에 ?id=admin&pw=' or 1=1%23을 입력하면 ?id=admin&pw=' or 1=2%23를 입력하면 이를 통해 "wrong password"는 참이고, "login fail"은 거짓이라고 짐작해 볼 수 있다. ■pw 길이 구하기 ?id=admin&pw=' or length(pw) > 35%23를 입력하면 ?id=admin&pw=' or length(pw) > 36%23를 입력하면 이를 통해 pw의 길이는 36임을 알 수 있다. ■pw 구하기 ?id=admin&pw=' or ord(substr(pw,1,1))=47%..
-
<Webhacking.kr> old-20Wargame/Webhacking.kr 2021. 12. 2. 13:12
old-20 닉네임과 코멘트 그리고 captcha를 입력하게 되어있다. time limit가 2초인 것으로 보아 2초안에 제출하라는 것 같다. 페이지 소스 코드를 살펴보면 time limit : 2 second nickname comment captcha ck() 함수를 살펴보면 모든 입력 칸이 비어있으면 안된다. 그리고 captcha는 captcha_의 값과 같아야만 한다. 위 행동을 2초안에 직접 입력하기는 굉장히 힘들다. 그래서 python의 selenium을 이용해 문제를 해결했다. import requests from selenium import webdriver # 사용중인 크롬의 버전과 같은 버전의 chromedriver를 받아 python 코드의 위치와 같게했음 driver = webdri..
-
<Webhacking.kr> old-19Wargame/Webhacking.kr 2021. 12. 1. 13:47
old-19 id 입력 창이 있고 기본 값으로 admin이 들어있다. 제출을 누르면 admin이 아니라고 한다. 1을 제출하면 0을 제출하면 URL에 ?id=0이 붙어있지만 입력 창은 변하지 않는다. 로그아웃 버튼을 눌려도 로그아웃이 되지 않는다. 'EditThisCookie'를 통해 userid의 쿠키를 지우면 로그아웃이 된다. 이것으로 보아 쿠키가 관련있는 것 같다. 1을 제출했을 때의 쿠키 값은 "YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI%3D"라는 문자열을 가진다. %3D가 있는 것으로 보아 URL Encoding 되어있는 것 같다. URL Decoding하면 "YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI="가 나온다. "YzR..