Webhkacing.kr 의 33번 문제 풀이이다.
매우 긴 포스팅이 될거라 예상한다 ..
정답이 공개되어 있으니 참고하고 포스팅을 읽기 바란다.
인덱스 페이지를 확인해보자 .
Wrong 이란 문자열이 표시되고, 힌트로 phps 가 제공된다.
소스를 확인해보자.
( 33 – 1 )
힌트 페이지를 html 에 출력하고,
get방식으로 넘어오는 get이란 이름의 폼에 값이 hehe 이면 Next 링크를 띄운다.
?get=hehe 를 붙여서 페이지를 넘겨보자.
Next 링크가 나왔다.
다음으로 가서 힌트를 보자.
( 33 – 2 )
post 방식의 post, post2 라는 이름의 폼값에 hehe, hehe2 를 넣어서 전송하면 된다.
post 방식이다 보니 개발자도구에서 html 로 폼을 만들어 전송을 하거나,
javascript 를 통해서 값을 전송하도록 하자.
-HTML-
<form method="post" action="http://webhacking.kr/challenge/bonus/bonus-6/lv2.php">
<input type="text" name="post"><br>
<input type="text" name="post2"><br>
<input type="submit">
</form>
- JavaScript –
( 33 – 2 )
다음은 33-3 의 소스이다.
get으로 넘어온 myip 라는 이름의 값과 내 접속 ip 와 같다면 다음으로 갈 수 있다.
대부분 공유기 환경일 터이니 http://www.findip.kr/ 를 통해 자신의 IP 를 확인하기 바란다.
그 후 myip 라는 이름으로 ip 를 넘겨주면 된다.
33-4 의 소스를 보자.
( 33 – 4 )
현재 시간을 md5 로 해싱한 값과 내가 password 로 넘긴 값과 비교를 하고 있다.
페이지에는 힌트로 현재 타임스탬프를 표시해준다 .
타임스탬프를 md5 로 해싱한 뒤 password 라는 이름으로 해시값을 넘겨서 전송하면 된다.
힌트로 넘어오는 값에서 좀 더 더한 값을 해시시킨 후 값을 넘긴다음
값이 일치할때까지 F5 를 연타하면 된다 !
md5 를 좀 더 빠르게 변환하기 위해서 파이썬에서 소스를 만들었다
값을 입력 한 뒤 해당 값을 붙여 넣으면 된다.
33 – 5 의 소스를 확인해보자.
( 33 – 5 )
이번엔 Get, Post, Cookie 의 3연타이다.
이 정도는 다 가뿐히 넘길거라 예상하며
위에서 했던 방식으로 자바스크립트에 익숙해질 겸 스크립트로 넘겨보자.
- JavaScript –
( 33 – 5 )
33 – 6 의 소스를 확인해보자.
( 33 – 6 )
소스를 확인해보니 test 이름의 쿠키와 나의 IP를 md5 로 해싱한 값과 같아야 하고,
post 방식의 kk 란 이름으로 넘어간 값과 내 USER_AGENT 값을 해싱한 값과 같아야 한다.
인덱스 페이지에서 힌트로 나의 USER_AGENT 값을 보여주고 있으며,
접속 IP 또한 아까 사용했던 http://www.findip.kr/ 를 통해 IP 를 확인하자.
md5 로 해싱 하는 것도 아까 파이썬 스크립트를 짜 놓은게 있으니 활용하겠다.
- JavaScript -
후아… 힘들다 ……
33 – 7 의 소스를 확인하자 -_-;
내 접속 IP 에서 '.' (dot) 을 뺀 값을 서버 전역변수에 저장한다.
그 후 Get 방식으로 넘어오는 나의 IP ( dot 을 뺀 숫자 ) 의 이름을 가진 값과
나의 IP ( dot 을 뺀 숫자 ) 와 같으면 Next 로 된다.
접속 IP 에서 . 을 뺀 값의 이름에 다시 그 값을 넣어서 보내자.
( 이해가 안되면 $_SERVER[REMOTE_ADDR] 이 몇인지 확인을 하며 보길 바란다. )
33 – 8 의 소스를 보자 .
get 으로 넘어온 addr에 값이 없을 경우 나의 접속 ip 로 $addr 을 만든다.
get으로 addr 에 값을 127.0.0.1 을 넘기면 Next 가 나타난다.
거의 다 와간다 …!
33 – 9 의 소스를 보자.
97 ~ 122 까지 i를 2씩 증가시키며 해당 아스키 값의 문자로 변환 시킨 후,
answer 에 더해가며 문자열을 완성한다.
간단히 a~z 까지 이지만 연습 겸 간단한 파이썬 스크립트 제작을 하자.
스크립트의 결과 값은 acegikmoqsuwy 이다.
get 방식으로 ans= acegikmoqsuwy 를 넘겨주자.
마지막 문제이다 !!!!
33 – 10 문제의 소스를 확인하자.
지금까지와는 좀 더 높은 레벨인 듯 싶다.
( 물론 길이만.. )
차근차근 분석해보자.
1 스탬프가 찍힌곳은 나의 접속ip길이만큼 반복을 돌며
$i 값을 아스키 값으로 바꾼다.
그 후 '.' 을 없애버린 후
첫번째부터 10번째 글자까지 잘라버린다.
( 이상하게 파이썬으로 만들면 결과값이 달라져서 … php 로 그대로 구현하였다 .. )
원본 소스에서 fopen 함수를 보면 answer/$ip/answer.$ip 의 경로에 파일 디스크립터를 받고,
$pw 를 파일에 쓴다.
저 출력값에 접근하면 다음과 같이 파일 내용이 보인다..
password 값을 auth 에서 인증하면 클리어 ~
'WarGame > WEB_Hacking' 카테고리의 다른 글
Webhacking.kr 32번 문제풀이 (0) | 2015.11.14 |
---|---|
Webhacking.kr 27번 문제풀이 (0) | 2015.11.14 |
Webhacking.kr 26번 문제풀이 (0) | 2015.11.14 |
Webhacking.kr 25번 문제풀이 (0) | 2015.11.14 |
Webhacking.kr 24번 문제풀이 (0) | 2015.11.14 |