前段js验证
可通过审计修改js代码或burp改包绕过content-type字段校验
将Content-Type修改为image/gif,或者其他允许的类型删除整行删除掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意,双引号要跟着c.php将Content-Type修改为content-Type将 Content-Type: application/octet-stream 冒号后面 增加一个空格文件头校验
将文件头修改为可允许上传文件类型的文件头检查扩展名
黑名单策略
列表名绕过
查找黑名单中的漏网之鱼,比如asa,cer,cer,ashx,asa,cer,cdx,htr,大小写绕过
比如aSp,pHp等能被解析的后缀名:jsp,jspx,jspf,asp,asa,cer,aspx,ashx,php,php ,php3,php4,exe,exee
上传.htaccess文件
通过.htaccess 文件调用 php 的解析器去解析一个文件名只要包含”cimer”这个字符串的任意文件。一个自定义的.htaccess 文件可以以各种各样的去绕过很多上传验证机制。(配合黑名单检测)
1.建立.htaccess 文件,内容如下:<FilesMatch “cimer”> SetHandler application/x-httpd-php
上传 php 木马文件名包含 cimer
将一句话密码设置为cimer利用 php 解析器来解析 jpg 文件创建.htaccess 文件内容如下:AddType application/x-httpd-php .jpg
空格绕过
在后缀名后添加空格文件名绕过
php1,php2,php3,php4,php5,Php,aSp特殊字符绕过
1.asp_白名单策略
通过解析漏洞上传0x00截断绕过
假设文件的上传路径为【http://xx.xx.xx.xx/upfiles/lubr.php.jpg】,通过抓包截断将【lubr.php】后面的【.】换成【0x00】。在上传的时候,当文件系统读到【0x00】时,会认为文件已经结束,从而将【lubr.php.jpg】的内容写入到【lubr.php】中,从而达到攻击的目的。 上传抓包后(假如上传的jpg文件名字为1.jpg)在hex中找到1.jpg对应的十六进制,将“.”对应的十六进制(.的十六进制是2e)改为00,go,在上刀连接就行了
00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞。PS:0x00是字符串的结束标识符
例:1.php%00.jpg
限制条件
PHP<5.3.29,且GPC关闭原理
0x00是字符串的结束标识符,系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。注:00指的是文件的16进制内容里的00,而不是文件名中的00 !!!就是说系统是按16进制读取文件(或者说二进制),遇到ascii码为零的位置就停止,而这个ascii码为零的位置在16进制中是00,用0x开头表示16进制,也就是所说的0x00截断。双扩展名绕过
apache的conf配置有AddHandler php5-script.php没有注释掉,文件名1.php.jpg就能当作php执行文件类型验证
通过抓包将content-type字段改为允许上传的类型文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器,服务器未经任何检验或过滤,从而造成文件的执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。
IIS 6.0 在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。
IIS解析漏洞
IIS6.0
目录解析:/xx.asp/xx.jpg ,如果一个目录以"xxx.asp"的形式命名,那么该目录下的所有类型文件都会被当做asp文件来进行解析执行
文件解析:test.asp;.jpg ,在IIS6.0下,分号后面的不被解析,也就是说test.asp;.jpg会被服务器看成是test.asp
还有IIS6.0 默认的可执行文件除了asp还包含这三种.asa、.cer、.cdx
PUT漏洞
成因:IIS Server 在 Web 服务扩展中开启了 WebDAV ,配置了可以写入的权限,造成任意文件上传。
修复
关闭 WebDAV 和写权限短文件名猜解 PS:IIS6.0~10.0都受影响
成因:IIS 的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。
修复
升级 .net framework
修改注册表禁用短文件名功能
快捷键 Win+R 打开命令窗口,输入 regedit 打开注册表窗口,找到路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,将其中的 NtfsDisable8dot3NameCreation这一项的值设为 1,“1”代表不创建短文件名格式,修改完成后,需要重启系统生效
- CMD 关闭 NTFS 8.3 文件格式的支持 - 将 web 文件夹的内容拷贝到另一个位置,如 c:\www 到 d:\w ,然后删除原文件夹,再重命名 d:\w 到 c:\www。 - 修复成功后显示:Server is not vulnerable - 局限性 - 此漏洞只能确定前6个字符,如果后面的字符太长、包含特殊字符,很难猜解 - 如果文件名本身太短(无短文件名)也是无法猜解的 - 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配 - 远程代码执行 - 成因:在 IIS6.0 处理 PROPFIND 指令的时候,由于对 url 的长度没有进行有效的长度控制和检查,导致执行 memcpy 对虚拟路径进行构造的时候,引发栈溢出,从而导致远程代码执行。 - 修复 - 关闭WebDAV服务 - 使用相关防护设备 - IIS7.0/7.5 - test.jpg/.php URL 中文件后缀是 .php ,便无论该文件是否存在,都直接交给 php 处理,而 php 又默认开启 “cgi.fix_pathinfo” ,会对文件进行“修理”,可谓“修理”?举个例子,当 php 遇到路径 “/aaa.xxx/bbb.yyy” 时,若 “/aaa.xxx/bbb.yyy” 不存在,则会去掉最后的 “bbb.yyy” ,然后判断 “/aaa.xxx” 是否存在,若存在,则把 “/aaa.xxx” 当作文件。 若有文件 test.jpg ,访问时在其后加 /.php ,便可以把 “test.jpg/.php” 交给 php ,php 修理文件路径 “test.jpg/.php” 得到 ”test.jpg” ,该文件存在,便把该文件作为 php 程序执行了。
修复
对新建目录文件名进行过滤,不允许新建包含‘.’的文件取消网站后台新建目录的功能,不允许新建目录;限制上传的脚本执行权限,不允许执行脚本;过滤 .asp/xm.jpg,通过 ISApi 组件过滤。