Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

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

工具目录

分类

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

sudo_inject

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

查看仓库
7301137年前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、也无需目标进程存活的漏洞利用的线索。

如何利用存在漏洞的系统

附注:务必阅读要求!!

root@kitploit:~
$ 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 令牌的存活进程。
root@kitploit:~
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 权限。

如何在实验室中模拟?

root@kitploit:~
# 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。

root@kitploit:~
$ ./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 尝试记录。

root@kitploit:~
./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,添加
root@kitploit:~
kernel.yama.ptrace_scope = 1

yama ptrace scope

链接

解析 /proc/[pid]/stat

Sudo 令牌结构

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

将进程移动到另一个终端

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


作者 @chaignc #HexpressoTeam。

下载工具