티스토리 뷰

Wargame/Webhacking.kr

Challenge 37

do9dark 2015. 8. 12. 15:12

문제 페이지에 접속해보면 아래와 같이 파일 목록 리스트가 길게 늘어져있다.



내리다보면 tmp-Unixtime 형식으로 되어 있는 이름들도 볼 수 있다.



끝까지 내려보면 127.0.0.1:7777 이라는 정보와 파일을 업로드할 수 있는 기능이 있다.


조금 더 정보를 얻기 위해서 소스를 보면 소스 파일이 주어져 있다.



소스 파일을 보면 $time 변수에 time() 값을 저장하고 tmp/tmp-$time 으로 파일을 생성한 다음 127.0.0.1을 기록하고 닫는다.

중간에 보면 $file_nm 변수에 업로드한 파일명을 저장하고 파일명에 "<", ">", ".", " " 이 있을 경우 "" 으로 치환한다.

그리고 해당 파일을 열어서 클라이언트의 IP 주소를 기록하고 닫는다.



tmp 디렉터리에 있는 파일들을 출력한다.

그리고 $ck 변수에 tmp/tmp-$time 을 담아서 기록된 내용을 저장한다.

마지막으로 $pw 값을 소켓 통신으로 $ck 에 기록된 내용의 IP:7777로 요청하게 된다.




이 문제는 파일을 업로드할 때 tmp-$time 올리고 업로드하는 $time 값과 서버의 $time 값과 일치하게 되면 업로드한 사용자의 IP 주소로 $pw 값을 요청하게 되는 문제이다.

그렇기 때문에 nc 와 같은 프로그램 또는 코드를 이용해서 7777번 포트를 열어둔 다음에 시간을 맞춰서 업로드하면 문제를 풀 수 있다.

요청하는 것도 코드를 작성하여 파일을 POST 방식으로 보내는 코드를 작성해도 되지만 아래와 같이 Burp Suite에 Repeater 기능이나 Intruder 기능을 이용해서도 풀 수 있다.



시간을 맞추게 되면 위와 같이 127.0.0.1:7777 로 기록되어 있던 부분이 클라이언트의 IP:7777 로 변경이 되고 7777번 포트를 열어둔 프로그램을 보게 되면 서버측에서 요청한 내용을 볼 수 있다. 요청 내용 중에 보면 패스워드가 있으며 이 값을 이용해서 문제를 풀 수 있다.



해당 파일의 내용을 보게 되면 127.0.0.1이 아니라 클라이언트의 IP가 기록되어 있는 것을 볼 수 있다.




'Wargame > Webhacking.kr' 카테고리의 다른 글

Challenge 42  (0) 2015.08.28
Challenge 41  (0) 2015.08.15
Challenge 40  (0) 2015.08.14
Challenge 39  (0) 2015.08.14
Challenge 38  (0) 2015.08.13
Challenge 36  (0) 2015.08.12
Challenge 35  (0) 2015.08.12
Challenge 34  (0) 2015.08.12
Challenge 33  (0) 2015.08.10
Challenge 32  (0) 2015.08.10
댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
링크
공지사항
Total
Today
Yesterday