[By Pass] 文件上传的绕过方式

本文以Upload_labs 为例子

目录

1、JS前端验证

2、修改Content-type类型

3、黑名单绕过

4、.htaccess绕过

5、大小写绕过

6、空格绕过

7、点绕过

8、::$DATA绕过

9、点+空格+点绕过

10、双写绕过

11、00截断

12、00截断

13、图片木马绕过

14、getimagesize()图片马

15、exif_imagetype()图片马

16、二次渲染绕过

17、条件竞争

18、图片马条件竞争

19、图片马绕过

20、图片木马


1、JS前端验证

upload_labs第一关

        首先上传一个.php的文件,发现提示只能上传图片格式的后缀名的文件,经过代码审计,发现是在前端进行后缀名的验证。

        我们可以先将这个文件的后缀名改成png,使用BurpSuite进行抓包,将后缀名修改回来,就可以实现绕过验证。

2、修改Content-type类型

upload_labs第二关

        我们上传PHP后缀名的文件发现是不可以的,提示错误。通过代码审计,可以知道这个是对上传的文件类型斤进行限制,所以我我们只需要使用BurpSuite修改文件的Content-type的类型为image/jpeg就可以了。

3、黑名单绕过

upload_labs第三关

        上传后缀名为PHP的文件失败,提示不允许上传.asp,.aspx,.php,.jsp后缀文件!此时我们可以知道这个是一个黑名单的限制,我们可以思考如何绕过黑名单。

        用黑名单不允许上传.asp,.aspx,.php,.jsp后缀的文件,但可以上传.phtml .phps .php5 .pht,前提是apache的httpd.conf中有如下配置代码

AddType application/x-httpd-php .php .phtml .phps .php5 .pht

4、.htaccess绕过

upload_labs第四关

        上传后缀名为PHP的文件,发现提示文件不允许上传。黑名单拒绝了几乎所有有问题的后缀名,除了.htaccess。

        前提条件(1.mod_rewrite模块开启。2.AllowOverride All) 因此先上传一个.htaccess文件,内容如下:

SetHandler application/x-httpd-php 
#所有文件都会被当作PHP文件来执行

上传后缀名为.htaccess的文件

上传一个无后缀名的一句话木马,执行成功

5、大小写绕过

upload_labs第五关

        相比于pass-4,过滤了.htaccess,但将后缀转换为小写去掉了,因此可以使用大小绕过。由于这个源码中将文件重命名了,所以我们需要在响应的数据包中找这个路径。

6、空格绕过

upload_labs第六关

        没有对我们上传的文件的空格进行过滤,所以我们可以在后缀名的尾部添加一个空格,绕过它的过滤。

7、点绕过

upload_labs第七关

        没有对后缀名末尾的点进行处理,利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过。

8、::$DATA绕过

upload_labs第八关

        没有对后缀名中的’::$DATA’进行过滤。在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。利用windows特性,可在后缀名中加” ::$DATA”绕过。

9、点+空格+点绕过

upload_labs第九关

        代码先是去除文件名前后的空格,再去除文件名最后所有的.,再通过strrchar函数来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用1.php. .(点+空格+点)来绕过。

10、双写绕过

upload_labs第十关

        黑名单过滤,将黑名单里的后缀名替换为空且只替换一次,因此可以用双写绕过。

11、00截断

upload_labs第十一关

白名单判断,但$img_path是直接拼接,因此可以利用%00截断绕过。

截断条件:php版本小于5.3.4,php的magic_quotes_gpc为OFF状态

修改路径,添加%00 , %00会被转译成00 , Windows解析到00会当成结束符而停止解析

比如 1.php%00.jpg 会被解析成 1.php ,%00后的内容不会解析

12、00截断

upload_labs第十二关

        save_path参数通过POST方式传递,还是利用00截断,因为POST不会像GET对%00进行自动解码,所以需要在二进制中进行修改

13、图片木马绕过

upload_labs第十三关

上传图片木马,通过Burp Suite将上传的图片内容头部添加一个 GIF89a,因为这个只是检查头部的两个字节。上传后,通过文件包含漏洞将这个图片解析,就可以执行系统命令。

14、getimagesize()图片马

upload_labs第十四关

需要给制作的图片木马上面加上一个GIF89a,检测头部字节信息

15、exif_imagetype()图片马

upload_labs第十五关

继续上传图片马,方法与pass13一样,前提是需要开启php_exif模块。

16、二次渲染绕过

