Web攻击分析与检测
2026/6/4 14:22:55 网站建设 项目流程

实验预期】

  1. 规则编写并检测出SQL注入。
  2. 规则编写并检测出上传一句话木马。
  3. 规则编写并检测出webshell与AntSword(蚁剑)连接。

【实验步骤与结果】

1.检测出SQL注入

本节中使用 snort 来捕获网络流量,当注入任何网页时,它会分析SQL注入引用,以获取任何Web服务器的数据库系统信息。当在其网络中捕获这些流量时,Snort将生成恶意流量警报,网络管理员将立即注意可疑流量,并可以对攻击IP采取有效措施。

进入【恶意PC】控制台,打开浏览器输入地址http://172.168.12.1/sqli/02.php?id=1进入sql注入页面,如下图所示。

切换至【Snort】控制台,使用嗅探器模式运行Snort,并将所有警报打印到控制台,如下图所示。

snort -i eth0 -v -d -e -x -L dump

切换【恶意PC】控制台,在浏览器输入单引号(单引号转换URL编码是%27)或双引号(双引号转换URL编码是%22)让其页面报错,判断是否存在注入点。

id='1一个单引号’将前面那个单引号闭合掉 后面那个单引号使用注释符注释掉 – +或者使用#也可以。

切换至【Snort】控制台,可以看到snort嗅探到源地址140.250.74.206,目的地址172.168.12.1,目的端口80,得知数据包的传输协议为tcp,抓到GET请求是sqli/01.php?id=1%27。

按住ctrl+z结束嗅探模式,编辑/usr/local/etc/rules/local.rules文件中创建两个规则,在终端中使用vim命令进行local.rules规则编辑,添加规则如下图所示,完成后保存并退出。

alert tcp any any -> any 80 (msg: "Error Based SQL Injection Detected %27"; content: "%27" ; sid:100000011; ) alert tcp any any -> any 80 (msg: "Error Based SQL Injection Detected %22"; content: "%22" ; sid:100000012; )

规则的动作为alert,规则协议为tcp,源地址、目的地址与端口设置为any,目的端口为80,msg为警告文字的信息,而content为GET请求中的字段关键字分别为%27与%22。

msg 规则选项向日志记录和警报引擎告知要打印的消息以及数据包转储或警报。它是一个简单的文本字符串,利用 \ 作为转义字符来表示离散的字符,否则这些字符可能会使 Snort 的规则解析器感到困惑(例如分号;字符)。
msg:"<message text>";

该 SID 关键字用来唯一标识 Snort 规则。此信息使输出插件可以轻松识别规则。此选项应与 rev 关键字一起使用。
< 100 保留以备将来使用
Snort 分发中包含 100-999,999 条规则
= 1,000,000 用于本地规则
文件 sid-msg。map 包含警报消息到 Snort 规则 id 的映射。
sid:<snort rules id>;

现在,在接口上以检测模式运行Snort,并将所有警报打印到日志目录。

snort -c /usr/local/etc/snort/snort.lua -i eth0 -s 65535 -k none -l /var/log/snort

新建终端使用tail -f 打印日志/var/log/snort/alert_fast.txt,如下图所示。

切换【恶意PC】控制台,重新在浏览器测试单引号和双引号。
切换至【Snort】控制台,可以看到snort警告日志输出Error Based SQL Injection Detected %27和Error Based SQL Injection Detected %22两条文字警告分别为SQL注入测试单引号和SQL注入测试双引号。

2.检测出一句话木马

进入【恶意PC】控制台,打开浏览器输入地址http://172.168.12.1/upload/02.php进入文件名过滤绕过漏洞页面,如下图所示。

文件名过滤绕过漏洞主要是因为通过黑名单的方式判断了文件上传的类型,而且并没有完整的过滤,导致攻击者通过上传黑名单类型之外的文件,绕过文件上传的验证。
黑名单的判断方式,很容易绕过,并且此处并没有判断大小写,可以用PhP、phP、php3、phtml等多种后缀来绕过过滤。

新建终端创建1.phP文件,使用命令touch 1.phP,使用vim命令编辑1.phP文件,写入php一句话木马<?php @eval ($_POST[v]);?>,编辑完成后保存退出,如下图所示。

单击左上角搜索【wireshark】,并单击打开该工具。

切换至【Snort】控制台,使用嗅探器模式运行Snort,并将所有警报打印到控制台,如下图所示。

snort -i eth0 -v -d -e -x -L dump

切换至【恶意PC】控制台,在【wireshark】界面中,单击【eth0】网卡接口,使用eth0监听,如下图所示。

