一、文件上传思路
首先我们通过一个网站上传一个非法格式的文件
- 在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。
- 如果网页未弹窗,而在页面弹窗,则考虑后端验证
所以就围绕前端验证绕过和后端验证绕过这两方面展开讨论
二、前端验证
JavaScript验证的几种绕过方式:
- 2.1 通过浏览器审查元素对网页的代码查看,找到对文件格式或大小的限制然后修改即可;
- 2.2 通过Burpsuite工具对浏览器进行代理,抓包对包里的内容进行修改。
- 2.3浏览器禁用JavaScript脚本
三、后端验证
后端验证的方案:
- MIME类型验证
- 文件后缀验证
- 文件路径验证(权限问题)
- 文件内容验证
MIME类型验证绕过
- 上传php文件,通过burpsuite抓包修改content-type的值为允许上传文件类型的MIME值
- 将php文件修改文件格式为允许上传的格式文件,通过抓包修改filename为php的格式
- 截断,当gpc关闭的时候,首先将文件修改为规定的格式如jpg格式如:a.jpg,然后通过抓包修改filename中的文件名为a.php%00.jpg,%00需要URL解码一下,然后上传。此时上传到服务器的文件为a.php
文件后缀验证绕过
-
%00截断
截断的原理可以类比编程里的分号,如我们一条语句要以分号结尾,或者相当于把空字节之后的内容注释掉。具体的原理讲解可参考以下博文:
[基本实验] %00截断攻击的探索
CTF实验吧-上传绕过【0x00截断】
示例:
如目标网站不允许上传php后缀的文件,而我们的目标是要上传一个php文件。此时将文件修改为允许的格式,然后Burp suite抓包,将文件名改为xxx.php%00.jpg,%00要进行URL编码。此时服务器看到%00会认为文件名已经结束从而使得上传到目标网站的文件为xxx.php -
通过大小写混淆
网站后台对后缀的限制只是黑名单限制如不允许php文件格式,此时上传PhP只要与php不同的文件后缀便可绕过 -
通过畸形文件名绕过,如限制asp,但尝试下其他未限制但是仍然属于asp格式文件的后缀,若目标为windows系统,可以通过burpsuite抓包在后缀后面加_或空格,此时windows系统在解析时会自动忽略。如
test.asp改为test.asp_
路径验证绕过
- 通过多种绕过之后将文件上传到目标网站的上传目录下,但是在此目录下有时会被限制权限导致无法执行。
- 通过上传的同时进行burp
suite抓包,如上传xxx.php,将文件名改为…/xxx.php此时如果服务器端未作限制便会将文件上传到上传目录的上一层目录之下,然后获得执行的权限。
文件内容验证绕过
- 当目标服务器对文件内容进行验证,如:检测上传的图片内容的开头是否为图片文件的头部。 通过制作图片马来进行尝试绕过
windows下cmd图片马的制作
- 首先将准备好的图片和写好的代码放到一个文件夹里
- 然后cmd进入到这个目录下面然后cmd进入到这个目录下面
- 输入命令
copy 图片/b + 代码文件/a 生成文件
我生成了一个叫image_shell的文件,便于标识
用写字板打开后搜索代码内的关键字可以看到,代码已经被写入到图片文件内部
四、黑名单限制与白名单限制
黑名单限制
- 简单的来说就是我不允许哪些格式上传,其他的格式我不管。比如:不允许.php
.asp格式上传,如果你上传的文件的后缀与我所规定的格式匹配则会上传失败。
绕过
- 大小写绕过
- 畸形文件名绕过
- %00截断
- windows系统后缀添加_或空格
白名单限制
- 白名单就是我只允许这些格式文件上传,其他文件的格式我一律不允许。如:我只允许上传jpg、png格式的文件,假如你上传一个php格式的文件,则会上传失败。也就是说只有用户上传的文件的格式与我所规定的格式匹配才会上传成功。
绕过
- %00截断
- 修改.htaccess
- 解析漏洞
显然,白名单限制要比黑名单限制更加安全
四、解析漏洞总结
IIS解析漏洞
IIS5.x/6.0:
- IIS6.0:文件夹若为.asp或.asa命名,则文件夹内的文件无论什么后缀都会按照asp的格式进行解析。如xx.asp下有1.jpg,则1.jpg会按照asp进行解析
- IIS6.0下,分号后面的不被解析,如1.asp;.jpg文件,最终文件为1.asp
- IIS6.0可执行文件后缀包含了.asa、.cer、.cdx
Apache解析漏洞
apache1.x/2.x:当碰到不认识的扩展名时,解析文件后缀的方向为从右向左,直到碰到可以解析的后缀。如上传一个文件为xxx.php.sss.aaa
PHP CGI漏洞
IIS7.0、7.5、nginx、PHP的网站可以尝试在图片后面加/.php查看是否按照php进行执行如,1.jpg/.php
五、其他
- 如果.htaccess文件可执行且被上传,可以修改.htaccess文件使得服务器可以将图片格式按照php解析
六、DVWA1.9版本实验
Low级别
low级别可以直接上传php后缀文件,对文件没有做任何限制
Medium级别
对文件的MIME类型做了验证,有三种方法绕过:
- 将浏览器开启代理打开Burp suite抓包,抓到的包显示如下,将content-type改为image/jpeg
然后点击forward
通过菜刀进行连接
成功连接 - 文件包含+文件上传。将准备好的shell文件先改名为x.jpg,然后上传抓包
然后修改filename的后缀为php
最后上传到服务器的文件仍然为php文件 - 通过制作图片木马,上传图片马
首先制作好图片马shell.jpg,然后上传文件
通过菜刀连接
如果可以连接则会显示如下窗口,
结合文件包含,将文件包含的URL拿到菜刀那里进行连接,通过文件包含将图片马按照php格式进行执行然后连接。 - %00截断,当magic_quote_gpc=off时,可以结合截断进行上传
首先将准备好的 shell文件改为jpg格式,然后上传代理抓包
修改如下
%00需要URL解码
然后点击forward,上传到服务器的文件便是x.php
high级别
上传图片马结合文件包含菜刀连接
更多推荐
Web漏洞_文件上传总结(前端js验证、后端验证、DVWA1.9版本实验)
发布评论