任意文件上传CTF20关

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    

https://xz.aliyun.com/t/2657

这两个讲的还可以

(试哪个木马经过二次渲染之后还在,留下那个木马。在 上传文件夹里有可留下来的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。

你可能感兴趣的:(任意文件上传CTF20关)