Watchbird是一个专门为AWD而生的PHP防火墙,采用纯PHP+JS+CSS编写而成,单文件设计模式,无任何外部依赖,其特点有将原始请求包拼凑出来而实现的内网转发,基于putenv和ld_preload的命令执行保护,一个漂亮的前端以及流量重放功能.
工具安装
广大研究人员可以使用下列命令直接将项目源码克隆至本地
git clone https://github.com/leohearts/awd-watchbird.git
工具部署
1.进入下载好的文件夹目录
2.编译waf.c生成.so文件,参考命令:gcc waf.c -shared -fPIC -o waf.so
3.将waf.so,watchbird.php文件存放在/var/www/html或其他目录中
4.访问任意启用了waf的文件, 参数?watchbird=ui打开watchbird控制台, 创建一个初始密码并进行相关配置
5.将以下代码放入需要启用waf的php脚本的第一行 <?php include_once “/var/www/html/watchbird.php” ?>6.enjoy it!
功能介绍
易于配置(单文件, 无需加载外部js/css)
可以随时开启/关闭某项防御
基本防御:
数据库注入(sql injection)
文件上传(upload)
文件包含(lfi)
flag关键字
PHP反序列化(unserialize)
命令执行(rce)
分布式拒绝服务攻击(ddos)
请求头,请求参数(GET/POST)关键字
特殊字符
深度防御:
响应检测/反向代理(默认将流量发送至本地服务器自检,可配置代理服务器IP及端口实现反代功能)
响应flag检测并返回虚假flag
基于open_basedir的PHP文件操作保护
基于LD_PRELOAD的指令执行保护
网页控制台:
功能开关及配置
实时日志查看
日志流量重放, 可广播流量至指定网段
RCE/文件上传/深度检测 防御通知(由于chrome无法允许不安全的网站(无SSL证书)显示通知,请使用Firefox并修改about:config中dom.webnotifications.allowinsecure为true)
工具起源
一开始做这个工具是因为即将参加awd的线下赛而又没有好用的waf,网上的waf无法满足自己的需求于是就开始着写自己的waf,一开始的构想很简单,我从网上找到了一份awd的简单waf(所以你可能会在源码的某处发现似曾熟悉的代码),然后实现了GET/POST/请求头关键字检测,文件上传检测的功能(留了个trick,上传php等恶意文件会提示上传成功),后面又加入了防ddos的功能(原理很简陋,就是记录每秒某个IP的访问次数,超过某个次数就直接die)
到后来leohearts看到了我的waf并且开始参与这个waf的编写工作,我们构想通过纯PHP的代码将原始请求包重新拼凑起来,最后将这个请求包发给自身完成自检或发送到其他靶机实现内网转发的功能,这个功能一旦实现,无疑会非常强大,我们经历了很多问题,比如BOM头,分块运输,如何获取原始的multipart/form-data等等,幸好我们最终成功实现了这个功能,也是本waf最亮眼的功能–内网转发.
过了一段时间后,leohearts的一个提议让我们重新回到waf的编写工作:基于putenv和ld_preload的命令执行保护.经由他手这个waf又实现了一个漂亮的前端方便使用人员对waf的控制,我们的灵感不断迸发,又相继实现了基于open_basedir的文件操作保护(防止使用php读取/flag),与命令执行保护构成了内外的双重防护,最后我们实现了流量重放与批量提交flag的功能.
工具预览



工具缺点
正如你所见,这个waf虽然对外很强大,但并非没有缺点,它自身仍然存在许多问题,例如open_basedir,ld_preload可以被绕过,灵活多变的PHP可以绕过关键字检测,还有由于自检可能带来的安全问题,而waf本身的安全问题由于在awd中只有ctf和www-data权限的情况下很难对waf的功能与自身安全进行增强,所以我们本着学习与交流的态度开源了本waf

北京市 1F
前端看着还行,不知道实际用起来卡不卡。
北京市 B1
@ Ace凌云 Firefox还要改配置,真麻烦,Chrome就不能兼容下?
山东省济南市 2F
内网转发这功能在AWD里应该挺有用的吧?
韩国 3F
基于LD_PRELOAD的保护现在还能用吗?听说有绕过方法。
河北省衡水市 4F
有没有人实际测试过防rce的效果?
中国 B1
@ 香蕉皮先生 实测一次,配合ld_preload基本挡住了命令执行。
上海市 5F
部署步骤看着简单,就怕实际配起来一堆坑。
上海市松江区 6F
开源了可以研究下,之前找的waf都不太顺手。
澳大利亚 7F
流量重放功能是干啥用的?没太看明白。
菲律宾 8F
这界面比之前用的那个黑乎乎的强多了。
辽宁省沈阳市 9F
响应检测返回假flag这个有点骚啊hhh
浙江省 B1
@ Quasar Dreamer 这内网转发搞不好变后门吧?细思极恐😨
湖北省黄冈市 10F
防rce那个putenv,现在PHP8还能生效不?
上海市普陀区 B1
@ 行者夜行 我在8.1上跑过,putenv还能拦住RCE。
福建省厦门市 11F
之前搞过类似的东西,open_basedir绕过太容易了,真能防住?
浙江省杭州市 12F
那个流量重放是不是能批量打其他队?有点意思
北京市 13F
部署是简单,但权限配置错了直接GG吧
韩国 14F
前端看着清爽,但功能堆得有点多,怕不稳定
浙江省温州市 15F
这玩意儿在真实环境用怕不是分分钟被干穿
北京市 16F
watchbird.php放web目录下,不会被删吗?
内蒙古乌兰察布市 17F
单文件部署确实方便,省得折腾依赖
北京市 18F
这前端比之前用的好看太多了
日本 19F
open_basedir绕过方法太多了,真能防住?
江苏省无锡市 20F
流量重放具体怎么操作?没太看懂
上海市金山区 21F
LD_PRELOAD现在还能用吗?听说有漏洞
福建省福州市 22F
这个单文件设计有点意思,部署挺方便。
山东省 B1
@ Quiet Tempest 单文件是方便,可更新咋办,直接覆盖?
日本 23F
之前配waf把服务器搞崩过,有点阴影
北京市 24F
响应假flag这招够损的哈哈哈
辽宁省 25F
命令执行防护测试过吗?效果咋样
河南省洛阳市 26F
界面挺清爽,不知道性能怎么样
日本 27F
AWD比赛用这个应该还行吧?
山东省淄博市 B1
@ 熊猫饭 比赛里用它倒是省事,配置简单但别忘了检查权限。👍
山东省济南市 28F
开源精神值得赞一个~
陕西省西安市 29F
纯PHP写的确实方便部署,不用配环境。
河北省邯郸市 30F
那个响应检测返回假flag的设计太搞了,对面会不会气炸😂
上海市金山区 31F
内网转发功能在AWD里好像真能用上,之前吃过亏。
江西省赣州市 32F
防命令执行那个点子挺有意思的。
日本 33F
看部署步骤里要编译so文件,对新手会不会有点麻烦?
台湾省 34F
这玩意开源了能自己改吗?想加点自定义规则。
广东省中山市 35F
前端界面做得蛮好看的,操作起来方便吗?
宁夏银川市 B1
@ SenchaSerene 挺方便的,前端花了不少心思优化体验
北京市 36F
前端界面看着挺清爽,不知道操作起来流不流畅。
云南省昆明市 37F
直接放web目录里,万一被删了就全凉了。