본문 바로가기
Web/Webhacking.kr

Webhacking.kr Challenge old-33 문제 풀이

by jh117jh 2023. 6. 21.
728x90

이번에 풀 문제는 33번!

 

문제에 들어가 보면 소스코드와 Wrong이라는 문자가 떠있다.

이번 문제는 한 문제에 소문제 10개로 이루어져 있다.

 

33-1

일단 소스코드를 봐보면

get전송방식으로 get파라미터에 hehe를 받으면 Next로 의문의 링크(???)가 생긴다.

Next를 눌러보면 

다음문제로 넘어가는 걸 알 수 있다.

 

33-2

소스코드를 봐보면

이번엔 post방식으로 hehe와 hehe2를 받으면 된다.

 

post방식을 보내는 방법으로는 개발자 모드로 console기능을 이용해 form을 작성할 수도 있지만 저는 버프스위트가 깔려있으므로

 

기존 get방식을 Change request method로 요청 방식을 post로 바꿀 수 있다.

 

hehe와 hehe2를 작성 후 보내주면

Next가 나오는 걸 볼 수 있다.

 

33-3

 

myip 파라미터에 $_SERVER ['REMOTE_ADDR']을 받으면 되는데 $_SERVER ['REMOTE_ADDR']은 웹서버에 접속한 사용자의 IP정보를 가지고 있기 때문에 나 자신의 IP를 넣어주면 된다.

https://m.blog.naver.com/diceworld/220253997457

 

PHP 접속자 ip 확인하기 / $_SERVER["REMOTE_ADDR"]

     - PHP $_SERVER 란?      $_SERVER 는 head...

blog.naver.com

 

?myip=내 IP

 

 

33-4

 

이번엔 특이하게 hint가 있다.

무엇인지 알기 위해 코드를 봤더니

password 파라미터에 time함숫값을 md5로 암호화한 값을 넣어주면 된다.

hint에 나와있는 값이 time 함숫값이다. 여기서 time함수란, 1970년 1월 1일 0시 0분 0초부터 지금까지 지난 시간을 초로 나타내는 함수이다.

https://www.codingfactory.net/11621

 

PHP / 함수 / 날짜, 시간 / date(), localtime(), mktime(), time(), microtime()

date() 개요 Timestamp를 원하는 형식으로 출력하는 함수입니다. 문법 date( format, timestamp ) format : 필수 항목입니다. 출력할 형식을 정합니다. timestamp : 선택 항목입니다. 값이 없으면 현재 timestamp를 사

www.codingfactory.net

 

그러므로 hint에 있는 값을 md5로 암호화해서 넣어주면 되는데 실시간으로 시간이 흐르다 보니 hint값이 계속 바뀐다.

그래서 미리 시간을 올려 암호화 한 뒤 해당 시간이 오면 새로고침해주면 된다. (새로고침 두 번 하면 시간이 지나가 다시 해야 되므로 주의)

 

 

33-5

 

이번엔 get으로 imget, post로 impost파라미터를 받고  imcookie라는 쿠키값이 존재하면 되는 것 같다.

쿠키를 넣어주고

get, post도 넣어주면

 

33-6

 

이번에도 hint가 있다.

코드를 보면 쿠키값에 test란 이름으로 IP를 md5로 암호화해서 넣어주고 post방식으로 kk에 $_SERVER ['HTTP_USER_AGENT']를 md5로 암호화하여 넣어주면 된다.

 

$_SERVER ['HTTP_USER_AGENT']란 사용자의 웹접속환경 정보를 담고 있는 PHP 전역변수이다.

 

hint에 쓰여있는 것이 $_SERVER ['HTTP_USER_AGENT']이다.

 

쿠키값을 넣어주고

kk값도 넣어주면

 

33-7

 

이번에는 IP값을 str_replace로 인해 . 을 제거하여 get으로 받고 있다. (심지어 받는 파라미터 이름도 ip다.)

그래서 ?IP값=IP값 (둘다 .을 제거한 값)을 입력하면

 

33-8

 

만약 get으로 addr파라미터에 들어오는 값이 없으면 addr=내 IP를 넣어주고 addr이 127.0.0.1이면 문제가 풀리는 걸로 보아

그냥 get으로 addr에 127.0.0.1을 넣어주면 될 거 같다.

 

33-9

 

for문을 통해 아스키값으로 문자를 하나씩 추가하여 answer값을 넣어주면 될 것 같다.

파이썬으로 코드 짜서 해볼라 했는데

찾아보니까 phptester라고 php를 온라인으로 간단하게 돌려볼 수 있는 사이트가 있었다.

http://phptester.net/

 

PHPTESTER - Test PHP code online

This application is free so please don't break it! Visit: Lorem Ipsum alternative : gaddafipsum.com New Android version, iOS version was rejected, I'm working on it <!--?php PHP --> Result

phptester.net

 

ans파라미터에 acegikmoqsuwy를 넣어주면 끝!

 

 

33-10

 

드디어 마지막이다.

 

마지막 문제라 그런지 연산이 되게 복잡하게 되어 있다.

IP값 받아와서 10진수로 바꿔주고 .제거하고 10자리로 자르고 2 곱했다가 2로 나누고... 다시 .제거해주고~

이런 연산을 머리로 하기는 힘드니 아까 썼다 phptester를 사용하자.

 

 

이제 위에서 구한 값으로 경로를 입력해 주면

 

이번 문제 푸는데 시간이 은근 오래 걸린 것 같다.

728x90