首先找到文件上传的窗口,然后判断是服务器端还是客户端的验证,客户端较容易判断出来,最后检验是哪种服务器端的过滤方式。判断是客户端和服务端检验,再检验是白名单还是黑名单,根据具体情况来决定采用什么绕过方式。
文件上传漏洞:服务器端和客户端
服务器端:
.htaccess攻击:
这个攻击主要是上传一个.htaccess文件,让我们上传到服务器端的文件能运行起来
看一段代码来理解下:
<FilesMatch "Monster">SetHandler application/x-httpd一php
这段代码的意思就是,我上传的文件,只要是Monster.xxx就以php格式运行,例如当我上传一个Monster.txt,当我访问这个文件的时候,这个文件就会以php形式运行起来。
这个漏洞主要应用在:上传漏洞getshell,维持访问后门。
%00截断上传
当服务器端过滤文件的时候,是通过判断文件后缀来审查文件。
我们可以在传输这个文件改变文件的后缀名,例如:
www.xxx.com/qq.jpg(正常文件上传)
www.xxx.com/qq.php%00.jpg(上传一个php文件,但我们上传到服务器端要以php运行呀,所以要截断.jpg)
注意:%00这个在url上要编码成url形式,否则url编码之后上传上去就不是%00了,所以会产生错误。
Mine修改上传
当服务器端过滤文件的时候,是通过判断文件类型来审查文件。
那我们就要改数据包中的Content-Type
jpg的类型是:image/jpeg
伪造路径攻击
结合解析漏洞利用
编辑器任意文件上传
通常进到后台,大多数有个编辑器,这时候应该先确定是什么编辑器,再去网上进行搜索该编辑器对应版本的漏洞。
客户端:
JS绕过上传
JS验证时通过Java script来判断文件,过滤,这个好解决,就是直接删除过滤的代码,因为这是客户端代码,这些代码是直接显示出来的,所以我可以知道他们的代码。
或者通过捉包修改我们的数据包进行任意文件上传,可以看反应速度来确定下是不是js本地验证,客户端反应快。
这是玄魂工作室的,对于我来说,这些技术都已经是掌握了,但是怕自己忘,还是总结下比较好。其实还有双文件上传,绕过黑名单机制,就是那种改文件后缀名的。