文件上传小结

0x00 基础校验方法

前端校验文件名

1.禁用js或修改js
2.抓包绕过

Content-Type检测

1.抓包修改

0x01 黑名单检验后缀名

1.双写绕过

pphphp

2.大小写绕过

pHp,phP,pHP,Php,PHp,PhP,PHP

3.%00截断(需要php5.2x以下 没记错的话)

1.直接在文件名后面截断
2.在保存路径处写文件名再截断
特别注意保存路径

4.其他php后缀

php3,php4,php5,php7,phpt,phps,phtml(一般unix系的服务器默认解析,windows基本没戏)

.htaccess文件解析规则绕过

<FilesMatch "xxx.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

或者

AddType application/x-httpd-php .xxx

6.不符合windows文件命名规则的文件名&&NTFS 流

[注意 使用wamp进行测试,7.1.2,7.2.10版本下的php不可以实现该操作,猜测为在7.1x版本以后对move_uploaded_file进行修改,限制了这种不符合命名规则的方法,后续继续研究]

  1. xxx.php.
  2. xxx.php(空格)
  3. xxx.php:1.jpg
  4. xxx.php::$DATA
  5. xxx.php::$DATA…

文件名中加冒号(:)

对于这种方式进行绕过所生成的文件名内容为空,需要结合php的windows环境的叠加特性进行文件重写,条件算是比较苛刻
一是要文件上传后没有重命名,二是要windows环境

双引号"     =   点号.
大于符号>   =   问号?
小于符号<   =   星号*

xxx.<
xxx.>>>
对xxx.php进行重写

$DATA

对于$DATA,在NTFS文件系统中,所有文件都至少包含一个流,完整的包含流信息的文件名格式应该是

<filename>:<stream name>:<stream type>
Attention: default stream name for file is $DATA
# 也就是说对于文件xxx.txt,它的完整文件名应该是
xxx.txt:$DATA:$DATA
# 默认文件名为
xxx.txt::$DATA
# 当然stream name可以由用户指定
xxx.txt:sdasdas:$DATA
----------
# 对于文件夹来说stream type = $INDEX_ALLOCATION
# 默认stream name = $I30
# 例如在 cmd 中执行如下代码
md new_dir:$I30:$INDEX_ALLOCATION 

参考资料 https://msdn.microsoft.com/en-us/library/dn393272.aspx

7.结合文件包含漏洞

随便上传一个含一句话木马内容的txt或jpg文件
结合该web应用的文件包含漏洞,包含上传的文件即可

8.服务器解析漏洞

①IIS5.x-6.x 解析漏洞

目录解析=> /xx.asp/xx.jpg (服务器默认会把.asp, .asa目录下的文件都解析成asp文件)
文件解析=> /xx.asp;.jpg (服务器默认不解析;号后的内容)
IIS6.0默认的可执行文件有
.asp
.asa
.cer
.cdx

②apache解析漏洞

Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断
/xxx.php.sdadsa

其他配置问题:(config以及htaccess)
 AddHandler php5-script .php
 =>只要文件名中有.php即可被当作php文件执行,例如xxx.php.jpg
 AddType application/x-httpd-php .xxx
 =>后缀名为.xxx的文件被当作php文件进行解析

③nginx解析漏洞

nginx默认以CGI的方式支持PHP解析,通过在配置文件中正则匹配设置SCRIPT_FILENAME。当访问…/xxx.jpg/1.php时,$fastcgi_script_name会被设置成"xxx.jpg/1.php",然后构造成SCRIPT_FILENAME传递给PHP CGI。
如果php开启了fix_pathinfo选项,其便会认为SCRIPT_FILENAME是xxx.jpg,而1.php是PATH_INFO,因此会将xxx.jpg当成php文件解析

1.jpg/1.php
1.jpg%00.php
1.jpg/%20\0.php

0x02 对于waf的一些绕过方法(内容检测绕过)

1.文件头检查

gif图像文件头 GIF89a
PNG图像文件头 ‰PNG(89 50 4E 47 )

2.其他(waf逻辑漏洞,如安全狗等)

以下都是出现过的漏洞,现已被修补,但思路差不多,就是乱改…
如果有waf源码另说

删除Content-Type
删除Content-Disposition字段里的空格
增加一个空格
修改Content-Disposition字段值的大小写
构造Boundary边界不一致
文件名处回车
多个Content-Disposition
文件名加一堆点
长文件名绕过,文件名使用中文等
name="file1"改成其他filexxxx

0x03 参考资料

https://msdn.microsoft.com/en-us/library/dn393272.aspx
https://www.waitalone.cn/php-windows-upload.html
https://thief.one/2016/09/22/上传木马姿势汇总-欢迎补充/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值