Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sudo_inject — [Linux] 滥用 sudo 令牌的两种权限提升技术 | Kitploit
工具/GitHubGitHub/nongiach/sudo_inject
权限提升漏洞利用后渗透利用数字取证CTF学习与教育红队
GitHubnongiach/sudo_inject

sudo_inject

[Linux] 滥用 sudo 令牌的两种权限提升技术

查看仓库
73011397年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

[Linux] 通过注入持有 sudo 令牌的进程实现权限提升

注入持有有效 sudo 令牌的进程并激活我们自己的 sudo 令牌

介绍

我们都注意到,有时 sudo 不会问我们要密码,因为它记住了我们。它是如何记住我们,又是如何识别我们的?我们能否伪造身份并成为 root? 据我所知,这项研究还没有被记录在案,但如果有的话请告诉我。 事实上,sudo 会在 /var/run/sudo/ts/[username] 中为每个 Linux 用户创建一个文件。 这些文件同时包含成功和失败的身份验证记录,然后 sudo 利用这些文件来记住所有已认证的进程。-- @chaignc

这个仓库为你提供:

  • 一种通过滥用 sudo 令牌获取 root 权限的方法(别高兴太早,是有条件的)。
  • 一个为给定进程伪造 sudo 令牌的工具(./extra_tools/ 中的 write_sudo_token)。
  • 一个用于取证分析 sudo 令牌的工具(./extra_tools 中的 read_sudo_token_forensic 和 read_sudo_token)。
  • 一种将任意 root 文件写入转化为稳定 root 代码执行的技术。
  • 一个关于如何编写无需 ptrace、也无需目标进程存活的漏洞利用的线索。

如何利用存在漏洞的系统

附注:务必阅读要求!!

$ sudo whatever
[sudo] password for user:    # Press <ctrl>+c since you don't have the password. # This creates an invalid sudo tokens.
$ sh exploit.sh
.... wait 1 seconds
$ sudo -i # no password required :)
# id
uid=0(root) gid=0(root) groups=0(root)

要求

  • 完全启用 Ptrace(/proc/sys/kernel/yama/ptrace_scope == 0)。
  • 当前用户必须拥有一个持有相同 uid 的有效 sudo 令牌的存活进程。
The default password timeout is 15 minutes. So if you use sudo twice in 15 minutes (900 seconds), you will not be asked to type the user’s password again.

警告

  • 仅供教育目的,请勿在你没有所有权的系统上使用。
  • 未经过充分测试,因此不要认为它足够稳定。

幕后发生了什么?

exploit.sh 会注入当前用户拥有的所有 shell 进程,并利用它们的 sudo 令牌来验证我们自己的 sudo 令牌。它只有区区 3 行 shell 代码,看看吧。

使用场景

这远不是一种无条件的通用提权方法,但它确实有效。例如,如果你有一个 RCE,又没有用户密码,但受害者使用了 sudo,那么你就可以通过窃取其令牌轻松获得 root 权限。

如何在实验室中模拟?

# echo 0 > /proc/sys/kernel/yama/ptrace_scope
# # Don't worry this is not persistent accross reboot

启动两个终端:

  • 一个用于输入 sudo 并键入正确密码(例如:sudo ls)。
  • 另一个用于按上面的说明启动 exploit。

更进一步

exploit v2 在 /tmp/sh 中创建 suid sh

如果你在 exploit v1 上运气不佳,试试 v2。

$ ./exploit_v2.sh
Current process : 2441
chmod: changing permissions of 'activate_sudo_token': Operation not permitted
Injecting process 1721 -> bash
Injecting process 2433 -> bash
cat: /proc/2446/comm: No such file or directory
Injecting process 2446 -> 
$ /tmp/sh -p
# id
uid=1001(test) gid=1001(test) euid=0(root) egid=0(root) groups=0(root),1001(test)

取证,DFIR?

输出格式还有待改进,但每个进程的 sudo 尝试都会在 /var/run/sudo/ts/[username] 中有一个条目。 此外,这些文件存储在 tmpfs(内存)中,可以编写一个 volatility 插件来解析这些信息,从而收集 sudo 尝试记录。

./read_sudo_token_forensic  < /var/run/sudo/ts/user
version, flags, uid, sid, starttime_sec, starttime_nsec
2, 0, 0, 0, 0, 0
2, 0, 1001, 1145, 188, 660000000
2, 0, 1001, 24878, 7461, 490000000
2, 0, 1001, 24578, 6974, 10000000

任意写入获得 root

如果你拥有任意写入能力,就可以为当前进程创建一个 sudo 令牌,从而获得 root 代码执行能力。 请查看 extra_tools 中的 './write_sudo_token $$ > /var/run/sudo/ts/[username]'。

白银 sudo 票据

这是一种在很少重启的服务器上创建秘密 root 后门的绝佳方法。 尚未完成,但可以看看 ./extra_tools 中的 './write_sudo_token $$'。

为什么

我一直在寻找窃取已死亡进程 sudo 令牌的方法,但这似乎是不可能的,因为它们通过 ((进程启动时间 和 进程会话 id) 或 (tty 启动时间 和 tty 会话 id)) 关联。会话 id(进程 pid)可以被伪装,但进程启动时间无法伪造。

如何修复?

  • 更新你的 sudo 版本
  • 降低 ptrace 权限,例如编辑 /etc/sysctl.conf,添加
kernel.yama.ptrace_scope = 1

yama ptrace scope

链接

解析 /proc/[pid]/stat

Sudo 令牌结构

基于 Linux 的无需 ptrace 的进程间代码注入

将进程移动到另一个终端

https://www.linusakesson.net/programming/tty/


作者 @chaignc #HexpressoTeam。

下载工具