【精选】上传漏洞的攻击与防御 | 您所在的位置:网站首页 › 文件包含漏洞的成因有哪些 › 【精选】上传漏洞的攻击与防御 |
一、实验名称 上传漏洞的攻击与防御 二、实验环境(详细说明运行的系统、平台及代码等) 1、攻击机系统环境:Windows 7/8/10 2、浏览器:Firefox 53.0.2(64位) 3、浏览器插件HackBar 1.6.3.1 4、中国菜刀20160620版 5、BurpSuite 1.7.11 三、实验步骤及结果 1、上传之利用PHP5.6.6截断漏洞绕过 漏洞地址:http://222.18.158.243:8007/ 漏洞代码: if(!empty($_FILES['file']['name'])){ $upload_name=$_FILES['file']['name']; $type=substr($upload_name,strrpos($upload_name,'.')+1); if($type == "jpg" || $type == "png" || $type == "gif"){ $address=$_POST['address'].".".$type; if (move_uploaded_file($_FILES['file']['tmp_name'],"uploads/".$address)) { echo "图片地址:uploads/".$address; }} 提示:服务器用的PHP版本为5.6.6,存在0x00截断漏洞。漏洞代码中的type变量获得上传文件的后缀名,address变量是在HTML表单中获取的时间。将会以时间给文件重命名。 一句话木马的文件名为yijuhua.jpg,文件内容为: 打开BurpSuite,抓包。如下图所示: 因为最后的文件名是以address变量命名的,所以此处截断1400324078 首先将其后边加上.php空格,然后切换到BurpSuite 的HEX页面,如下图所示:
因为空格的HEX为20,所以容易查找和修改,将20改为00进行截断,则文件名如下图所示: 服务器上的文件名为1488324078.php0x00.jpg,以为存在截断漏洞,最后的文件名即为1488324078.php,从而绕过实现了上传 编写一句话木马程序 Burpsuit拦截修改address参数为cmd.php0x00 3.成功将木马文件上传 4.成功访问木马文件 6.用蚁剑连接 7.成功连接 通过实验了解上传漏洞的攻击和防御 思考题1、为什么结合文件包含漏洞可以实现对单纯验证文件名后缀的利用? 答:因为php的文件包含函数会将传入的文件当做php进行解析,无论它的后缀名是什么,而通过url直接访问则需是php文件才会被服务器解析。 2、目前上传漏洞攻击和防御的最新技术有哪些? 1.apache 1.x 2.x解析漏洞(实验环境:wamp2.0) 漏洞原理 Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.a.b的“.a”和”.b” 这两种后缀是apache不可识别解析,apache就会把test.php.a.b解析成test.php。 漏洞形式: www.test.com/test.php.a 其余配置问题导致漏洞 如果在 Apache 的配置文件中有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php. 即使文件名是 test2.php.jpg 也会以 php 来执行 如果在 Apache 的配置文件中有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行 如何查看Apache的版本 在phpinfo中查看 2.IIS6.0解析漏洞 目录解析 原理: 服务器默认会把xx.asp目录下的文件都解析成asp文件 形式:www.xxx.com/xx.asp/xx.jpg 文件解析 原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了 形式:www.xxx.com/xx.asp;.jpg 3.nginx解析漏洞( 实验环境:Nginx1.4.6 ) 漏洞原理 Nginx拿到文件路径(更专业的说法是URI)/test.jpg/test.php后,一看后缀是.php,便认为该文件是php文件,转交给php去处理。php一看/test.jpg/test.php不存在,便删去最后的/test.php,又看/test.jpg存在,便把/test.jpg当成要执行的文件了,又因为后缀为.jpg,php认为这不是php文件,于是返回“Access denied.” 这其中涉及到php的一个选项:cgi.fix_pathinfo,该值默认为1,表示开启。开启这一选项PHP可以对文件路径进行“修理”。举个例子,当php遇到文件路径“/1.jpg/2.txt/3.php”时,若“/1.jpg/2.txt/3.php”不存在,则会去掉最后的“/3.php”,然后判断“/1.jpg/2.txt”是否存在,若存在,则把“/1.jpg/2.txt”当做文件“/1.jpg/2.txt/3.php”,若“/1.jpg/2.txt”仍不存在,则继续去掉“/2.txt”,以此类推 漏洞形式 www.xxxx.com/UploadFiles/image/1.jpg/1.php www.xxxx.com/UploadFiles/image/1.jpg%00.php www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php 4.IIS7.5解析漏洞 IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞 漏洞形式 www.xxxx.com/UploadFiles/image/1.jpg/1.php 5.windows系统解析漏洞 旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格] 这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行 漏洞形式 test.asp. test.asp(空格) test.php:1.jpg test.php:: $DATA 6.条件竞争 条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生 |
CopyRight 2018-2019 实验室设备网 版权所有 |