본문 바로가기

WarGame/webhacking.kr

[webhacking.kr] Challenge 33 :: Ten Question


Challenge 33은 PHP의 소스 리딩 능력과 GET, POST 방식의 이해를 필요로 하는 문제인것 같습니다.


총 10단계로 이루어져 있습니다.


상세한 설명보다는 대략적인 문제 풀이 방법만 올리도록 하겠습니다.



Stage 1


URL에 쿼리를 추가하여 GET방식으로 해당 문자열을 전송하면 됩니다.



Stage 2


POST방식으로 해당 문자열을 전송하면 됩니다.


단순히 Burp Suite의 Request Body를 수정하여 보낼라고 했더니, 


Request Header 또한 POST 방식으로 바꾸어주어야 함으로


HTML 소스코드를 추가하여 입력 폼을 만들어 전송하면 해결 가능합니다.


HTML 수정 : [ 개발자 도구 -> 오른쪽 클릭 -> Edit as HTML ] 



Stage 3


GET방식으로 본인의 IP를 전송하면 됩니다.



Stage 4


time() : 현재 시스템의 시간을 초 단위로 반환


현재 시스템의 시간을 MD5로 암호화한 값을 전송하여야 하는데, 시간은 계속 흐름으로


고민하다가 다음과 같이 해결하였습니다.


미리 몇 초 후의 값을 MD5로 암호화 해 놓고 GET방식으로 해당 값을 계속 전송하다 보면 시간이 일치할 때 Success!



Stage 5


GET, POST, Cookie 값을 동시에 전송해야 합니다.


Cookie는 쉽게 전송이 가능하죠?


GET, POST를 동시에 전송해라... 처음에는 어렵게 느껴질 겁니다.


방식은 입력 폼을 통해 POST로 전송을 하면서 action에 쿼리를 추가하여 전송하면 됩니다.


<form method="post" action="md555.php?imget=hack">



Stage 6


본인의 IP와 Client Browser 정보를 MD5로 암호화한 값을 전송해야 합니다.


브라우저 정보는 Hint에 나와 있습니다.



Stage 7


IP의 "."을 ""으로 치환합니다.


해당 값을 GET 방식으로 전송하면 됩니다.



Stage 8


PHP의 extract() 함수를 이용하여 배열을 변수로 반환 합니다. ( 예전 문제에서 살펴 보았습니다. )


GET 방식으로 addr에 루프백 주소(127.0.0.1)를 전송하면 됩니다.



Stage 9


for문을 통해서 Ascii 값을 문자로 바꾼 값을 answer 변수에 넣고,


이 값을 GET 방식으로 전송하면 끝!



Stage 10


단순한 소스코드 해석 문제 입니다.


strlne() : 문자 갯수 반환


ord() : 문자를 Ascii 값으로 반환 ( chr() 함수의 역 )


mkdir() : 디렉터리 생성


fopen() : 파일 객체 반환


fwrite() : 파일 쓰기


ip 변수와 answer 변수의 값을 구해서 URL을 조합하여 해당 경로로 들어가면 Password 값이 나오면서


전체 Challenge를 Clear 할 수 있습니다.