My Drive

webhacking #33 본문

writeup

webhacking #33

sunnyeo.park 2014. 11. 12. 16:38

webhacking #33.

이번 문제는 단계별로 문제가 나눠져 있어 좀 길다


 #33 - 1



GET방식으로 get변수에 "hehe"값을 넣어 보내주면 된다.

GET방식은 url을 통해 넘겨줄 수 있으므로 간단하다.



 #33 - 2



이번에는 POST방식으로 post변수는 "hehe", post2변수는 "hehe2"를 넘겨주면 된다.

post는 변수를 body에 넣어 보내므로 버프수트를 이용하였다.


Body 변수를 2개 추가해주고



방식을 POST로 바꿔준다.




 #33 - 3



이번에는 GET 방식으로 myip를 $_SERVER[REMOTE_ADDR]로 바꿔주어야 한다.

전에 $_SERVER는 아래와 같은 정보가 담겨있는 배열이었다.

$_SERVER['DOCUMENT_ROOT'] = 현재 사이트가 위치한 서버상의 위치 (ex. webappinclude)

$_SERVER['HTTP_ACCEPT_ENCODING'] = 인코딩 방식 (ex. gzip, deflate)

$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 언어 (ex. ko)

$_SERVER['HTTP_USER_AGENT'] = 사이트 접속한 사용자 환경 (ex. Mozilla4.0(compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705)

$_SERVER['REMOTE_ADDR'] = 사이트 접속한 사용자 IP (ex. 123.123.123.123)

$_SERVER['SCRIPT_FILENAME'] = 실행되고 있는 위치와 파일명 (ex. webappincludeindex.php)

$_SERVER['SERVER_NAME'] = 사이트 도메인 (ex. WWW.X2CHI.COM) 

$_SERVER['SERVER_PORT'] = 사이트가 사용하는 포트 (ex. 80)

$_SERVER['SERVER_SOFTWARE'] = 서버의 소프트웨어 환경 (ex. Apache1.3.23 (Unix) PHP4.1.2 mod_fastcgi2.2.10 mod_throttle3.1.2 mod_ssl2.8.6 OpenSSL0.9.6c)

$_SERVER['GATEWAY_INTERFACE'] = cGI 정보 (ex. CGI1.1)

$_SERVER['SERVER_PROTOCOL'] = 사용된 서버 프로토콜 (ex. HTTP1.1)

$_SERVER['REQUEST_URI'] = 현재페이지의 주소에서 도메인 제외 (ex. index.phpuser=&name=)

$_SERVER['PHP_SELF'] = 현재페이지의 주소에서 도메인과 넘겨지는 값 제외 (ex. index.php)

$_SERVER['APPL_PHYSICAL_PATH'] = 현재페이지의 실제 파일 주소 (ex. Dwebapp)

따라서 내 ip를 넣어 GET 방식으로 넘겨주면 된다.



 #33 - 4



이번에는 GET 방식으로 password를 현재시간을 md5 해쉬한 값을 넘겨주어야 한다.

문제의 hint에 보면 time()함수의 반환값이 나와있는데 시간이 지날수록 증가한다.

따라서 미리 더 큰 시간을 md5해쉬화해놓고 넘겨주며 새로 고침을 하면 해당 시간이 되었을 때 다음페이지로 넘어갈 수 있다.



 #33 - 5



이번에는 GET, POST, Cookie를 모두 이용해야 한다.

버프수트를 이용해 cookie를 생성해 주고, GET방식은 url로 POST방식은 body로 넘겨준다.



전체적인 방식은 POST이다.

(GET방식은 body가 없다.)




 #33 - 6



이번에는 Cookie와 POST방식만 넘겨주면 된다.

$_SERVER[REMOTE_ADDR]은 위에서와 같이 내 ip주소를 의미하며

$_SERVER[HTTP_USER_AGENT]는 사이트 접속한 사용자의 환경을 나타낸다. 앞의 Hint에 보면 나와있으므로 그대로 md5해쉬화 하면 된다.





 #33 - 7



str_replace는 세번째 인자 문자열에서 첫번째 인자를 찾아 두번째 인자로 바꿔주는 함수이다.

따라서 내 ip주소에서 .을 없애주면된다.


이를 GET방식으로 넘겨준다.



 #33 - 8



extract함수는 이전에 살펴본적이 있다.

extract($array) 함수는 인자로 배열타입의 변수를 받는다.

그리고 배열속의 키값들을 변수화시켜주는 역할을 하는 함수이다.

예를 들어, a라는 배열이

$a[i] = 100;

$a[j] = 200;

위와 같으면,

extract($a);

를 했을 경우,

$i = 100;

$j = 200;

과 같은 결과가 나타난다.


addr이라는 이름으로 넘어온 GET방식이 없으면 내 ip를 비교하고,

있으면 넘겨준 값을 비교하게 된다.

127.0.0.1이 되어야 하므로 GET 방식으로 addr을 넘겨준다.



 #33 - 9



97부터 122까지 2씩 증가하면 해당 아스키값을 모두 더한 문자열을 만들어 GET방식으로 넘겨주면 된다.



간단하게 파이썬으로 코드를 짤 수 있고,

ans = acegikmoqsuwy



 #33 - 10



마지막 문제!

첫부분을 보면 ip길이만큼 replace를 반복하고 있다.

ord는 인자의 아스키값을 의미한다.

그리고 .을 모두 없앤후 앞에서 10글자를 자른다.    이 값이 $ip이다.

다음은 $ip를 2곱하고 2나누고 다시 .을 없애는 과정을 거쳐 $answer을 만든다.


복잡하므로 php코드를 직접짜서 해봤다.


나온 결과 값으로 /answerip/$ip/$answer.$ip 로 들어가보니 아래와 같이 password가 나온다.








'writeup' 카테고리의 다른 글

webhacking #36  (0) 2014.11.13
webhacking #23  (0) 2014.11.13
webhacking #32  (0) 2014.11.12
webhacking #31  (0) 2014.11.12
webhacking #20  (0) 2014.11.12
Comments