回到上传页面,单击【Browse…】,选择上传1.phP文件,点击【submit】按钮。

点击红色按钮直至变为灰色,停止抓包,并使用过滤表达式在过滤器过滤http协议【http.request】,如下图所示。

上传文件后,发现已经上传成功了,右键图片选择【Copy image Link】。

新建浏览器标签页,粘贴至地址,访问后如下图所示。

在数据包中以POST请求发出上传一句话木马,而下一行为GET请求,为php一句话木马的地址链接,如下图所示。

同样切换至【Snort】控制台,停止运行嗅探器模式,可以看到源地址为恶意PC,目的地址为漏洞的服务器,以及数据包协议为tcp,目的端口为80,还可以看到POST请求发出上传一句话木马,如下图所示。

GET请求,为php一句话木马的地址链接,如下图所示。

编辑/usr/local/etc/rules/local.rules文件中创建规则,在终端中使用vim命令进行local.rules规则编辑,添加规则如下图所示,完成后保存并退出。

alert tcp any any -> any 80 (msg: "PHP webshell Detected"; content: "@eval" ; content: "$_POST" ; sid:100000013; )

规则的动作为alert,规则协议为tcp,源地址、目的地址与端口设置为any,目的端口为80,msg为警告文字的信息,而content为POST请求中的一句话木马字段关键字分别匹配为@eval与$_POST。

现在,在接口上以检测模式运行Snort,并将所有警报打印到日志目录。

snort -c /usr/local/etc/snort/snort.lua -i eth0 -s 65535 -k none -l /var/log/snort

新建终端使用tail -f 打印日志/var/log/snort/alert_fast.txt,如下图所示。

切换【恶意PC】控制台,重新在浏览器测试上传一句话木马。
切换至【Snort】控制台,可以看到snort警告日志输出PHP webshell Detected文字,如下图所示。

3.检测webshell管理器-AntSword(蚁剑)

蚁剑(AntSword)是一款开源的跨平台WebShell管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。

切换至【恶意PC】控制台,使用cd命令进入桌面的AntSword文件夹,并执行AntSword文件,弹出AntSword界面,如下图所示。

右击页面空白处,在快捷菜单中选择【Add】,如图所示。

将一句话木马地址复制粘贴至【Shell url】右侧的文本框中,在【Shell pwd】中输入v,其他配置都选择默认即可,此处使用的是default编码器注意此处为重点,最后单击【Add】按钮,如图所示。

添加完成后,如下图所示。

切换至【Snort】控制台,使用嗅探器模式运行Snort,并将所有警报打印到控制台,如下图所示。

snort -i eth0 -v -d -e -x -L dump

切换至【恶意PC】控制台,关闭wireshark,再次打开wireshark,在【wireshark】界面中,单击【eth0】网卡接口,使用eth0监听

双击AntSword添加的内容,即获取到webshell,如图所示。

点击红色按钮直至变为灰色,停止抓包,并使用过滤表达式在过滤器过滤http协议【http.request】,如下图所示。

右键单击该行,依次选择【Follow】→【HTTP Stream】,查看HTTP数据流,如下图所示。

可以看到此处使用的是default编码器,而密码是v,则为明文传输,如下图所示。

注:可自行尝试观察其他编码器的特征值。


同样切换至【Snort】控制台,停止运行嗅探器模式,可以看到源地址为恶意PC,目的地址为漏洞的服务器,以及数据包协议为tcp,目的端口为80,还可以看到上述的default编码器内容,如下图所示。

编辑/usr/local/etc/rules/local.rules文件中创建规则,在终端中使用vim命令进行local.rules规则编辑,添加之前,注释前面三个规则内容,添加规则,如下图所示,完成后保存并退出。

alert tcp any any -> any 80 (msg: "AntSword default encoder Detected"; content: "%40ini_set" ; sid:100000014; )

规则的动作为alert,规则协议为tcp,源地址、目的地址与端口设置为any,目的端口为80,msg为警告文字的信息,而content为default编码器重点字段关键字匹配为%40ini_set。

现在,在接口上以检测模式运行Snort,并将所有警报打印到日志目录。

snort -c /usr/local/etc/snort/snort.lua -i eth0 -s 65535 -k none -l /var/log/snort

新建终端使用tail -f 打印日志/var/log/snort/alert_fast.txt

切换【恶意PC】控制台,重新双击在AntSword添加的内容。
切换至【Snort】控制台,可以看到snort警告日志输出AntSword default encoder Detected告警文字,如下图所示。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询