文件上传漏洞-uploadlabs靶场11~20关解析

简介

在现代互联网的web应用程序中,上传文件是一种常见的功能,因为它有助于提高业务效率,比如社交网站中,允许用户上传图片、视频、头像和许多其他类型的文件。然而向用户提供的功能越多,web应用受到攻击的风险就越大,如果web应用存在文件上传漏洞,那么恶意用户就可以利用文件上传漏洞将可执行脚本程序上传到服务器中,获取网站的权限,或者进一步危害服务器。
为什么文件上传存在漏洞?
上传文件时,如果服务器代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)。
会造成什么危害?
非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又称之为webshell,也可将webshell脚本称为一种网页后门,webshell脚本具有强大的功能,比如查看服务器目录,服务器中的文件,执行系统命令等。

关卡

上一篇我们介绍了1~10关,这一篇我们继续介绍11~20关卡。

GET-%00截断-Pass-11

00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。00截断通常用来绕过web软waf的白名单限制。
产生的条件

  • php版本小于5.3.29
  • magic_quotes_gpc = Off

最终达到的效果:

www.xxx.com/shell.jpg
www.xxx.com/shell.php%00.jpg => www.xxx.com/shell.php

我们直接查看源码:
文件上传漏洞-uploadlabs靶场11~20关解析_第1张图片
直接burp抓包:

文件上传漏洞-uploadlabs靶场11~20关解析_第2张图片
文件上传漏洞-uploadlabs靶场11~20关解析_第3张图片
获得shell:
文件上传漏洞-uploadlabs靶场11~20关解析_第4张图片

POST-%00截断-Pass-12

原理和pass-11是一样的。只是post的处理方式不一样。
查看源码:
文件上传漏洞-uploadlabs靶场11~20关解析_第5张图片
路径变为了post的方式。
我们知道GET传惨会自动解码,post不会, 所以我们在修改包的时候需要主动去解码。
文件上传漏洞-uploadlabs靶场11~20关解析_第6张图片
修改为:
文件上传漏洞-uploadlabs靶场11~20关解析_第7张图片
解码:
文件上传漏洞-uploadlabs靶场11~20关解析_第8张图片
解码后:
文件上传漏洞-uploadlabs靶场11~20关解析_第9张图片
放包:
文件上传漏洞-uploadlabs靶场11~20关解析_第10张图片
拿shell:
文件上传漏洞-uploadlabs靶场11~20关解析_第11张图片

图片码-Pass-13

直接查看源码:
文件上传漏洞-uploadlabs靶场11~20关解析_第12张图片
所以上图片码,图片码制作比较简单。需要一张真的图片, 需要一个php文件。
然后将图片和php文件组合在一起即可。
准备一张图片和一句话木马:
image.png
然后在cmd中执行:

copy 1.png /b + shell.php shell.png

image.png
文件上传漏洞-uploadlabs靶场11~20关解析_第13张图片
接下来上传这张图片,并抓包:
文件上传漏洞-uploadlabs靶场11~20关解析_第14张图片
可以清晰的看到码的存在。
文件上传漏洞-uploadlabs靶场11~20关解析_第15张图片
利用文件包含获取shell:
文件上传漏洞-uploadlabs靶场11~20关解析_第16张图片
文件上传漏洞-uploadlabs靶场11~20关解析_第17张图片

图片码-Pass-14

这关和Pass-13一样。只需要上传图片码即可。
只是需要了解一下过来得机制即可:
文件上传漏洞-uploadlabs靶场11~20关解析_第18张图片
这个函数的意思是:会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的。
所以操作和上一关一致。
文件上传漏洞-uploadlabs靶场11~20关解析_第19张图片

图片码-Pass-15

看源码:
文件上传漏洞-uploadlabs靶场11~20关解析_第20张图片
先确定是否开启php_exif模块:
文件上传漏洞-uploadlabs靶场11~20关解析_第21张图片
exif_imagetype() 读取一个图像的第一个字节并检查其签名。
本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER[‘HTTP_ACCEPT’] 结合使用来检查浏览器是否可以显示某个指定的图像。
具体操作和13,14一致。
文件上传漏洞-uploadlabs靶场11~20关解析_第22张图片

