DVWA系列(九)——使用Burpsuite进行File Upload(文件上传
File Upload,即文件上传漏洞,通常是由于对上传文件的类型和内容没有进行严格的过滤和检查,使得攻击者可以通过上传木马的方式获取服务器的webshell权限;Windows服务器:Windows Server 2003,IP地址:192.168.37.136;basename 函数返回路径的文件名部分。使用中国菜刀查看并获取webshell权限;高安全级别采用白名单过滤,仅允许上传后缀为jpg、jpeg、png且文件大小小于10万字节的文件。Impossible级别代码对上传文件进行重命名,添加Anti-CSRF token来防范CSRF攻击,并严格检查文件内容,拒绝文件上传Bug;文件上传后,服务器会检查文件是否上传成功,并显示响应消息;High级别限制上传文件后缀名为jpg/JPG/jpeg/JPEG,可以通过Burpsuite抓包并在文件名后添加jpg/JPG/jpeg/JPEG后缀名来绕过,或者通过阶段;
1. 文件包含(File Upload)漏洞介绍
(1) 文件上传
File Upload,即文件上传漏洞,通常是由于对上传文件的类型和内容没有进行严格的过滤和检查,使得攻击者可以通过上传木马的方式获取服务器的webshell权限;
这里上传的文件可以是木马、病毒、恶意脚本等,这种攻击方式是最直接有效的。 “文件上传”本身没有问题。 问题在于文件上传后服务器如何处理和解释文件。 如果服务器的处理逻辑不够安全,将会导致严重的后果;
(二)文件上传漏洞发生的前提条件
可以上传木马
上传的木马可以执行
上传后还要清除路径
2. 文件上传
实验室环境
(1)Windows服务器:Windows Server 2003,IP地址:192.168.37.136;
(2)Linux服务器:192.168.37.135
(3)测试机:Windows7物理机(启用代理,代理服务器为burpsuite)
(4)工具:抓包工具:Burpsuite; 中国菜刀:Cknife
实验过程-Windows
安全级别:低
(1) 设置安全级别
(2)查看源码
(3)源码分析
basename(path,suffix) 函数返回路径的文件名部分。 Path为必填参数,指定要检查的路径; suffix是一个可选参数,它指定文件的扩展名。 如果文件有后缀,则不会输出扩展名;
服务器不对用户上传的文件进行过滤和检查
生成上传路径后,服务器会检查上传是否成功;
(4) 实验操作
4.1> 上传一句话木马(low.php)
木马文件上传路径为:
4.2> 使用中国菜刀查询并获取webshell权限
添加新的外壳;
可以下载和修改服务器的所有文件;
模拟终端
安全级别:中
(1) 设置安全级别
(2)查看源码
(3)源码分析
文件类型必须是jpeg或png;
文件大小限制为100000字节;
(4)实验过程
4.1> 方法一:组合装箱(文件包含+文件上传)
创建一句木马low.png;
上传low.png文件并获取文件上传路径;
注:木马上传路径:
使用中文菜刀获取webshell权限;
查看添加shell的结果
文件虽然上传成功,但是无法成功获取webshell权限;
中国菜刀的原理是向上传的文件发送post请求,通过控制cmd参数来执行不同的命令。 这里,服务器将木马文件解析为图片文件,所以当向其发送post请求时,服务器只会返回这个“图片”文件,而不会执行相应的命令;
那么如何让服务器将图片文件解析成PHP文件呢? 我们可以利用该文件包含漏洞(无论文件后缀是否为php,它都会尝试将其作为php文件执行,如果文件内容为php,则会正常执行,结果为如果没有,文件内容将被原封不动地打印出来,因此该文件包含经常导致任意文件读取和任意命令执行的bug;)
我们可以利用包含漏洞的文件获取webshell权限,打开中国菜刀,右键添加,在地址栏输入:
//tp://192.168.37.136/dvwa/hackable/uploads/low.png
在中国菜刀中,重新添加一个shell,文件路径如下
理论上是可以成功的,但是由于版本等问题,没有成功;
4.2> 方法二:BurpSuite抓包并修改content-type
上传木马文件low.png,抓包后修改后缀名; 可以看到文件类型为image/png,尝试修改文件名为low.php
查看上传结果
使用中国菜刀查询并获取webshell权限
4.3> 方法三:截断绕过
截断被绕过。 此时,服务器会认为low.php.png的文件名为low.php,并将其解析为PHP文件(仅适用于PHP版本低于5.3.4的情况)。 本次实验的PHP版本是5.5 .53,所以结果不会成功; 但流程和思路如下:
创建-low.php.png;
上传文件;
通过Burpsuite抓包检查文件类型; 文件类型为 image/png
上传成功;
使用中国菜刀查看并获取webshell权限;
由于版本平台问题(本次实验的PHP版本为5.5.53),没有成功;
4.4>方法四:系统本身存在分析漏洞
有些系统会将带有木马文件的图片解析成PHP文件执行;
安全级别:高
(1) 设置安全级别
(2)查看源码
(3)源码分析
substr():返回字符串的一部分;
$uploaded_ext:等于文件扩展名;
getimagesize(string filename):该函数会读取文件头并返回图像的长宽等信息。 如果没有相关的图像文件头,函数会报错。
getimagesize():函数限制上传文件的文件头(限制文件大小和图片大小)。
高安全级别采用白名单过滤,仅允许上传后缀为jpg、jpeg、png且文件大小小于10万字节的文件。 高安全级别仍然采用白名单过滤,仅允许上传后缀为jpg、jpeg、png且文件大小小于10万字节的文件。
(4)实验过程
用记事本打开1.jpeg,最后添加一句木马;
上传图片;
上传成功;
使用中文chopper获取webshell权限
安全级别:不可能
(1) 设置安全级别
(2)查看源码
(3)源码分析
Impossible级别代码对上传文件进行重命名(MD5值,导致无法绕过过滤规则的截断),添加Anti-CSRF token来防范CSRF攻击,并严格检查文件内容,拒绝文件上传Bug;
实验过程-Linux
安全级别:低
(1)设置安全级别
(2)查看源码
(3)源码分析
服务器对上传文件的类型和内容不做任何限制;
文件上传后,服务器会检查文件是否上传成功,并显示响应消息;
安全级别:中
(1)设置安全级别
(2)查看源码
(3)源码分析
服务器限制上传文件类型为jpeg;
文件大小必须小于100000字节;
安全级别:高
(1) 设置安全级别
(2)查看源码
(3)源码分析
High级别限制上传文件后缀名为jpg/JPG/jpeg/JPEG,可以通过Burpsuite抓包并在文件名后添加jpg/JPG/jpeg/JPEG后缀名来绕过,或者通过阶段;