第十二关(get%00截断)
打开第十二关,查看源代码发现进行了白名单过滤,只允许上传jpg、png、gif的图片格式,
move_uploaded_file
本函数检查并确保由 file 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 newloc 指定的文件。
该函数遇到%00会被截断,从而可以实现对php文件的上
那么我们就先上传一个php文件,配合burpsuite抓包,上传之后如图下所示
我们的目的主要是想上传一个php文件,然后对php文件进行绕过(若上传一个png的图片,那就直接获得webshell了
可以看到,该php文件不允许上传,但是我们可以从save_path(保存的文件路径)中得到提示,我们需要在upload/添加webshell11.php%00,将filename的后缀进行修改,改成webshell11.png,如下图
我们先在浏览器上看看能否访问成功,如果成功再使用蚁剑进行连接后台,糟糕,发现不能访问成功,发现上述又出现了警告的提示,暂时还未找到原因,找到的时候再告诉大家巴。
第十三关(post%00截断)
进入第十三关,查看源代码发现跟12关相比,只是提交方式发生了改变,继续上传一个php文件,使用burpsuite抓包得到如下图
还是跟第1关一样的做法,只是位置发生了改变,继续在save_path上加入webshell12.php%00,在filename上修改后缀为png,将content-type修改成image/png,如下图
这里要注意一下,post使用%00是需要经过url解码之后的,原因是post不会自动解码,而get方式会自动解码
但是发现还是上传失败,思路,方法就在这里啦
重新下载了一个新的upload-load,里面配合着文件包含的漏洞进行
第十四关(图片马+文件包含漏洞)
进入第十四关,发现提示,说需要上传一个图片马
使用notepadd在一张图片编辑木马格式(此图片可以先找一张正常的图片,因为正常的图片文件头会显示,这样就能避开文件头的影响)
上传之后复制图片地址路径,进入浏览器访问,访问时我们可以用文件包含漏洞继续访问,该文件存在include.php文件,里面存在file参数,我们进行传参可以得到下图
使用蚁剑进行连接,这样就表示上传成功啦!
第十五关(图片马getimagesize()+文件包含)
进入第十五关,发现提示使用getimagesize()检查是否为图片文件,我们依旧使用图片马的格式进行上传,上传之后,先访问浏览器看是否访问成功,若成功,就可以使用蚁剑进行连接
发现上图,访问成功,使用蚁剑进行连接
第十六关(exif_imagetype()函数绕过)
进入第十六关,查看源代码,发现了一个函数exif_imagetype()
exif_imagetype() 读取一个图像的第一个字节并检查其签名。
发现需要开启php_exif模块,打开phpstudy--->点击其他选项菜单--->打开配置文件--->php.ini--->擦查找exif文件,将前面的;去掉保存即可
上传一个图片马,利用文件包含漏洞得到访问地址,再利用蚁剑进行连接,
不知道为什么我上传的图片的时候页面显示黑色了,操作都跟前两题差不多
第十七关(二次渲染绕过)
进入第十七关,查看源代码,发现此关对上传图片进行了文件后缀的判断以及文件类型判断
(($fileext == "jpg") && ($filetype=="image/jpeg"))
还有imagecreatfromjpeg函数对图片的判断
$im = imagecreatefromjpeg($target_path)
对于二次渲染:二次渲染指的是网站接受用户上传的文件后会再进行对文件的二次操作
二次渲染最好用的是gif格式的图片,方便绕过
那我们就先上传一个gif格式的图片 ,再利用文件包含漏洞配合获取webshell权限
127.0.0.1/upload-labs/include.php?file=upload/xxx.gif
这里我上传的时候跟第十六关一样,也是上传的时候黑屏了,我就不演示给大家看了,重要的还是思路
第十八关(条件竞争)
进入第十八关,查看提示说要代码审计,查看源代码,解释一下
首先创建$ext_arr数组,用于存储允许的文件扩展名(jpg、png、gif)
使用move_uploaded_file()函数将文件从临时目录移动到目标目录。
如果文件成功移动,则检查文件扩展名是否在允许的数组中。如果是,则使用随机数和当前日期时间重命名文件,并将𝑖𝑠𝑢𝑝𝑙𝑜𝑎𝑑设置为𝑡𝑟𝑢𝑒。如果不是,则设置isupload设置为true。如果不是,则设置msg以指示只允许特定文件类型,并删除已上传的文件。
基于上面,我们明显可以知道这是条件竞争的使用情况:网站会对用户上传的文件进行上传后再进行验证(上传过程中不验证),这样文件会暂时保存到服务器,可以趁程序未对文件进行操作(改名,删除),访问文件进行占用 -------------------但是这属于概率事件
我们先上传一个php文件,配合burpsuite抓包,然后我们需要使用条件竞争,就把文件发到Intruder模块,使用爆破的方式进行竞争使用,在上传的文件那里添加爆破点
这里是设置payload参数,大家可以把数值设置大一点,其他默认就好啦
这里就显示上传成功啦!
进入蚁剑进行连接,发现连接成功
对于条件竞争,其他博主可能配合Python脚本进行竞争,但是我用burpsuite抓包就可以用了,如果大家不行的话,就配合python脚本一起试试吧! Upload-labs 1-21关 靶场通关攻略(全网最全最完整)_upload靶场-CSDN博客
上面的博主写的很详细,大家如果不懂的话可以看看这位博主的。
第十九关(条件竞争)
进入第十九关,查看提示发现还是需要代码审计,查看源代码,发现此代码对文件后缀、文件类型以及进行白名单的过滤,所以大家只能上传图片马
先上传一个图片马,配合burpsuite抓包,添加爆破点
设置payload参数
设置完后点击开始攻击,这里貌似攻击不出,配合python脚本一起(这里的xxx.xxx是自己设置的ip地址,图片马也是自己设置的)-------这里的python脚本配合了文件包含漏洞一起使用
import requests
url = "http://xxx.xxx.xxx.xx/upload-labs/include.php?file=upload/pass19.png"
while True:
html = requests.get(url)
if ( 'Warning' not in str(html.text)):
print('ok')
break
这里放上爆破的过程,暂未爆破成功。
第二十关(过滤特殊函数)
进入第二十关,查看提示,发现
查看源代码后发现此关进行了黑名单的过滤,并发现了函数,
move_uploaded_file()还有这么一个特性,会忽略掉文件末尾的
/.
move_uploaded_file
我们就先上传一个图片马
将upload-19.php-------->>>>>>修改成upload-19.php/.----------->>>>>>过滤 move_uploaded_file()函数
发现成功上传,使用蚁剑进行连接,
这里如果访问不成功的话,我们先创建一个php文件,里面写有一句话木马,然后我们再更改后缀名,这样就能连接啦
第二十一关(数组绕过)
进入二十一关,查看源代码,发现此关以数组形式检查MIME文件类型和拓展名,但没有检查文件内容是否真的是一个图像文件,使用$_POST['save_name']
来重命名上传的文件,它允许用户输入任何文件名,我们就可以借此来进行绕过。我们还需要注意下面的点1.判断数组最后一个元素是否合法2.(数组第一位和$file[count($file) - 1]进行拼接,产生保存文件名file_name)
针对第一点:我们可以在数组最后一个元素上添加合法文件名后缀(jpg|png|gif)
针对第二点:我们可以对数组第二个元素设置成空,即不用设置,我们就可以进行数组拼接,从而进行绕过
$file_name = reset($file) . '.' . $file[count($file) - 1];
首先,我们先上传个php文件,配合burpsuite抓包,
我们只需要修改两个地方即可
Content-Type:image/png
以及使用POST方式保存的文件路径,我们使用数组绕过的方式。修改POST参数为数组类型,索引[0]为`upload-20.php`,索引[2]为`jpg|png|gif`。 只要第二个索引`不为1`,$file[count($file) - 1]就等价于$file[2-1],值为空
修改之后,点击发送即可
可以发现,文件上传成功,先在浏览器上进行访问,发现可以访问
使用蚁剑,进行连接,发现连接成功
OK,upload-labs就做到这里结束啦,可能有一些点没写明白,还请大家见谅,以及还有一些地方没有完成,等我有空闲的时间再进行修改啦!
在upload-labs中,我们主要学习了一些知识点,如黑名单过滤,白名单,前端,以及一些其他的过滤,我们需要了解其用法,便于我们在实战中能够做出来。我们还学习了一些函数,了解函数的特性,如果碰到不懂得就上网查,碰见多了就能知道他们的用法,也能知道是如何绕过的了。