二次渲染-Pass-16

直接看源码:
文件上传漏洞-uploadlabs靶场11~20关解析_第23张图片
我们还是按照13,14,15的思路进行上传:
发现没有info信息了。
文件上传漏洞-uploadlabs靶场11~20关解析_第24张图片
二次渲染的时候把码的信息给干掉了。
怎么办呢?
把原图和他修改过的图片进行比较,看看哪个部分没有被修改。将php代码放到没有被更改的部分,再重新上传即可绕过。
使用HxD Hex Editor进行比较
下载地址:https://mh-nexus.de/en/hxd
文件上传漏洞-uploadlabs靶场11~20关解析_第25张图片
自己搞,jpg图片容易损坏,建议试用gif尝试。
文件上传漏洞-uploadlabs靶场11~20关解析_第26张图片
可以在没有修改的地方去插入码,二次渲染的时候就不会被干掉了。
文件上传漏洞-uploadlabs靶场11~20关解析_第27张图片
重新上传:
文件上传漏洞-uploadlabs靶场11~20关解析_第28张图片
温馨提示:
在找GIF图片的时候一定要记得找上传之后能够打开的,不然会制作失败。如:
文件上传漏洞-uploadlabs靶场11~20关解析_第29张图片

条件竞争-Pass-17

查看源码:
文件上传漏洞-uploadlabs靶场11~20关解析_第30张图片
我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。
这个地方需要对并发有一定了解才行。
总体操作是,直接上传一个php文件,利用burp抓包,然后跑一个Null payloads
文件上传漏洞-uploadlabs靶场11~20关解析_第31张图片
文件上传漏洞-uploadlabs靶场11~20关解析_第32张图片
文件上传漏洞-uploadlabs靶场11~20关解析_第33张图片
文件上传漏洞-uploadlabs靶场11~20关解析_第34张图片
然后发包,用另一个浏览器一直访问shell.php地址,只要在上传的一瞬间,他还没来的及删除、修改就可以了。
文件上传漏洞-uploadlabs靶场11~20关解析_第35张图片

白名单-图片码-Pass-18

这一关先要改一下源码,路径有问题,修改myupload.php中的如下代码:
文件上传漏洞-uploadlabs靶场11~20关解析_第36张图片
这关是检查了后缀名,然后上传,然后在进行名字修改。这时我们只能上传图片马:
image.png
文件上传漏洞-uploadlabs靶场11~20关解析_第37张图片
直接上传之前做好的图片码即可:
文件上传漏洞-uploadlabs靶场11~20关解析_第38张图片

黑名单-/.-Pass-19

查看源码:
文件上传漏洞-uploadlabs靶场11~20关解析_第39张图片
发现保存的名字参数可控
move_uploaded_file()有这么一个特性,会忽略掉文件末尾的 /.
所以直接上传php文件,然后抓包,添加/. 然后绕过黑名单。
文件上传漏洞-uploadlabs靶场11~20关解析_第40张图片
文件上传漏洞-uploadlabs靶场11~20关解析_第41张图片
文件上传漏洞-uploadlabs靶场11~20关解析_第42张图片
文件上传漏洞-uploadlabs靶场11~20关解析_第43张图片

数组绕过-/.-Pass-20

查看源码:
文件上传漏洞-uploadlabs靶场11~20关解析_第44张图片
mime类型可以抓包修改
文件名可以抓包修改
这个时候直接上传一个php 文件如何?再结合move_uploaded_file() 会忽略/.
来我们精心构造一下:
文件上传漏洞-uploadlabs靶场11~20关解析_第45张图片
文件上传漏洞-uploadlabs靶场11~20关解析_第46张图片
文件上传漏洞-uploadlabs靶场11~20关解析_第47张图片
还有一种做法,就是直接图片码,但是应该不是这关的本意。

你可能感兴趣的:(网络安全,web安全,安全)