Openresty waf

Openresty waf

Openresty waf 是一种基于 Openresty 的 Web 应用防火墙,可以用于防御 SQL 注入、 XSS 跨站脚本、Web 服务器漏洞、木马等常见攻击,保障网站的安全。Openresty waf 可以通过编写 Lua 脚本来定义 WAF 模块和规则,实现灵活的过滤和拦截功能,请根据题目要求完成以下配置。

  1. 为提高WAF的安全性,要求仅允许白名单内的IP当前主机IP访问站点,请将当前主机的IP,添加到WAF的白名单,再通过浏览器访问当前网站(网站地址为部署WAF主机的IP),得到并写出flag。(如++http://192.168.1.1++)

  2. 因业务需要,现需对WAF的白名单进行配置,要求允许访问网站的/permit目录,配置完成后通过浏览器访问网站的/permit目录,得到并写出flag。(如++http://192.168.1.1/permit++)

  3. 运维人员对网站进行备份时不慎将备份文件web.bak备份到网站目录下,为防止攻击者获取网站的备份文件,现要求对WAF的URL规则设置禁止访问bak后缀的文件,配置完成后通过浏览器访问/web.bak文件,得到并写出flag。(如++http://192.168.1.1/web.bak++)

  4. 如果网站存在目录穿越漏洞,那么攻击者就可以利用该漏洞读取服务器上的敏感文件,造成敏感文件泄露,该漏洞的一个特征是攻击者可以通过"../"来进行目录切换,为了防止恶意用户对网站进行文件读取,现要求配置WAF检测URL的参数,当匹配到"../"时进行拦截,配置完成后,再通过浏览器访问当前网站,得到flag并截图。

  5. CC攻击是一种常见的网站攻击方法,其主要目的是消耗目标服务器的资源。为了避免网站受到CC攻击,现需要启用WAF的防CC攻击功能,需重启服务后才生效,重启服务之后,多次刷新网站以模拟CC攻击,得到flag并截图。


1. 设置网络适配器

​1.1 网络适配器 ---> 网络连接自定义 ---> VMret1(仅主机模式)/VMret8(NAT 模式)

{注意检查 VMret1/VMert8 是否开启了}


1.2 设置完之后,打开并登录Liunx,查看IP地址,如图所示


2. Next Termal审计系统(可跳过)

为了方便滑动与复制粘贴,我们可以登录 Next Termal审计系统,如果不想 登录,则可跳过这一步

(web访问Linux操作机的8088 端口,账号密码默认都为admin )++http://IP地址:8088++

登录界面如图所示


2.1 运维安全审计设备上配置授权凭证

名称可自定义 ,账户密码跟登录Liunx 的账号密码一样​配置完如图所示


2.2 运维安全审计设备上配置对Linux服务器的资产管理

资产名称为自定义 ,协议为SSH ,账户类型为上题配置的授权凭证

配置完如图所示


2.3 点击接入

​这样我们就远程登录Liunx 成功了


3. 实验过程

Web Application Firewall

WEB应用防火墙(Web Application Firewall,简称WAF)是部署在Web服务器前端、基于HTTP/HTTPS流量分析的网络安全防护设备,通过规则匹配、行为分析和机器学习技术识别SQL注入、XSS攻击等恶意流量并进行拦截。


3.1 首先我们先搜索Web,找到题目文件的路径,进入并查看

Matlab 复制代码
// 查找系统里所有名称含waf的文件/目录
 
find / -name "*waf"
解释
find /:从**根目录/**开始全盘递归搜索
-name "*waf":匹配文件名/目录名以 waf 结尾
(*是通配符,任意前缀/后缀)
  • /usr/local/openresty/nginx/conf/waf:OpenResty 自带Nginx 配置目录下的Waf文件夹
  • /home/openresty/waf:家目录下的Waf文件夹
  • /home/openresty/waf/waf:上一级Waf 目录里嵌套的子Waf文件夹

根据题目的需求,是进入第一个Waf 的文件夹

Matlab 复制代码
// 进入WAf目录并列出文件
 
cd /usr/local/openresty/nginx/conf/waf
解释
cd = change directory,切换工作目录到上面找到的主 WAF 配置文件夹
 
ll
解释
ll 是 ls -l 的别名,以长格式展示目录内所有文件、权限、属主、大小、修改时间、类型

Lua核心脚本

  • access.lua:Nginx access 阶段执行,WAF 核心检测逻辑(拦截 SQL 注入、XSS、路径遍历等攻击)
  • config.lua:WAF 全局配置开关(是否开启拦截、黑白名单、拦截返回码、日志开关等)
  • init.lua:Nginx 启动初始化脚本,加载规则、初始化全局变量
  • lib.lua:工具函数库,封装正则匹配、IP 处理、日志输出等通用方法

3.2 题目大概需要修改的文件目录如下

所有**.rule**文件:WAF 攻击匹配规则(核心)

这些后缀 .rule 的文件,全部是正则规则库 ,WAF会读取里面的正则表达式,匹配客户端请求,命中就拦截

  • args.rule:匹配 URL GET 参数恶意内容。作用:拦截 GET 请求里的 SQL 注入、XSS、路径穿越、恶意命令
  • blackip.rule:IP 黑名单。里面填写恶意攻击 IP,只要客户端 IP 存在于此文件,直接拦截访问
  • cookie.rule:匹配请求 Cookie 里的恶意代码。拦截藏在 Cookie 中的 XSS、注入语句,防止 Cookie 注入攻击
  • post.rule:匹配 POST 请求提交的表单 / Body 数据。防护 POST 传参的 SQL 注入、上传恶意脚本、命令注入,最常用的注入防护规则文件
  • url.rule:匹配访问的 URL 路径本身。拦截访问敏感后台路径、webshell 地址、漏洞路径
  • useragent.rule:匹配请求头 User-Agent(浏览器 / 爬虫标识)。拦截恶意扫描器、爬虫、恶意工具 UA
  • whiteip.rule:IP 白名单。白名单内的 IP 不受 WAF 任何拦截(内网、管理员办公 IP、第三方可信接口 IP 放这里)
  • whiteurl.rule:URL 白名单。指定路径直接放行,不做任何安全检测(比如支付回调、第三方接口地址)

3.3 题目(以下都是使用Next Termal审计系统做的)

题目1:

  1. 为提高WAF的安全性,要求仅允许白名单内的IP当前主机IP访问站点,请将当前主机的IP,添加到WAF的白名单,再通过浏览器访问当前网站(网站地址为部署WAF主机的IP),得到并写出flag。(如++http://192.168.1.1++)

Fl@G{644abae4e1ab1697c5d7b373e44ae404}


3.1.1 方法一:修改whiteip.rule 文件(题目需求)

进入文件之后,按键盘上的字母 a 来进行编辑修改

配置完记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

然后通过浏览器 去访问IP地址,这样题目答案就出来了


3.1.2 方法二:解码获取(题目不需求的,可选做)

OpenResty 会把这段alert内容 返回给浏览器 ,所以我们复制 这段16进制的代码

进入文件之后,按键盘上的字母 a 来进行编辑修改

也要记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

Matlab 复制代码
// 把纯十六进制文本文件还原成原始二进制数据(十六进制转二进制)
 
xxd -p -r [文件名]
解释
xxd:Linux 自带十六进制工具,两大核心功能:
普通:文件 → 十六进制文本
反向:十六进制文本 → 原始二进制(本命令用的就是反向)
 
-p:plain 纯模式:
只输出连续无空格、无偏移、无注释的纯十六进制字符串
 
-r:reverse 反向转换(关键参数):
不加 -r:二进制文件 → 十六进制文本
加 -r:十六进制文本 → 恢复成原始二进制文件

这样题目答案就出来了


题目2:

  1. 因业务需要,现需对WAF的白名单进行配置,要求允许访问网站的/permit目录,配置完成后通过浏览器访问网站的/permit目录,得到并写出flag。(如++http://192.168.1.1/permit++)

fLAg{7200f7a6f1ac43f8491a33e9b8528424}


3.2.1 方法一:修改whiteurl.rule文件(题目需求)

修改之前记得把题目1的配置内容给删掉,不然会影响题目2的配置

进入文件之后,按键盘上的字母 a 来进行编辑修改

配置完记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

然后通过浏览器去访问IP地址加上/permit,这样题目答案就出来了


3.2.2 方法二:解码获取(题目不需求的,可选做)

OpenResty 会把这段alert内容 返回给浏览器 ,所以我们复制 这段16进制的代码

进入文件之后,按键盘上的字母 a 来进行编辑修改

也要记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

Matlab 复制代码
// 把纯十六进制文本文件还原成原始二进制数据(十六进制转二进制)
 
xxd -p -r [文件名]
解释
xxd:Linux 自带十六进制工具,两大核心功能:
普通:文件 → 十六进制文本
反向:十六进制文本 → 原始二进制(本命令用的就是反向)
 
-p:plain 纯模式:
只输出连续无空格、无偏移、无注释的纯十六进制字符串
 
-r:reverse 反向转换(关键参数):
不加 -r:二进制文件 → 十六进制文本
加 -r:十六进制文本 → 恢复成原始二进制文件

这样题目答案就出来了


题目3:

  1. 运维人员对网站进行备份时不慎将备份文件web.bak备份到网站目录下,为防止攻击者获取网站的备份文件,现要求对WAF的URL规则设置禁止访问bak后缀的文件,配置完成后通过浏览器访问/web.bak文件,得到并写出flag。(如++http://192.168.1.1/web.bak++)

fLag{bed70b3a6b7c562b74076f3c21105da6}


3.3.1 方法一:修改url.rule文件(题目需求)

进入文件之后,按键盘上的字母 a 来进行编辑修改

配置完记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

然后通过浏览器去访问IP地址再加上/web.bak,这样题目答案就出来了


3.3.2 方法二:解码获取(题目不需求的,可选做)

OpenResty 会把这段alert内容 返回给浏览器 ,所以我们复制 这段16进制的代码

进入文件之后,按键盘上的字母 a 来进行编辑修改

也要记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

Matlab 复制代码
// 把纯十六进制文本文件还原成原始二进制数据(十六进制转二进制)
 
xxd -p -r [文件名]
解释
xxd:Linux 自带十六进制工具,两大核心功能:
普通:文件 → 十六进制文本
反向:十六进制文本 → 原始二进制(本命令用的就是反向)
 
-p:plain 纯模式:
只输出连续无空格、无偏移、无注释的纯十六进制字符串
 
-r:reverse 反向转换(关键参数):
不加 -r:二进制文件 → 十六进制文本
加 -r:十六进制文本 → 恢复成原始二进制文件

这样题目答案就出来了


题目4:

  1. 如果网站存在目录穿越漏洞,那么攻击者就可以利用该漏洞读取服务器上的敏感文件,造成敏感文件泄露,该漏洞的一个特征是攻击者可以通过"../"来进行目录切换,为了防止恶意用户对网站进行文件读取,现要求配置WAF检测URL的参数,当匹配到"../"时进行拦截,配置完成后,再通过浏览器访问当前网站,得到flag并截图。

flag{bb2d91d0fbbebe8719509ed0f865c63f}


3.4.1 方法一:修改args.rule文件(题目需求)

进入文件之后,按键盘上的字母 a 来进行编辑修改

配置完记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

然后通过浏览器去访问IP地址加上/?id=../,这样题目答案就出来了


3.4.2 方法二:解码获取(题目不需求的,可选做)

OpenResty 会把这段alert内容 返回给浏览器 ,所以我们复制 这段16进制的代码

进入文件之后,按键盘上的字母 a 来进行编辑修改

也要记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

Matlab 复制代码
// 把纯十六进制文本文件还原成原始二进制数据(十六进制转二进制)
 
xxd -p -r [文件名]
解释
xxd:Linux 自带十六进制工具,两大核心功能:
普通:文件 → 十六进制文本
反向:十六进制文本 → 原始二进制(本命令用的就是反向)
 
-p:plain 纯模式:
只输出连续无空格、无偏移、无注释的纯十六进制字符串
 
-r:reverse 反向转换(关键参数):
不加 -r:二进制文件 → 十六进制文本
加 -r:十六进制文本 → 恢复成原始二进制文件

这样题目答案就出来了


题目5:

  1. CC攻击是一种常见的网站攻击方法,其主要目的是消耗目标服务器的资源。为了避免网站受到CC攻击,现需要启用WAF的防CC攻击功能,需重启服务后才生效,重启服务之后,多次刷新网站以模拟CC攻击,得到flag并截图。

flag{7c60866968bf583396f5f0e2664ed7f3}


3.5.1 方法一:修改config.lue文件(题目需求)

需要修改两个:1)把config_cc_check给打开,默认是关闭的

2)把onfig_cc_check的频率规则给修改,默认是10次数60秒内

进入文件之后,按键盘上的字母 a 来进行编辑修改

修改之后记得保存,并重启

点击 Esc ---> 冒号 : ---> wq {保存并退出}

  • openresty.service 操作的服务名,也就是Liunx的 OpenResty(带 WAF 的 Nginx)服务

然后通过浏览器去访问IP地址,刷新一次,这样题目答案就出来了

如果没有修改次数,则要刷新十次,才可以刷新出来


3.5.2 方法二:解码获取(题目不需求的,可选做)

OpenResty 会把这段alert内容 返回给浏览器 ,所以我们复制 这段16进制的代码

进入文件之后,按键盘上的字母 a 来进行编辑修改

也要记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

Matlab 复制代码
// 把纯十六进制文本文件还原成原始二进制数据(十六进制转二进制)
 
xxd -p -r [文件名]
解释
xxd:Linux 自带十六进制工具,两大核心功能:
普通:文件 → 十六进制文本
反向:十六进制文本 → 原始二进制(本命令用的就是反向)
 
-p:plain 纯模式:
只输出连续无空格、无偏移、无注释的纯十六进制字符串
 
-r:reverse 反向转换(关键参数):
不加 -r:二进制文件 → 十六进制文本
加 -r:十六进制文本 → 恢复成原始二进制文件

这样题目答案就出来了


4. 如果不使用Next Termal审计系统做

前提要素实验过程的步骤差不多,就不多做解释了,想要看的同学,可返回3.实验过程查看

题目步骤基本没什么太大改变,本次只做题目1 ,其他题目参考3. 题目


题目1:

  1. 为提高WAF的安全性,要求仅允许白名单内的IP当前主机IP访问站点,请将当前主机的IP,添加到WAF的白名单,再通过浏览器访问当前网站(网站地址为部署WAF主机的IP),得到并写出flag。(如++http://192.168.1.1++)

Fl@G{644abae4e1ab1697c5d7b373e44ae404}


4.1.1 方法一:修改whiteip.rule文件(题目需求)

配置完记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

然后通过浏览器 去访问IP地址 ,这样题目答案就出来了


4.1.2 方法二:解码获取(题目不需求的,可选做)

yy复制,p粘贴

yy复制,p粘贴,a编辑修改

vim 文件名 --------- 进入一个文本文件,如果没有会自动创建

修改完之后记得保存

点击 Esc ---> 冒号 : ---> wq {保存并退出}

题目答案就出来了

其他题目由此类推,参考3. 题目


Next Termal审计系统方便复制粘贴,也可上下滑动,而在此Liunx下,不方便上下滑动,复制粘贴需要字母来。


免责声明:以上所有内容仅限用于学习和研究目的,不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。