WatchBird: 新一代纯PHP防火墙

WatchBird: 新一代纯PHP防火墙

工具安装
广大研究人员可以使用下列命令直接将项目源码克隆至本地

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

项目地址
Github传送门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/735944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数(long long 也存不下)求余数

现在有一个数n为&#xff1a;12345678901234567890123456789012345678901234567890&#xff0c;要你求 n / 2023 和 n % 2023 的数值 模拟长除法 平时我们在进行除法时&#xff0c;用的是长除法&#xff0c;我们可以用代码来模拟这种思路 #include<iostream> #include<…

Beans模块之工厂模块BeanFactory

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

SDK集群模式数据库中,ETCD起什么作用?

在云计算中&#xff0c;数据库使用 ETCD 和 SDK 集群模式可以提高数据库的可用性、可扩展性和灵活性。具体来说&#xff0c;可以使用 ETCD 来存储和管理数据库的配置信息、状态信息、元数据等&#xff0c;然后使用 SDK 集群模式来开发和部署数据库应用程序。 在使用 ETCD 和 SD…

Linux 之九:CentOS 上 Tomcat 安装、SpringBoot 项目打包和部署

安装 Tomcat 下载 a. 方式一&#xff1a;可以在windows 真机上下载后&#xff0c;再上传到服务器 b. 方式二&#xff1a;可以在服务器端使用 wget 下载命令来下载 登录官网https://tomcat.apache.org/download-90.cgi&#xff0c;选择 linux 版本 右键&#xff0c;获取下载链接…

服务器-->网站制作-->接口开发,一篇文章一条龙服务(2)

作者&#xff1a;q: 1416279170v: lyj_txd前述&#xff1a;本人非专业&#xff0c;兴趣爱好自学自研&#xff0c;很多没有说清楚的地方见谅&#xff0c;欢迎一起讨论的小伙伴~ 上期回顾&#xff0c;了解 服务器&#xff0c;网站制作&#xff0c;接口开发之见的关系&#xff0c…

vue中实现3d词云效果(已封装组件)

<!--* Description: 词云组件 页面* Date: 2024/3/10 23:39 --> <template><div:style"{display: flex,justifyContent: center,border: 1px solid red,}"><svg:width"width":height"height"mousemove"listener($even…

flask 支持跨域访问 非常简单的方式 flask_cors

安装 pip install -U flask-cors from flask import Flask from flask_cors import CORSapp Flask(__name__) CORS(app)app.route("/") def helloWorld():return "Hello, cross-origin-world!"参考 https://www.cnblogs.com/anxminise/p/9814326.html …

【HarmonyOS】ArkUI - 自定义卡片样式

ArkUI - 自定义卡片样式 HarmonyOS API 9 没有提供原生的卡片样式&#xff0c;我定义了一个卡片样式&#xff0c;可以方便大家在日常开发中使用。 效果图&#xff1a; 卡片样式代码如下&#xff1a; Styles function card() {.width(95%).padding(20).backgroundColor(Col…

C#,数值计算,用割线法(Secant Method)求方程根的算法与源代码

1 割线法 割线法用于求方程 f(x) 0 的根。它是从根的两个不同估计 x1 和 x2 开始的。这是一个迭代过程&#xff0c;包括对根的线性插值。如果两个中间值之间的差值小于收敛因子&#xff0c;则迭代停止。 亦称弦截法&#xff0c;又称线性插值法.一种迭代法.指用割线近似曲线求…

ubuntu20.04环境搭建:etcd+patroni+pgbouncer+haproxy+keepalived的postgresql集群方案

