Challenge 37 시작!!
파일 업로드와 관련된 문제인 듯 하다.
소스코드를 보자!
소스코드가 매우 길다.
나눠서 분석해보자!
먼저, time() 함수를 통해 시간값을 받아와 파일을 만들고 내용에는 127.0.0.1 이라는 값을 넣어주고 있다.
다음은 파일을 업로드 받아 replace() 를 통해 파일 이름을 수정하고 있다.
그리고 나서, 수정된 파일이 참이면 그 안에 외부 ip 를 넣어 업로드 시켜준다.
이 부분은 페이지에서 파일 목록을 보여주는 코드이다.
file_get_contents() 는 파일의 내용을 문자열로 읽어오는 함수이다.
이 함수를 통해 tmp-{$time} 파일의 내용을 host 라는 변수에 저장한다.
그렇게 되면 host 에는 기본적으로 127.0.0.1 이라는 주소값이 들어갈 것이다.
그리고 나서, 이 주소로 flag 를 보내게 되는데 이 때, 포트는 7777 를 사용한다.
소스코드를 분석하고 나서 알게된 중요한 사실은 다음과 같다.
1. tmp-{$time} 형식으로 파일을 업로드 하면 기존의 파일에 덮어씌울 수 있다.
2. 자신의 서버에 7777 포트를 열고 1번과 같이 파일업로드를 수행하면 flag 를 받을 수 있다.
그럼 먼저 서버에 7777 포트를 열어주자!
그리고 나서, 아무 파일이나 만들어 준다. 어짜피 나중에 웹 프록시로 이름을 바꿔줄 것이다.
그리고 페이지에서 해당 파일을 업로드 하는 것을 웹 프록시로 잡아준다.
burf suite 를 사용하면 repeater 기능을 이용하여 반복하여 요청을 보낼 수 있다.
아래와 같이 현재 time() 값에 몇 초를 더하여 파일 이름을 변경해 준 뒤, 내용에 외부 ip 를 입력해준다.
요청을 계속 보내다 보면 해당 time 값이 되었을 때, 아래와 같이 flag 를 받을 수 있다.
이제 이 flag 값으로 인증을 받아보자!
성공!!
'WarGame > webhacking.kr' 카테고리의 다른 글
Challenge 39 (0) | 2020.03.11 |
---|---|
Challenge 38 (0) | 2020.03.11 |
Challenge 36 (0) | 2020.03.06 |
Challenge 35 (0) | 2020.03.06 |
Challenge 34 (0) | 2020.03.06 |