728x90
File Upload
- 서버에 악성 파일을 업로드하여 실행하거나 권한을 얻는 공격

DVWA File Upload 페이지는 위 사진과 같이 파일을 업로드할 수 있는 기능이 구현되어 있었다.
<?php
if( isset( $_POST[ 'Upload' ] ) ) {
// Where are we going to be writing to?
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
// File information
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
// Is it an image?
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
( $uploaded_size < 100000 ) ) {
// Can we move the file to the upload folder?
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
// No
$html .= '<pre>Your image was not uploaded.</pre>';
}
else {
// Yes!
$html .= "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
else {
// Invalid file
$html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}
?>
DVWA 깃허브 코드를 보니 Upload 버튼이 눌렸을 때, hackable/uploads/ 경로로 파일이 업로드 되고 있다.
업로드 할 파일의 이름, 타입, 크기를 가져와 타입이 image/jpeg 또는 image/png 인지 확인하고, 크기는 100KB 미만인지 확인하고 있다.
유효한 파일일 경우, move_uploaded_file() 함수를 통해 파일을 지정된 경로로 저장하고 있다.
https://blog.naver.com/nyyyun2/223667083198
MIME 타입
Multipurpose Internet Mail Extensions Type 인터넷에서 전송되는 데이터의 파일 형식과 내용의 성격...
blog.naver.com

업로드 할 파일의 정보를 필터링하고 있지만,
파일 업로드 후 Burp Suite로 패킷을 캡처하면 타입(mime-type) 검증 부분은 위조가 가능해 보인다.
<?php
system("ls")
?>

따라서 위와 같이 시스템 명령어를 실행하는 php 코드를 업로드한 후,
(현재 디렉터리의 하위 목록 출력)
ㅤ

해당 패킷을 캡처해 mime 타입을 image/jpeg 또는 image/png로 수정하면 우회가 가능할 것으로 보인다.
ㅤ

패킷을 서버로 전송하니 성공적으로 파일 업로드가 되었고,
ㅤ

업로드한 파일 경로를 보니, ls 명령어가 실행된 걸 볼 수 있었다.
728x90
'DVWA' 카테고리의 다른 글
| DVWA | SQL Injection | medium (0) | 2024.11.21 |
|---|---|
| DVWA | Insecure CAPTCHA | medium (1) | 2024.11.20 |
| DVWA | File Inclusion | medium (0) | 2024.11.20 |
| DVWA | CSRF | medium (2) | 2024.11.19 |
| DVWA | Command Injection | medium (0) | 2024.11.19 |