PHP代码审计学习(9)——文件上传
2021-01-27 14:16
标签:技术 场景 div 前端 就是 服务 失败 wooyun center 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。显然这种漏洞是getshell最快最直接的方法之一,需要说明的是上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。 这个比较好找,黑盒就在找页面到上传点就好了,白盒找相关的上传函数 文件可上传 还是直接上DVWA的吧(我太菜了) 访问页面,直接上传.php文件 查看源码 并未做任何过滤而且给出了上传文件保存的位置,直接上传一句话就可以。(插眼) 查看源码 发现增加了一个文件类型和大小判断,但是$_FILES[‘uploaded’][‘name’]这里没有任何处理,所以上传php文件,抓包修改它的文件类型,也就是Content-Type值为image/jpeg
用到了substr函数对字符串进行分割,同时用strpos函数匹配.号最后出现的位置。 关键代码 这里对上传文件的类型做了限制,结合刚才判断.号位置的语句,首先可以把.php.jpg方法PASS掉。 同上一关一样,抓包修改文件类型,因为都没有对MIME进行严格判断。 加入了token防止CSRF,对文件内容进行了严格的过滤,而且对上传的文件进行md5重命名,没有给上传恶意文件的机会 这个比较常见也比较简单,一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。 这段代码就是检测我们上传的文件的后缀名,只允许png/jpeg/gif,判断该类检测的方法:选择一个禁止上传类型的文件上传,当点击确定按钮之后,浏览器立即弹窗提示禁止上传,一般就可以断定为客户端JavaScript检测。 绕过这个很好绕,因为是在前端,所以设置代理,先将文件改为允许的类型上传绕过前端,然后再抓包将文件类型改回来 这个就是DVWA的Medium级别,校验请求头content-type字段绕过 使用burp代理,修改Content-Type的参数 比较一下,白名单比黑名单更安全,一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件。如.php、.jsp、.py等,但经常会出现漏网之鱼 绕过方法: 文件名大小写绕过: 名单列表绕过: 特殊文件名绕过: 0x00截断绕过: 上传.htaccess文件攻击:(适用于黑名单检测方式,黑名单中未限制.htaccess) 解析调用/漏洞绕过 .user.ini文件绕过(适用于黑名单检测方式,黑名单中未限制.user.ini) 文件头绕过 多个Content-Disposition 文件扩展名服务端白名单校验。 文件内容服务端校验。 上传文件重命名。 隐藏上传文件路径。 https://www.cnblogs.com/wangtanzhi/p/12243206.html#autoid-0-5-0 https://www.secpulse.com/archives/95987.html PHP代码审计学习(9)——文件上传 标签:技术 场景 div 前端 就是 服务 失败 wooyun center 原文地址:https://www.cnblogs.com/Lee-404/p/13220957.html文件上传漏洞
挖掘思路
前提
知道文件上传的路径
上传文件可以被访问
上传文件可以被执行案例
LOW
Medium
High
Impossible级别
文件上传姿势
1、客户端JS检测
function check()
{
var filename = document.getElementById("file");
var str = filename.value.split(".");
var ext = str[str.length-1];
if(ext==‘jpg‘||ext==‘png‘||ext==‘jpeg‘||ext==‘gif‘)
{
return true;
}
else
{
alert("仅允许上传png/jpeg/gif类型的文件!")
return false;
}
return false;
}
2、服务端MIME检测(Content-Type检测)
php
if($_FILES[‘userfile‘][‘type‘]!="image/gif")
{//检测Content-type
echo"错误文件类型";
exit;
}
$uploaddir=‘uploads/‘; //上传路径
$uploadfile=$uploaddir.basename($_FILES[‘userfile‘][‘name‘]);
if(move_uploaded_file($_FILES[‘userfile‘][‘tmp_name‘],$uploadfile))
{
echo"文件上传成功.\n";
}
else
{
echo"文件上传失败.\n";
}
?>
3、服务端文件扩展名检测
使用Asp、PhP之类的文件名绕过黑名单检测
用黑名单里没有的名单进行攻击,比如很名单中没有的asa或者cer之类
比如在发送的HTTP包中,将文件名改为”dama.asp.”或者”dama.asp_”(下划线为空格),这种命名方式在window系统里是不被允许的,所以需要在Burp Suite中抓包修改,上传之后,文件名会被window自动去掉后面的点或者空格,需要注意此种方法仅对window有效,Unix/Linux系统没有这个特性。
操作方法:上传dama.jpg,Burp抓包,将文件名改为dama.php%00.jpg,选中%00,进行url-decode。
该文件仅在Apache平台上存在,IIS平台上不存在该文件,该文件默认开启,启用和关闭在httpd.conf文件中
https://www.cnblogs.com/Lee-404/p/12919552.html
https://www.cnblogs.com/Lee-404/p/12838790.html CTF题
https://wooyun.js.org/drops/user.ini%E6%96%87%E4%BB%B6%E6%9E%84%E6%88%90%E7%9A%84PHP%E5%90%8E%E9%97%A8.html //.user.ini讲解在木马内容基础上再加了一些文件信息,有点像下面的结构
GIF89a
phpinfo(); ?>在IIS的环境下,上传文件时如果存在多个Content-Disposition的话,IIS会取第一个Content-Disposition中的值作为接收参数,而如果waf只是取最后一个的话便会被绕过,
文件上传防御
参考链接
文章标题:PHP代码审计学习(9)——文件上传
文章链接:http://soscw.com/index.php/essay/47795.html