文件上传绕过姿势
文件上传漏洞应该是渗透测试中用的比较多的漏洞了,毕竟可以很方便的getshell,可是网站也会有很多限制,这里就总结一下文件上传的绕过姿势。
绕过姿势
客户端
客户端使用JavaScript校验上传文件的后缀名,在文件未上传到服务器时,就对文件进行验证,任何客户端的验证都是不安全的。
绕过也是比较简单
| 
 | 
 | 
服务端
MIME验证
通常服务器端会做类似如下验证
| 
 | 
 | 
此时,只需抓包修改conten-type为image/jpeg即可
文件内容验证
文件幻数检测
在文件头部加上一些幻数,后面写木马即可,比如jpg–>JFIF gif–>GIF89a PNG–>PNG
文件相关信息检测
通常使用getimagesize()函数,只需在幻数基础上加一些杂乱信息,比如
| 
 | 
 | 
文件扩展名
| 
 | 
 | 
截断绕过
| 
 | 
 | 


服务器解析漏洞绕过
IIS
低版本(<7.0)时
| 
 | 
 | 
IIS(7.0/7.5)
同Nginx的CGI解析漏洞
Apache
Apache 解析文件的规则是从右到左开始判断解析,如果扩展名不认识时,就再往左判断。比如 test.php.php1,“php1” 这种扩展名是Apache不可识别解析,Apache就会把test.php.php1解析成php。
故可以构造木马文件名类似为:xxx.php.aaa
Nginx
| 
 | 
 | 
如:上传名为xx.jpg%00.php就会解析为php
| 
 | 
 | 
如:可以在x.txt里直接写入木马
其它绕过
操作系统文件命令规则
- Windows - 上传不符合windows文件命名规则的文件名,如 - test.asp.- test.asp(空格)- test.php:1.jpg- test.php::$DATA- shell.php::$DATA…….,会被系统自动去掉不符合规则符号后面的内容。
- Linux - 后缀名大小写,可以试试上传pHp后缀的文件。 
.htaccess文件攻击
通过.htaccess文件调用php解析器去解析.jpg(或者其他)文件,.haccess文件代码如下:
| 
 | 
 | 
然后上传扩展为.jpg的任意文件马都会被解析为php


注:.htaccess是apache服务器中的一个配置文件,不是上传的文件的黑名单之内 ,所以.htaccess文件是可以上传成功。
.user.ini文件攻击
只要中间键是以fastcgi运行的php都可以用这个方法,.user.ini能被动态加载,它也有两个配置项:auto_append_file和auto_prepend_file,直接在.user.ini中添加
| 
 | 
 | 
就可以让正常的php文件执行前自动包含x.jpg(图片马),类似于require()


注:前提是含有.user.ini的文件夹下需要有正常的php文件
参考
