文件上传漏洞类型分类
如何判断上传漏洞类型?
本次实现使用的靶场系统是upload-labs upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。
任务1:
查看下源码 只在js里添加了几个白名单 后端没有任何过滤
第一关只有前端用JavaScript过滤 先把木马的名字改为合法的后缀 再用burp抓包 修改成PHP后缀名就可以上传
任务2:
第二关检查的是文件类型
步骤和任务一的一样
任务3:
还是先查看一下源代码
设置了黑名单 删除两边空格
$deny_ext=array('.asp','.aspx','.php','.jsp'); 这里是黑名单验证 可以试下php3 php5后缀名 但是Apache默认是不允许解析 如果运维人员修改配置文件是可以解析的
如果中间件是IIS6.0 2003服务器的话 可以利用IIS的解析漏洞绕过
直接上传名为 xx.asp:.jpg的文件
任务4:
利用Windows的命名特性 上传xx.php:.jpg Windows系统会自动去掉:.jpg
先把马的名字改成xx.jpg 然后利用burp抓包 修改文件名
文件上传成功了
但是文件是空的 然后再上传一遍 然后将文件名改为4.>>或4.>>
任务5:
源代码
和之前对比没有了转换为小写
黑名单后缀名:$deny_ext=array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
可以直接把后缀名改成PHP或者PhP等组合绕过
由于Windows系统不区分大小写 大写PHP也可以正常当做php文件解析
任务6:
源码
过滤代码会删除文件名后面的点 但是过滤时只过滤.php 没过滤.php点
利用Windows字体文件命名特性 在xx.php后面加空格点 . 直接切掉 . 只留xx.php
任务7:
源代码
和任务6原理相同 加空格加点
任务8:
什么是数据流?
php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名
相比之前缺少了数据流检测
可以在后面直接加::$DATA绕过
任务9:
加点加空格加点
删除掉末尾点 还有点和空格 再去空 还剩个点 Windows会自动去掉后面的点
任务10:
因为只过滤了一次php
在后面打乱一个php中间插入一个php 过滤掉完整的php后又拼出一个完整的php
任务11:
这关是白名单验证 可以使用%00截断绕过 但是PHP版本要小于5.3.4
任务12:
00截断上传
任务13:
绕过文件头检查,添加GIF图片的文件头GIF89a,绕过GIF图片检查
或者我们使用命令copy 1.jpg /b + shell.php /a
webshell.jpg,将php一句话追加到jpg图片末尾,代码不全的话,人工补充完整。形成一个包含Webshell代码的新jpg图片,然后直接上传即可。但是我们没有办法拿到shell,应为我们上传的图片马无法被解析成php形式,通常图片马配合%00或者0x00截断上传,或者配合解析漏洞
任务14:
同13
任务15:
同14
任务16:
16多出个图片二次渲染
直接找一个正常的图片 然后在里面插入webshell 不用管图片是否可以正常显示 被二次渲染后webshell还是在里面
图片插入一句话木马方式和任务13一样
任务17:
利用条件竞争删除文件时间差绕过
服务器先把文件保存 然后再检查上传的文件是否合法 不合法再进行删除
先用burp多线程上传几千个文件 再多线程访问上传的文件 文件在打开时是无法删除的
利用服务器在处理文件时的时间差 不让程序删除上传的文件
先随便上传个图片 获取文件地址
图片地址
上传木马用burp抓包
把数据包发送给测试器
先清除掉负载
上传3000个文件 没有负载标记
线程数100 快速上传让程序来不及处理就访问 访问时文件就被占用 程序再去删除就无法删除
再抓一个访问这个文件的数据包 和上图一样 访问3000次 线程100
任务18:
还是和上一关一样 快速上传几千个文件 让程序来不及重命名
然后利用Apache的解析漏洞 直接访问xx.php.7z
任务20:
双文件上传
用于欺骗
如果hatccess没有加入黑名单 可以上传.hatccess文件 文件内容为
SetHandler application/x-httpd-php
意思为任意拓展名都当做PHP脚本解析