뉴비에욤
Webhacking.kr 37번 본문
"tmp-xxxxxxxx" 형태의 문자열이 꽤 많이 보이고, 아래쪽에는 "127.0.0.1:777" 문자열과 파일 업로드
기능을 볼 수 있다.
time() 함수는 1970년 1월 1월 00시 00분 00초를 기준으로 현재 초까지의 시간을 초로 나타낸다.
해당 초가 $time 변수에 저장된다.
그리고 $f 변수에는 tmp/tmp-$time 이라는 파일명을 쓰기 모드로 연다.
파일을 열고 "127.0.0.1" 문자열을 작선하고 닫는다.
$fck 변수는 크게 중요하지 않은 부분이니 넘어간다.
사용자가 업로드한 파일명에 '<', '>', '.', ' ' 문자가 포함되면 해당 문자를 삭제한다.
tmp 디렉토리 이하에서 업로드 된 파일명을 쓰기 모드로 열고 클라이언트의 공인 IP를 작성하고 닫는다.
$ck 변수에 파일 객체를 저장한다.
$ck 변수를 공인 IP로 세팅한다.
$request 변수 값을 세팅한다.
$socket 함수를 이용하여 $ck 변수에 저장된 IP 값의 7777 포트로 연결한다.
연결 뒤에는 $request 변수에 저장된 값을 전송한다.
전송되는 값 내에 flag가 포함되어 있다.
프로그래밍 언어에서 파일을 쓰기 모드로 파일 객체를 만들고자 할때, 요구한 파일이 없는 경우에는
해당 파일을 자동으로 생성하고 내용을 작성하지만, 이미 해당 파일이 있는 경우 기존 내용을 전부
삭제하고 새로운 내용을 작성한다.
페이지를 계속 새로고침하면 "tmp-xxxxxx" 시간값이 1초씩 증가한다.
따라서 약 1~20 초 정도를 더한 값을 기반으로 하여 미리 "tmp-1439817500" 파일을 만든다.
파일을 업로드 하면 위와 같은 패킷이 전송되는데 타이밍을 잘 못 잡아서 파일명을 좀 변경하였다.
Burp-Suite 의 "Repeater" 기능을 사용하면 동일한 패킷을 계속 요청할 수 있다.
요청하다 보면 "tmp-1439817570" 파일이 이미 존재한다고 인식되어 해당 파일 안에 "공인IP:7777"
문자열이 작성된다.
nc를 이용하여 7777번 포트로 미리 열고 대기하다 보면 어떤 문자열들이 전송된다
( $request 변수에 저장되었던 값)
'Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 39번 (0) | 2015.08.16 |
---|---|
Webhacking.kr 38번 (0) | 2015.08.16 |
Webhacking.kr 36번 (0) | 2015.08.16 |
Webhacking.kr 35번 (0) | 2015.08.16 |
Webhacking.kr 34번 (0) | 2015.08.16 |