AWD神器—watchbird背景rce挖掘
简介在传统的AWD攻防中,Waf饰演偏紧张的脚色,Watchbird作为一款专门为AWD而生的PHP防火墙,具有部署简单,功能强大等特点,一出世便受到了广大CTFer的喜爱,现在在GitHub上已有600多star。本篇则详细介绍如果拿到watchbird背景,怎么利用watchbird背景进行rce。
项目部署
版本:除了最新版(两周前发布的新版本中此漏洞已修复)
具体部署细节可参考官方文档
Watchbird项目地点:https://github.com/leohearts/awd-watchbird
漏洞挖掘
获取背景账户暗码
利用过watchbird的师傅应该都有所了解,watchbird的操作都是有鉴权的
https://i-blog.csdnimg.cn/direct/54082357bf124710b7a51ee912037b36.png
没有拿到用户的cookie或者暗码,就谈不上背景rce了
这里只能通过爆破获取暗码
大概很多人有疑问,watchbird不是有防DDOS,爆破不直接给封了吗?
https://i-blog.csdnimg.cn/direct/3013a0c17bf94225b20a0a84e2b4440d.png
就像上面如许,短时间频仍访问会直接返回一个watchbird的logo,不会正常返回网站内容
watchbird确实是有这个功能,如果爆破目标网站就会被封,但是爆破watchbird暗码就不会,因为,只是单纯验证watchbird暗码的话,代码根本就走不到防DDOS这一步。所以,师傅们放心爆破吧,从角逐开始不停爆破到角逐结束都没题目!
https://i-blog.csdnimg.cn/direct/8eab31184e304914aae0077c150fa983.png
上面的示例中可以看到,当暗码为123456时,返回长度不一样,说明爆破成功了
固然,还有一种方法就是打xss钓鱼,这里就不过多阐述具体细节了,我们直接入正题
修改设置的方法
进入背景后是如许的页面
https://i-blog.csdnimg.cn/direct/d90a2fd4bff84f0297443448b1d00257.png
watchbird算是一个rasp(应用运行时自我保护)的waf,php步伐是如许的。
也就是说,每次访问网站的时候,代码都是重新到尾重新运行一次,watchbird又没用到数据库,它是怎么存储用户信息和设置的呢?
开辟常用方法,就是用序列化来生存用户设置
代码开头就定义了设置文件的路径
$config_path='/tmp/watchbird/watchbird.conf'
https://i-blog.csdnimg.cn/direct/bcc22a16d9544fc995660eb997f44095.png
https://i-blog.csdnimg.cn/direct/80b83cdfce7f46d2827ecbdec8b1dad6.png
打开看一下,都是类序列化后的内容,这个类就是下面要讲的
https://i-blog.csdnimg.cn/direct/e0b2599eedda42978dedf1776d6f5ef0.png
watchbird定义了一个configmanager类用来实现有关设置的一切功能,临时叫它设置类
https://i-blog.csdnimg.cn/direct/c69d11af6c754c64be540c41296e0493.png
https://i-blog.csdnimg.cn/direct/8af4ef7917654d708b095b37f9ac4d04.png
这个类的成员对应waf全部功能的开关状态,文件路径,过滤规则等等
同样这个类还有一个方法
https://i-blog.csdnimg.cn/direct/af4ab40c62a244b688c0d7598d989c9d.png
change方法担当一个 k e y 和一个 key和一个 key和一个val
接着把当前设置类的 k e y 赋值为 key赋值为 key赋值为val
最后用file_put_contents函数将当前设置类进行序列化后写入到设置文件watchbird.conf中,由此实现用户设置更新
但题目就在这里,他没有对这个 k e y 和 key和 key和val进行校验
所以 k e y 和 key和 key和val可以任意写入到设置文件中,我们可以更改原有设置,也可以新添设置
而且,调用这个change方法也很简单
https://i-blog.csdnimg.cn/direct/4764affc30884829844eaa658f37a1c8.png
只需要验证用户身份,就可以直接调用。
修改暗码(示例)
举个简单的例子,watchbird没有提供修改暗码这一功能,总有人问暗码忘了怎么修改,下面就演示一下
生存用户暗码的是设置类中的$password_sha1属性
https://i-blog.csdnimg.cn/direct/10ec5f0fbcb442078695a60abee36515.png
它的初始值是unset
当用户第一次登录时
https://i-blog.csdnimg.cn/direct/6167acbc987848628e1fe26a29a7c97c.png
它会先将前端ui输出出来,然后将设置类的password_sha1赋值给ui类的passwdhash,接着调用了ui的show方法
https://i-blog.csdnimg.cn/direct/8bde61807ba0443580616c7acaabdf12.png
在show方法中,他会判断这个passwdhash的值是不是unset,如果是的话,就会调用设置类的change方法初始化暗码。
因此,只需要传参
?watchbird=change&key=password_sha1&value=unset
https://i-blog.csdnimg.cn/direct/bb99bb4694d24540955eefb2a7937266.png
password_sha1就被更改为unset了
删掉cookie后刷新一下
https://i-blog.csdnimg.cn/direct/71e0bb69b9f9491586d3cd97146b6182.png
就再次回到了初始化界面。
固然也可以到watchbird.conf中直接去改序列化后的数据
https://i-blog.csdnimg.cn/direct/6bb33d743cfd4620bc783d0e439dde15.png
如许就实现了用户暗码修改
修改设置文件路径
但仅仅如许任意修改设置文件还不足以拿到shell
重点在文件最初运行时的操作
https://i-blog.csdnimg.cn/direct/2922a5e41f614bacb6cc950d2f10ecfd.png
当步伐运行时
起首会查抄设置文件路径是否存在,不存在则创建(这对应初次访问的情况)
接着会查抄设置文件是否存在,不存在则将设置类序列化后写入设置文件中(同上)
然后反序列化读取设置,赋值给config变量
重点就在下面的foreach
这个foreach获取了config中的全部属性,并变成key=>val的形式
用了两个$,将config中的属性放到了全局中
前面说了,设置我们是可以随意更改的
如果我们在之前的操作中新增了一个config_path属性并写入到设置文件中
那么当代码走到这里的时候,从设置文件中读取的config_path会被写入到全局中
如许就覆盖了watchbird开头定义的congfig_path的值
https://i-blog.csdnimg.cn/direct/db07e599844c4c1095c53f8e55c577d1.png
如许一来,设置文件的路径和文件格式就被改变了
如果我们将他改为/var/www/html/shell.php
那么接下来用户的操作中,如果需要更改设置,用户的设置信息会被写入到/var/www/html/shell.php中
https://i-blog.csdnimg.cn/direct/37c907cc79a147c6a45bc25db9f64c0c.png
而根据代码流程很容易看到,接下来就可以直接调用change方法来实现设置文件重新写入
我们来实现一下
https://i-blog.csdnimg.cn/direct/fa9eb4d0695c42dd9cfe10f82915afbc.png
最初网站根目次下是没有其他文件的
https://i-blog.csdnimg.cn/direct/0a15388e70d1447e8204d0f18a408ed6.png
接着我们调用change方法添加一个config_path设置,并将他的值设为网站的根目次
这里要执行两次
第一次,是将config_path写入到/tmp/watchbird/watchbird.conf中
第二次,就会读取设置,覆盖config_path变量,将设置写入到shell.php中了
https://i-blog.csdnimg.cn/direct/67f6861b7e6743cd8ec3dfc74f405faf.png
检察根目次,果然他出现了
访问shell.php
https://i-blog.csdnimg.cn/direct/f2767d76def64f6e92e239782f7190b1.png
没题目,很nice
写入木马
因为设置我们可以随便写入,我们直接将设置名写为php步伐
https://i-blog.csdnimg.cn/direct/dc81e31c7c684ad4aeca870c546c5aef.png
像如许,我写入了一个php步伐用于输出当前目次下的文件
检察一下shell.php文件
https://i-blog.csdnimg.cn/direct/ed15cb8a7d764c12b59a241ad17ba721.png
写入成功
访问shell.php
https://i-blog.csdnimg.cn/direct/206c99bad9c445848c0d9f6ce2657e6e.png
执行成功
到这一步ctfer都已经轻车熟路了,后面的环节就不再多说了,恣意写马吧!
总结
闲来无事,偶然翻阅源码发现的小tips,因为省事本身用本机windows的phpstudy搭的,真实awd角逐一般都是linux情况,所以以上仅供参考!欢迎师傅们多多交换!
本日只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
网络安全学习资源分享:
给各人分享我本身学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有资助!
零底子入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习发展路线图。可以说是最科学最系统的学习路线,各人跟着这个大的方向学习准没题目。
【点击免费领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》
1.学习路线图
https://img-blog.csdnimg.cn/direct/5bfb1d19a9094883a6b7b8fda185f4c0.png#pic_center
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有题目。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我本身录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频解说。【点击领取视频教程】
https://img-blog.csdnimg.cn/61d8ca81402a4ab3988fa9f3708af459.png#pic_center
技术文档也是我本身整理的,包罗我参加大型网安举措、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】
https://img-blog.csdnimg.cn/c7b4f8009a644990b17b4ab5be3453d4.png#pic_center
(都打包成一块的了,不能逐一睁开,统共300多集)
3.技术文档和电子书
技术文档也是我本身整理的,包罗我参加大型网安举措、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】
https://img-blog.csdnimg.cn/direct/07f07931a60e4d859ec8bc19a117ba0b.png#pic_center
4.工具包、口试题和源码
“工欲善其事必先利其器”我为各人总结出了最受欢迎的几十款款黑客工具。涉及范围紧张集中在 信息网络、Android黑客工具、自动化工具、网络钓鱼等,感爱好的同学不容错过。
https://img-blog.csdnimg.cn/f5a170b6e07e4f4da1c6ec7637a935ac.png#pic_center
最后就是我这几年整理的网安方面的口试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是各人在口试深信服、奇安信、腾讯或者其它大厂口试时经常遇到的,如果各人有好的题目或者好的见解欢迎分享。
参考剖析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表现更加易懂。
内容概要:包罗 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
https://img-blog.csdnimg.cn/3829e14b96e04fb78e9795ce86d42b77.png
页:
[1]