티스토리 뷰
문제 페이지에 접속해보면 아래와 같이 파일 목록 리스트가 길게 늘어져있다.
내리다보면 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 |