[ Natas 13 -> Natas 14 파일 시그니처 ( File Signature ) ]
2017. 9. 25. 20:23ㆍWebHacking/[OverTheWire]Natas
1> 초기 페이지
2> 페이지 소스
3> PHP코드
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 32 33 34 35 36 37 38 39 40 41 42 43 | <? function genRandomString() { $length = 10; $characters = "0123456789abcdefghijklmnopqrstuvwxyz"; $string = ""; for ($p = 0; $p < $length; $p++) { $string .= $characters[mt_rand(0, strlen($characters)-1)]; } return $string; } function makeRandomPath($dir, $ext) { do { $path = $dir."/".genRandomString().".".$ext; } while(file_exists($path)); return $path; } function makeRandomPathFromFilename($dir, $fn) { $ext = pathinfo($fn, PATHINFO_EXTENSION); return makeRandomPath($dir, $ext); } if(array_key_exists("filename", $_POST)) { $target_path = makeRandomPathFromFilename("upload", $_POST["filename"]); if(filesize($_FILES['uploadedfile']['tmp_name']) > 1000) { echo "File is too big"; } else if (! exif_imagetype($_FILES['uploadedfile']['tmp_name'])) { // 업로드한 파일이 이미지 파일인지 확인하는 echo "File is not an image"; } else { if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { echo "The file <a href=\"$target_path\">$target_path</a> has been uploaded"; } else{ echo "There was an error uploading the file, please try again!"; } } } else { ?> | cs |
* exif_imagetype( 파일 )
exif_imagetype() reads the first bytes of an image and checks its signature. ( 출처 : php.net )
파일의 1byte를 읽어들여서 이미지파일인지 확인한다 ( 파일시그니처를 확인한다 )
4> HxD 프로그램을 이용
이전 문제에서 사용한 webshell.txt 파일의 파일 시그니쳐를 조작한다
" FF D8 FF E0 "은 이미지파일의 파일시그니쳐이다
5> 조작한 파일 업로드
6> 파일의 확장자를 조작해서 패킷 전송
7> 이미지 파일로 위장했으며, 확장자는 php로 된 파일을 업로드 하였다
8> 업로드한 파일의 경로로 접속하면서 GET방식으로 cmd변수에 사용할 명령어 입력
9> cmd=/cat%20/etc/natas_webpass/natas14
URL입력창에서 %20 은 스페이스바의 아스키코드값이다
natas14 : Lg96M10TdfaPyVBkJdjymbllQ5L6qdl1
'WebHacking > [OverTheWire]Natas' 카테고리의 다른 글
[ Natas 15 -> Natas 16 PHP Injection ( 비밀번호 유추 ) ] (0) | 2017.09.28 |
---|---|
[ Natas 14 -> Natas 15 PHP Injection ( 쿼리 조건문 변조 ) ] (0) | 2017.09.28 |
[ Natas 10 -> Natas 11 grep 다중명령어 ] (0) | 2017.09.23 |
[ Natas 9 -> Natas 10 grep 다중명령어 ] (0) | 2017.09.23 |
[ Natas 8 -> Natas 9 bin2hex(), base64_encode() ] (0) | 2017.09.23 |