upload-labs
一个帮你总结所有类型的上传漏洞的靶场
文件上传靶机下载地址:https://github.com/c0ny1/upload-labs?
服务端检查内容 2、? ? 3、 4 、需要结合文件包含漏洞。
黑名单基本都可绕过。最不安全。
pass-01? 客户端绕过
pass-02? ?把以.php结尾的小马改为以.jpg|.png|.gif结尾,用burpsuite抓包,在把.jpg|.png|.gif改回.php即可上传成功
pass-03 :
设置了黑名单和删除两边空格。
$deny_ext=array('.asp','.aspx','.php','.jsp');? 这里是黑名单验证 可以试下php3 php5后缀名? 但是Apache默认是不允许解析 如果运维人员修改配置文件是可以解析的
如果中间件是IIS6.0 2003服务器的话 可以利用IIS的解析漏洞绕过
直接上传名为xx.asp:.jpg的文件
pass 04:
先看源码,集合可以绕过的都设置了黑名单,删除文末的点和收尾去空
利用Windows的命名特性 ,先把马的名字改成xx.jpg抓包 改扩展名 改成xx.php:.jpg 上传。? ?Windows系统会自动去掉:.jpg? ? 上传之后变为xx.php。
但是文件是空的然后再上传一遍? ?然后将文件名改为x.<或x.<<<或x.>>>或x.>><后再次上传,重写x.php文件内容,Webshell代码就会写入原来的x.php空文件中。
pass-05:
先看源码。
分析代码,发现以.htaccess为后缀的文件已经不允许上传,但是??$file_ext =?strtolower($file_ext);?//转换为小写??这一句没有了,我们就可以使用文件名后缀大小写混合绕过,把1.php改为1.phP...来上传
黑名单后缀名:$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");
先将要上传的木马改为jpg格式? ,在抓包 改为 x.phP? ?(windows操作系统不区分大小写所以可以执行)
pass-06:
先看源码:没有收尾去空。
利用Windows系统的文件名特性。文件名最后增加空格和点,写成1.php .,这个需要用burpsuite抓包修改,上传后保存在Windows系统上的文件名最后的一个.会被去掉,实际上保存的文件名就是1.php
滤代码会删除文件名后面的点但是过滤时只过滤.php? 没过滤.php点
利用Windows字体文件命名特性? 在xx.php后面加空格点? . 直接切掉 .? 只留xx.php
pass-07:
看源码:
原理同Pass-06,文件名后加点和空格
pass-08:
分析代码,少了????$file_ext =?str_ireplace(‘::$DATA‘, ‘‘,?$file_ext);//去除字符串::$DATA ???这一句,我们可以采用Windows文件流特性绕过,文件名改成
1.php::$DATA , 上传成功后保存的文件名其实是1.php
pass-09:
原理同Pass-06,上传文件名后加上点+空格+点,改为1.php. .? ? ?(点 空格? 去了 还有一个点)
pass-10:
pass-11:
白名单绕过,跟PHP版本有关。
重点:白名单绕过PHP版本要小于5.3.4? 魔术符号要关闭。
(修复建设:?php版本要小于5.3.4,5.3.4及以上已经修复该问题;magic_quotes_gpc需要为OFF状态)(有可能会上传失败,将版本改为5.3.4以下版本后,开启魔术符号,在关闭,在重启就好啦)
分析代码,这是以时间戳的方式对上传文件进行命名,使用上传路径名%00截断绕过,不过这需要对文件有足够的权限,比如说创建文件夹,上传的文件名写成1.jpg, save_path改成../upload/1.php%00(1.php%00.jpg经过url转码后会变为1.php\000.jpg),最后保存下来的文件就是1.php
pass-12:
原理同Pass-11,上传路径0x00绕过。利用Burpsuite的Hex功能将save_path改成../upload/1.php【二进制00】形式??
pass-13:? (需要在看一遍)
先上传jpg,抓包改为PHP,空格? 绕过文件头检查,添加GIF图片的文件头GIF89a,绕过GIF图片检查。
或者我们使用命令copy 1.jpg /b + shell.php /awebshell.jpg,将php一句话追加到jpg图片末尾,代码不全的话,人工补充完整。形成一个包含Webshell代码的新jpg图片,然后直接上传即可。但是我们没有办法拿到shell,应为我们上传的图片马无法被解析成php形式,通常图片马配合%00或者0x00截断上传,或者配合解析漏洞
pass-14:
源码:
getimagesize()?函数用于获取图像尺寸?,索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
这里有详解:https://blog.csdn.net/sanbingyutuoniao123/article/details/52166617
image_type_to_extension()?函数用于获取图片后缀
做法同上。? (很多函数都可用图片头绕过)
pass-15:
源码:
exif_imagetype()? 此函数是php内置函数,用来获取图片类型。
做法同上。用图片头绕过。
pass-16:
1、生成新的图片(相当于直接干掉图片里的木马)2、给图片重命名,这是最安全的一种方式。
? ? ? ? 原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试基本是不可能构造出能绕过渲染函数的图片webshell的。
这里提供一个包含一句话webshell代码并可以绕过PHP的imagecreatefromgif函数的GIF图片示例。
php图像二次渲染:
https://blog.csdn.net/hitwangpeng/article/details/48661433
https://blog.csdn.net/hitwangpeng/article/details/46548849????
这两个讲的还可以
(试哪个木马经过二次渲染之后还在,留下那个木马。在 上传文件夹里有可留下来的webshell木马)
pass-17:
原理(自己理解):其实图片是有到过对方服务器的,只是以处理速度极快的方式被处理掉了,我么需要在被处理之前让他不被处理,这就是时间竞争。
官方解释:这关利用的是竞争条件,服务器先允许你上传文件,然后检测是否合法,不合法再删除,我们要利用的就是在服务器删除前,访问到我们上传的php。
举个例子:
第一步:
选择准备好的tj.php。
tj.php作用,创建一个文件,再往这个文件里写入一句话木马(代码) 。
只针对上传的文件进行检测,重新写入的文件是不会被删的。
抓包:
开始上传,抓包,发到测试器里,做如下设置:
有效载荷数设为,没有负载,生成3000有效负载
线程数设为100。
最后开始攻击。
我们可以在upload里看到,文件可以上传只是在很短的时间内被删除。
第二步:
在创建一个包,访问tj.php,在被删除之前访问到,就会重新写入一句话木马(代码),时间竞争。访问tj.php,再开一个brup suite,抓包
进行同上设置,两个测试器同时开始攻击,
,在被删除之前访问到,就会重新写入一句话木马(代码),时间竞争。
pass-18:
看源码:7z没有加入黑名单,所以讲下面文件命名为7z。
刚开始没有找到绕过方法,最后下载作者Github提供的打包环境,利用上传重命名竞争+Apache解析漏洞,成功绕过。
上传名字为1.php.7Z的文件,快速重复提交该数据包,会提示文件已经被上传,但没有被重命名。
(阿帕奇从右往左解析,当遇到不认识的扩展名就会往前解析,所以会当成php解析。)
快速提交上面的数据包,可以让文件名字不被重命名上传成功。
然后利用Apache的解析漏洞,即可获得shell
pass-19 :同上。
pass-20:
上传1.jpg
抓包做如下更改。发送。
双文件上传,后者jpg起到一个欺骗的作用,实际上传的是前面的111.php。