搭建基于etcdpatronipgbouncerhaproxykeepalived的postgresql集群方案 宿主机操作系统:ubuntu20.04 使用kvm搭建虚拟环境(如没有安装kvm&#xff0c;请先自行安装kvm) 1、安装kvm服务 ①、查看虚拟支持 如果CPU 支持硬件虚拟化则输出结果大于0&#xff0c;安装kvm-ok命令检…

【轮式平衡机器人】——TMS320F28069片内外设之eCAP

引入 TMS320F28069的eCAP&#xff08;增强型捕获模块&#xff09;是一个强大的外设&#xff0c;用于精确测量和捕获输入信号的事件和时间戳。 在电机控制、传感器数据采集和信号处理等应用中&#xff0c;eCAP模块可以用于测量霍尔传感器、编码器或其他数字输入信号的周期、频…

鸿蒙报错:Hhvigor Update the SDKs by going to Tools > SDK Manager....

鸿蒙报错&#xff1a;Hhvigor Update the SDKs by going to Tools > SDK Manager… 打开setting里面的sdk&#xff0c;将API9工程下的全部勾上&#xff0c;应用下载 刚打开 js 和 Native 是没勾上的

小程序API能力集成指南——群组控制和功能页API汇总

群组控制 API ty.device.publishGroupDps 群组控制 需引入DeviceKit&#xff0c;且在>2.3.1版本才可使用 参数 Object object 属性类型默认值必填说明groupIdstring是groupId 群组 iddpsobject是dp 信息 示例: dps: {"1" : true}completefunction否接口调用结…

智慧城市与智慧乡村:共创城乡一体化新局面

一、引言 随着科技的不断进步和城乡发展的日益融合&#xff0c;智慧城市与智慧乡村的建设已成为推动城乡一体化发展的新引擎。智慧城市利用物联网、大数据、云计算等先进技术&#xff0c;实现城市治理、公共服务、产业发展等领域的智能化&#xff1b;而智慧乡村则借助现代科技…

vmware_docker启动

虚拟机centos7安装docker springboot项目调试 1,安装docker, 参考菜鸟教程 Docker 要求 CentOS 系统的内核版本高于 3.10 1,查看系统版本信息 [root@runoob ~]# uname -r 2,移除旧的版本,切换到root用户下操作 sudo yum remove docker \ d…

依赖注入与控制反转:优化Go语言REST API客户端

在这篇文章中&#xff0c;我将探讨依赖注入&#xff08;DI&#xff09;和控制反转&#xff08;IoC&#xff09;是什么&#xff0c;以及它们的重要性。作为示例&#xff0c;我将使用Monibot的REST API客户端。让我们开始吧&#xff1a; 一个简单的客户端实现 我们从一个简单的…

每日五道java面试题之springMVC篇(二)

目录&#xff1a; 第一题. 请描述Spring MVC的工作流程&#xff1f;描述一下 DispatcherServlet 的工作流程&#xff1f;第二题. MVC是什么&#xff1f;MVC设计模式的好处有哪些?第三题. 注解原理是什么?第四题. Spring MVC常用的注解有哪些&#xff1f;第五题. SpingMvc中的…

Python模块百科_操作系统接口_os【三】

Python模块百科_操作系统接口_os【三】 os --- 多种操作系统接口【第一部分】一、相关模块1.1 os.path 文件路径1.2 fileinput 文件读取1.3 tempfile 临时文件和目录1.4 shutil 高级文件和目录1.5 platform 操作系统底层模块 二、关于函数适用性的说明2.1 与操作系统相同的接口…

C++ 中的头文件和源文件

#include<>一般用于包含系统头文件&#xff0c;诸如stdlib.h、stdio.h、iostream等&#xff1b; 类库目录下查找失败&#xff0c;编译器会终止查找&#xff0c;直接报错&#xff1a;No such file or directory. #include""一般用于包含自定义头文件&#xff…

【JAVA】CSS3:3D、过渡、动画、布局、伸缩盒

1 3D变换 1.1 3D空间与景深 /* 开启3D空间,父元素必须开启 */transform-style: preserve-3d;/* 设置景深&#xff08;你与z0平面的距离 */perspective:50px; 1.2 透视点位置 透视点位置&#xff1a;观察者位置 /* 100px越大&#xff0c;越感觉自己边向右走并看&#xff0c;…