网络对抗原理实验三
实验环境
- Ubuntu 16.04
- 服务器接口 Apache 2.0
- php版本 7.0.30
实验背景知识介绍
实验操作
安装并配置 ModSecurity 模块,搭建WAF
- 安装ModSecurity
1 | sudo apt install libapache2-mod-security2 |
上面命令会安装ModSecurity模块并自动激活。
- ModSecurity安装完成之后还需要创建一个配置文件,可以直接使用默认的配置文件做为蓝本:
1 | sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf |
- 重启apache2
1 | sudo service apache2 restart |
配置ModSecurity
- 修改并且启用ModSecurity默认配置
1 | sudo vim /etc/modsecurity/modsecurity.conf |
添加CRS(OWASP Core Rule Set), 这是一个提供额外保护的规则集合。
开启CRS规则
1 | cd /usr/share/modsecurity-crs/ |
- 编辑
1 | sudo vim /etc/apache2/mods-enabled/security2.conf |
- 引入规则文件,activated_rules目录用来存放激活的规则
1 | IncludeOptional /usr/share/modsecurity-crs/*.conf |
查看activated_rules目录的README文件获得更多信息。
添加SQL注入保护
1 | sudo ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_41_sql_injection_attacks.conf /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf |
- 开启规则引擎
1 | sudo vim /etc/modsecurity/modsecurity.conf |
将 SecRuleEngine DetectionOnly
改为 SecRuleEngine On
- 重启apache
1 | sudo service apache2 restart |
- 实践演示
当我们再次访问实验一中1.html进行万能密码注入时
我们可以看到CRS规则起效果了,它防御住了SQL注入攻击
对特定扫描器w3af的 User-Agent 进行检测和报警,并在单个 IP 访问 数量超过一定门限后对来源 IP 进行封禁。
下载w3af
首先,我是用的是apt安装,但是下载完之后在安装包的依赖关系上会存在一些问题,所以我使用源代码安装。
安装步骤
- 下载
1 | git clone https://github.com/andresriancho/w3af.git |
- 然后出现了如下的问题
- 运行
1 | ./w3af_gui |
按照提示安装好了后,就可以运行gui了。
- 对目标进行扫描
扫描结果显示如下 ,所以可以进行sqlmap爆库
- 现在我们编写过滤规则
这里,我把阈值设置成10,设置时间区间为60秒,即在该段时间内最多发起请求10次。
然后重启
1 | sudo systemctl apache2 restart |
成功!
- 另外,我还用了mod_limitipconn模块,这个模块是直接写在apache2.conf中比较麻烦,所以这里就用modsecurity