文件上传绕过姿势
文件上传漏洞应该是渗透测试中用的比较多的漏洞了,毕竟可以很方便的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文件
参考