一次靶场经历wp
第一步:
打开网站映入眼帘的是大大的登录界面
第一个想法是查看页面源代码,想看哈前端有没有什么线索
发现没有什么有用的信息,接下来,查看登录界面,发现有注册按钮,于是便索性注册一个账号
这里账号和密码都写的123456789.
点击注册发现注册成功,回到登录页面进行登录。
发现出题人的提示,告诉了我们应该要的管理员账号是admin,说明就是想办法登录管理员账号。最先看到起有注册功能还有登录。我的第一反应是考的是mysql的截断注入。
于是创建了很多个账号,都是admin(此处省略很多个空格)1这种。但是都失败了,正值悲伤之际才想起了自己还有忘记密码功能,随即点开。
账号选择填入admin,然后点击发送验证码,弹框出现,验证码发送成功。
但是我们什么都没接收到呀!于是想到用bp抓包看看返回来了什么
成功get验证码,拿来修改密码,密码改成喜欢的123456
第二步:
再一次登录,登录成功,看到下一个提示:
开心的把url的id改为2发现
随后又试了几下其他数字,发现除了1和2有正常回显,其余的都会重定向回到当前页面。于是想到换个方式输入2,尝试了?id=4-2,果然就有了新的天地。
这里一看就知道是文件包含漏洞,但是难得是这个框架是在thinkphp(这个框架大佬肯定都很熟悉),这里查询了很多资料,才搞懂了thinkphp的路由规则。找到了文件包含的真正包含路径:
http://10.13.1.21/index.php/index/Thisiseasyinclude?1=
然后想到文件包含就一定会想到php伪协议来读取文件,根据题目的提示我们需要尽量想办法包含日志文件,所以这里我们又需要去查找thinkphp5的命名规则和路径。
知道了thinkphp5的日志在runtime/log/202111(今天的年月)/18(今天的日期).log
来命名
于是尝试使用文件包含,首先包含一下当前目录下的index.php文件,输入以下payload:
1 | http://10.13.1.21/index.php/index/Thisiseasyinclude?1=./index.php |
发现成功回显
证明了这里确实是我们想要的文件包含点。于是我们就去找日志文件,这里我特地从网上下载了thinkphp5的源码来看。
于是构建以下payload:
1 | http://10.13.1.21/index.php/index/Thisiseasyinclude?1=php://filter/read=convert.base64-encode/resource=./../runtime/log/202111/18.log |
来读取日志路径。
成功回显。证明我们找对了!
第三步:
第二步的成功接下来就是第三步。现在我们知道了日志文件的地址,也知道了怎么包含日志文件。然后这里又有一个文件包含漏洞。于是我们便想到了日志文件包含拿到webshell。
所以我们首先在以下url中提交php一句话木马:
1 | http://10.13.1.21/index.php/index/Thisiseasyinclude?1= @eval($_POST[123]); |
用报错的方式注入一句话木马。
然后通过antsword连接目标
发现失败!这就是踩坑的地方。
重新访问日志文件,想看一下报了什么错。
发现我们构造的payload被浏览器自动转义了
于是我们用bp抓包的方式修改发送的一句话木马避免转义的发生。
抓包后情况如下:
接下来用antsword再一次连接服务器,成功连接。
总结:
萌新对于这次的总结就是关于thinkphp是严重的不了解,大佬叫我看官方手册开始学这个。(又多了一项艰巨得任务)这个确实是很必要的。然后就是字符串转义的问题,浏览器会自动的转义一些字符,此时需要记得手动得用bp抓包改一下。