0x01文件上传漏洞
文件上载漏洞顾名思义,就是上载用户可以执行的脚本文件,并允许用户执行服务器端命令。 文件上载通常是get shell最常用、最直接的方法。 但是,文件上传本身是正常的业务需求,因此问题是如何安全地上传。
0x02文件上传的触发条件
上传的文件被解释为Web容器并运行
用户可以直接或间接访问从网页上传的文件
用户上传的文件通常不能通过网站上的程序压缩或更改内容
0x03从防御的观点上传
通常,防止文件上传漏洞分为几个方面,但大致有以下几点
1 .客户端javascript验证
在浏览已加载的文件且尚未单击上传按钮时,可能会出现“仅允许上传xxx扩展名的文件”等内容,但此时不会发送数据包。
旁路方法:
关闭浏览器的javascript功能
用burp抓住包改变扩展名
检测MIME类型
客户端判断:
$ _ files [ ' my file ' ] [ ' type ' ]==' image/JPEG '
服务端判断:
$ fileinfo=finfo _ open (fileinfo _ mime;
$mimetype=finfo_file($fileinfo,$file_true_name );
旁路方法:
在burp中抓住包,修改内容类型
3 .检查内容
服务器端有读取上传的文件,判断文件内容的时候吗? php等
旁路方法:
只要检查文件头,就可以找到兴奋的猎豹图片,然后在winhex上在图片末尾写php代码
4 .检查文件扩展名
检查文件扩展名最直接有效的方法通常基于白名单或黑名单。
黑名单绕道
使用可以解析的其他文件扩展名
jsp jspx jspf
asp asa cer aspx
php phtml php3 php4 php5 PHP phtm
exe exee
绕过特殊文件名
例如,上传时显示test.asp .或test.asp_ (下划线为空格。 这里用下划线表示。 )的命名方法在windows上是不允许的。 请注意,如果绕过验证,windows系统将自动移除后面的点和空间,但Unix/Linux不具有此特性。
舍去00
在某些情况下,服务器端可能具有特定的扩展名,并且正好可以在其他位置自由读取php文件。 此时,可以立即传递图像在这里观看,观看时使用
•Apache分析文档的规则是从右向左判断分析,如果是扩展名无法识别的文档分析,则向左判断。 例如,如果test.php.owf.rar“.owf”和后缀“. rar”是apache的不可识别分析,则apache将test.php.owf.rar称为PHP www.XXX.XXX .
•Apache的httpd.conf的AddHandler php5-script .php在php上运行,即使文件名包含. php,即使文件名为test2.php.jpg。 (配置错误)
nginx分析漏洞(Nginx8.03 ) ) )。
如果打开了cgi.fix_pathinfo) )。
访问www.xx.com/phpinfo.jpg/1.php时,phpinfo.jpg将被解析为php
其中1.php是不存在的文件
0x06参考
某大人物的PPT
文件上传框架