简介
在传统的AWD攻防中,Waf扮演着重要的角色,Watchbird作为一款专门为AWD而生的PHP防火墙,具有部署简单,功能强大等特点,一出世便受到了广大CTFer的喜爱,目前在GitHub上已有600多star。本篇则详细介绍如果拿到watchbird后台,怎么利用watchbird后台进行rce。
项目部署
版本:除了最新版(两周前发布的新版本中此漏洞已修复)
具体部署细节可参考官方文档
Watchbird项目地址:https://github.com/leohearts/awd-watchbird
漏洞挖掘
获取后台账户密码
使用过watchbird的师傅应该都有所了解,watchbird的操作都是有鉴权的
没有拿到用户的cookie或者密码,就谈不上后台rce了
这里只能通过爆破获取密码
可能很多人有疑问,watchbird不是有防DDOS,爆破不直接给封了吗?
就像上面这样,短时间频繁访问会直接返回一个watchbird的logo,不会正常返回网站内容
watchbird确实是有这个功能,如果爆破目标网站就会被封,但是爆破watchbird密码就不会,因为,只是单纯验证watchbird密码的话,代码根本就走不到防DDOS这一步。所以,师傅们放心爆破吧,从比赛开始一直爆破到比赛结束都没问题!
上面的示例中可以看到,当密码为123456时,返回长度不一样,说明爆破成功了
当然,还有一种方法就是打xss钓鱼,这里就不过多阐述具体细节了,我们直接入正题
修改配置的方法
进入后台后是这样的页面
watchbird算是一个rasp(应用运行时自我保护)的waf,php程序是这样的。
也就是说,每次访问网站的时候,代码都是从头到尾重新运行一次,watchbird又没用到数据库,它是怎么存储用户信息和配置的呢?
开发常用方法,就是用序列化来保存用户配置
代码开头就定义了配置文件的路径
$config_path='/tmp/watchbird/watchbird.conf'
打开看一下,都是类序列化后的内容,这个类就是下面要讲的
watchbird定义了一个configmanager类用来实现有关配置的一切功能,暂且叫它配置类
这个类的成员对应waf所有功能的开关状态,文件路径,过滤规则等等
同样这个类还有一个方法
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方法也很简单
只需要验证用户身份,就可以直接调用。
修改密码(示例)
举个简单的例子,watchbird没有提供修改密码这一功能,总有人问密码忘了怎么修改,下面就演示一下
保存用户密码的是配置类中的$password_sha1属性
它的初始值是unset
当用户第一次登录时
它会先将前端ui输出出来,然后将配置类的password_sha1赋值给ui类的passwdhash,接着调用了ui的show方法
在show方法中,他会判断这个passwdhash的值是不是unset,如果是的话,就会调用配置类的change方法初始化密码。
因此,只需要传参
?watchbird=change&key=password_sha1&value=unset
password_sha1就被更改为unset了
删掉cookie后刷新一下
就再次回到了初始化界面。
当然也可以到watchbird.conf中直接去改序列化后的数据
这样就实现了用户密码修改
修改配置文件路径
但仅仅这样任意修改配置文件还不足以拿到shell
重点在文件最初运行时的操作
当程序运行时
首先会检查配置文件路径是否存在,不存在则创建(这对应首次访问的情况)
接着会检查配置文件是否存在,不存在则将配置类序列化后写入配置文件中(同上)
然后反序列化读取配置,赋值给config变量
重点就在下面的foreach
这个foreach获取了config中的所有属性,并变成key=>val的形式
用了两个$,将config中的属性放到了全局中
前面说了,配置我们是可以随意更改的
如果我们在之前的操作中新增了一个config_path属性并写入到配置文件中
那么当代码走到这里的时候,从配置文件中读取的config_path会被写入到全局中
这样就覆盖了watchbird开头定义的congfig_path的值
这样一来,配置文件的路径和文件格式就被改变了
如果我们将他改为/var/www/html/shell.php
那么接下来用户的操作中,如果需要更改配置,用户的配置信息会被写入到/var/www/html/shell.php中
而根据代码流程很容易看到,接下来就可以直接调用change方法来实现配置文件重新写入
我们来实现一下
最初网站根目录下是没有其他文件的
接着我们调用change方法添加一个config_path配置,并将他的值设为网站的根目录
这里要执行两次
第一次,是将config_path写入到/tmp/watchbird/watchbird.conf中
第二次,就会读取配置,覆盖config_path变量,将配置写入到shell.php中了
查看根目录,果然他出现了
访问shell.php
没问题,很nice
写入木马
因为配置我们可以随便写入,我们直接将配置名写为php程序
像这样,我写入了一个php程序用于输出当前目录下的文件
查看一下shell.php文件
写入成功
访问shell.php
执行成功
到这一步ctfer都已经轻车熟路了,后面的环节就不再多说了,尽情写马吧!
总结
闲来无事,偶然翻阅源码发现的小tips,因为省事自己用本机windows的phpstudy搭的,真实awd比赛一般都是linux环境,所以以上仅供参考!欢迎师傅们多多交流!
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
网络安全学习资源分享:
给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
【点击免费领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】
(都打包成一块的了,不能一一展开,总共300多集)
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
👋全套《黑客&网络安全入门&进阶学习资源包》👇👇👇
这份完整版的学习资料已经上传CSDN,也可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】