upload_labs第十六关

        从源码来看的话,服务器先是对上传的临时文件类型做了检查,是jpg、png、gif中的任意一种之后才进行上传操作。

        在上传操作中,使用了imagecreatefrom 系列函数来获取原文件的数据,创建一个新的图像文件。再将得到的这个新的图像文件重命名。

        1、imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像

        2、imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像

        3、imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像

        所以到这里我觉得这个图片渲染的意思就是服务器没有保存我们上传的源文件,而是将源文件的内容取出来重新新建了一个文件并且重命名了。

        那么意义何在呐?东西还是那个东西。不就换了一个名字吗?接下来我直接上传之前那种图片马(为了效果更直观把一句话换成了phpinfo()),发现马上打脸了。

这次我们先使用gif的图片马(应为对于png和jpg更容易绕过).

        可以看到gif图片马是成功上传了的,但是在用文件包含时却没有达到预期的效果,没有执行我们想要执行的phpinfo()。

        这是怎么回事呐?我用HxD Hex Editor(16进制编辑器)打开上传之前的shell.gif和服务器中的31717.gif对比发现了问题。

        很明显可以看到服务器上文件末尾的php代码不见了。我想这就是图片渲染干的好事吧。那我们怎么才能让服务器中的文件依然保存我们想要执行的代码呐?

        关于gif的渲染绕过,我们只要找到渲染前后没有变化的位置,然后将php代码写进去,就可以成功上传带有php代码的图片了。

        通过两个文件的仔细对比,确实发现了这样的区域。我们直接在HXD中对文件插入代码。

        然后执行成功。

17、条件竞争

upload_labs第十七关

        从源码来看,服务器先是将上传的文件保存下来,然后将文件的后缀名同白名单对比,如果是jpg、png、gif中的一种,就将文件进行重命名。如果不符合的话,unlink()函数就会删除该文件。

        这么看来如果我们还是上传一个图片马的话,网站依旧存在文件包含漏洞我们还是可以进行利用。但是如果没有文件包含漏洞的话,我们就只能上传一个php木马来解析运行了。那还怎么搞?上传上去就被删除了,我还怎么去访问啊。

        不慌不慌,要知道代码执行的过程是需要耗费时间的。如果我们能在上传的一句话被删除之前访问不就成了。这个也叫做条件竞争上传绕过。

        我们可以利用burp多线程发包,然后不断在浏览器访问我们的webshell,会有一瞬间的访问成功。

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["test"])?>');?>

        把这个php文件通过burp一直不停的重放,然后再写python脚本去不停的访问我们上传的这个文件,总会有那么一瞬间是还没来得及删除就可以被访问到的,一旦访问到该文件就会在当前目录下生成一个shell.php的一句话。在正常的渗透测试中这也是个好办法。因为单纯的去访问带有phpinfo()的文件并没有什么卵用。一旦删除了还是无法利用。但是这个办法生成的shell.php服务器是不会删除的,我们就可以通过蚁剑去链接了。

18、图片马条件竞争

upload_labs第十八关

        从源码来看的话,服务器先是将文件后缀跟白名单做了对比,然后检查了文件大小以及文件是否已经存在。文件上传之后又对其进行了重命名。

        php是不能上传了,只能上传图片马了,而且需要在图片马没有被重命名之前访问它。要让图片马能够执行还要配合其他漏洞,比如文件包含,apache解析漏洞等。

        使用BurpSuite进行一个抓包无限放,使用脚本进行访问

19、图片马绕过

upload_labs第十九关

        使用上传一个图片马,系统会自动指定一个名字,我们访问这个名字,利用文件包含或这个文件解析漏洞,可以直接访问

20、图片木马

upload_labs第二十关

        做到一半发现,可以使用图片木马上传,可以直接执行。

参考文档:

         https://blog.csdn.net/baidu_38294816/article/details/121024014icon-default.png?t=M4ADhttps://blog.csdn.net/baidu_38294816/article/details/121024014  (21条消息) 文件上传漏洞绕过手法_糊涂是福yyyy的博客-CSDN博客_文件上传漏洞绕过方法icon-default.png?t=M4ADhttps://blog.csdn.net/dreamthe/article/details/121603278

(21条消息) upload-labs之第十六关_田田云逸的博客-CSDN博客_upload第16关icon-default.png?t=M4ADhttps://blog.csdn.net/baidu_38294816/article/details/121022854
(21条消息) upload靶场第一-二十一关_ZredamanJ的博客-CSDN博客_upload第二关icon-default.png?t=M4ADhttps://blog.csdn.net/qq_61237064/article/details/121430878?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-121430878-blog-121022854.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-121430878-blog-121022854.pc_relevant_antiscanv2&utm_relevant_index=3(21条消息) upload-labs通关记录_小白白@的博客-CSDN博客_upload-labsicon-default.png?t=M4ADhttps://blog.csdn.net/weixin_44677409/article/details/92799366

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红蓝安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值