【DVWA】File Upload任意文件上传实战
何必择地,何必择时,但问立志之真不真耳
1.File Upload(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
$html .= '<pre>Your image was not uploaded.</pre>';
}
else {
// Yes!
$html .= "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
?>
basename(path,suffix)
函数返回路径中的文件名部分,如果可选参数suffix为空,则返回的文件名包含后缀名,反之不包含后缀名。
可以看到,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。
文件上传漏洞的利用是有限制条件的,首先当然是要能够成功上传木马文件,其次上传文件必须能够被执行,最后就是上传文件的路径必须可知。
上传文件1.php(一句话木马)
上传成功并且返回了路径
蚁剑连接,拿到shell
2.File Upload(Medium)
相关代码分析
可以看到,Medium级别的代码对上传文件的类型、大小做了限制,要求文件类型必须是jpeg或者png,大小不能超过100000B(约为97.6KB)。
第一种方法,修改文件类型为image/png
放包,成功上传
第二种方法,将木马文件写成.png后缀上传,然后修改文件后缀为.php
放包,成功上传
第三种方法,%00截断上传,将文件名改为shell.php%00.png
在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,可以在文件名中使用%00截断,所以可以将文件名改为shell.php%00.png
可以看到,包中的文件类型为image/png,可以通过文件类型检查。
上传成功
而服务器会认为其文件名为shell.php,顺势解析为php文件。由于本次实验环境的php版本为5.5.9,所以无法进行验证。
3.File Upload(High)
相关代码分析
strrpos(string,find,start)
函数返回字符串find在另一字符串string中最后一次出现的位置,如果没有找到字符串则返回false,可选参数start规定在何处开始搜索。
getimagesize(string filename)
函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。
可以看到,High级别的代码读取文件名中最后一个”.”后的字符串,期望通过文件名来限制文件类型,因此要求上传文件名形式必须是”*.jpg”、”*.jpeg” 、”*.png”
之一。同时,getimagesize函数更是限制了上传文件的文件头必须为图像类型。
尝试上传一个一句话后门的图片格式脚本 shell.png
发现即使图片类型为png的, 但是当内容非图片格式的时候, 也不能上传
第一种方法,可以通过添加jpg图片的格式头到脚本文件里进行绕过
首先在文本文档里写入<?php phpinfo();?>文件后缀修改为.jpg
上传文件,抓包,在脚本文件前加上GIF89,放包
成功上传
第二种方法,在图片文件内容后添加<?php phpinfo();?>
命令行输入copy 1.jpg/b + shell.php/a 2.jpg
点击上传
文件上传成功
上传之后的脚本是图片格式的, 不能当做php解析,
webshell管理工具的原理是向上传文件发送包含参数的post请求,通过控制参数来执行不同的命令,而这里服务器将木马文件解析成了图片文件,因此向其发送post请求时,服务器只会返回这个“图片”文件,并不会执行相应命令。
如果让让我们的图片以 php 格式运行,可以借助High级别的文件包含漏洞来获取webshell权限,让我们的图片格式的一句话木马以php格式运行。
第一种方法,构造url:
/vulnerabilities/fi/?page=file:var/www/html/hackable/uploads/phpinfo.jpg
成功解析phpinfo文件
第一种方法,构造url:
/vulnerabilities/fi/?page=file:var/www/html/hackable/uploads/2.jpg
可以看到, jpg的木马图片被当做php解析了
4.File Upload(Impossible)
相关代码分析
imagecreatefromjpeg ( filename )
函数返回图片文件的图像标识,失败返回false
imagejpeg ( image , filename , quality)
从image图像以filename为文件名创建一个JPEG图像,可选参数quality,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。
imagedestroy( img )
函数销毁图像资源
可以看到,Impossible级别的代码对上传文件进行了重命名(为md5值,导致%00截断无法绕过过滤规则),加入Anti-CSRF token防护CSRF攻击,同时对文件的内容作了严格的检查,导致攻击者无法上传含有恶意脚本的文件。
文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。
免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。
转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业
CSDN:
https://rdyx0.blog.csdn.net/
公众号:儒道易行
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect
博客:
https://rdyx0.github.io/
先知社区:
https://xz.aliyun.com/u/37846
SecIN:
https://www.sec-in.com/author/3097
FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85