Season 1/워게임

Old - 41 Write Up

작성자 - LRTK

파일을 업로드하는 페이지가 나왔다.

 

코드를 살펴봤다.

<?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~”);
  }
?>

코드를 보니, <, >, ?, ., /을 치환되어서 파일 이름에 스크립트는 불가능해 보인다.

 

$f = @fopen(“./{$upload_dir}/{$fn}”,”w”);
@fwrite($f,$flag);

이 코드를 보니, 파일을 읽으면 Flag를 주는 것으로 판단된다.

 

그래서 업로드 폴더를 알아내기 위해 몇가지 실험을 해봤다.

그 중 하나가 파일을 선택하지 않고, 업로드를 시도하니 오류를 출력되는 것을 알 수 있었다.

에러 메시지를 확인하니, cp 명령어에서 일어나는 오류가 출력되는 것으로 보인다.

이를 이용하여 파일을 업로드하여, cp 명령어를 에러를 발생하도록 하겠다.

 

현재 내가 오류를 줄 수 있는 방법은 파일명과 파일의 내용으로 두가지 선택 상항이 있다.

나는 일단 파일명으로 에러를 발생시키려고 한다.

인터넷에 파일명의 길이를 검색해봤다.


파일명은 255bytes 크기로 제한된다는 것을 알 수 있었다.

 

개인적으로 궁금하여 한번 시도해봤다.

------WebKitFormBoundaryamSoOBSPCV58OK7l
Content-Disposition: form-data; name="up"; filename="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Content-Type: application/octet-stream


------WebKitFormBoundaryamSoOBSPCV58OK7l--

255글자로 파일명을 지정하여 업로드를 진행하였다.


에러가 발생하지 않았다.

 

이제 256글자로 파일명을 지정하여 업로드를 진행하였다.


에러가 발생되었다.

에러 메시지가 출력되어서 업로드 폴더명이 유출되었다.

 

파일명을 test로 하여 업로드 후 test를 출력해보겠다.

------WebKitFormBoundaryJBfUcczUZgDMbNiR
Content-Disposition: form-data; name="up"; filename="test"
Content-Type: application/octet-stream


------WebKitFormBoundaryJBfUcczUZgDMbNiR--

업로드를 진행 후, 업로드 폴더에 있는 파일을 요청했다.

 

https://webhacking.kr/challenge/web-19/4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/test

Flag를 얻을 수 있었다.

'Season 1 > 워게임' 카테고리의 다른 글

Old - 51 Write Up  (0) 2021.05.22
Old - 43 Write Up  (0) 2021.05.21
Old - 21 Write Up  (0) 2021.05.20
suninatas/웹/2번 문제풀이  (0) 2021.05.19
[dreamhack] xss-1 문제풀이  (0) 2021.05.19
Contents

이 글이 도움이 되었다면, 응원의 댓글 부탁드립니다.