博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sudo 控制权限原理
阅读量:2344 次
发布时间:2019-05-10

本文共 1294 字,大约阅读时间需要 4 分钟。

核心在于euid的控制,euid决定于可执行文件创建者的s标志位。如果文件拥有s标志位,那么运行次可执行文件时,此进程的euid将会是创建者的id。如果没有s标志位,那么运行的可执行文件euid将是运行者的id。

所以sudo 命令在其他用户登录的时候,就可以利用euid来执行root权限。

所以,如果我们伪造一个不用密码的sudo, 是不是就可以直接提权了呢。答案是不可以。

  1. 伪造的sudo命令必须由root用户创建,所以我们根本没有权限创建。
  2. 我们需要利用chmod u+s增加文件的属性。还是需要root权限。

所以说,如果要利用: 需要利用提权漏洞创建带s标志的可执行文件,之后再次登录就可以以任意用户执行root权限。

#include 
#include
int main(int argc, char* argv[]){
printf("ruid: %d\n",getuid()); printf("euid: %d\n",geteuid()); setuid(0); if(execvp(argv[1], argv+1) == -1){
perror("execvp error"); }; return 0;}

如上述程序,利用root用户编译或者改变拥有者为root后,增加s标志,之后任何用户执行euid都会是0.

lier@linux-k24r:/root/code> ./main /bin/bashruid: 1001euid: 0ruid: 0euid: 0linux-k24r:/root/code # iduid=0(root) gid=100(users) groups=0(root),16(dialout),33(video),100(users)linux-k24r:/root/code # whoamirootlinux-k24r:/root/code # exitexitlier@linux-k24r:/root/code> exitexitlinux-k24r:~/code # chmod u-s mainlinux-k24r:~/code # su lier lier@linux-k24r:/root/code> ./main /bin/bashruid: 1001euid: 1001ruid: 1001euid: 1001lier@linux-k24r:/root/code> cat main.c

直接用上述程序启动bash,bash变为root用户。去掉s标志再次执行,ruid不在变化。

忽然想起以前avd模拟器root过程,是什么替换su文件。原理大概是原始的su文件会对进程判断,如果是adb shell则允许,如果是其他就一律不允许root执行。替换一个可以允许任意进程执行root权限的su。当时因为换这个文件,走了很多弯路。现在发现直接用几行代码就可以自己写一个,虽然会有漏洞吧,一路走来颇有感触。

转载地址:http://xnjvb.baihongyu.com/

你可能感兴趣的文章
Java SSH连接mysql数据库
查看>>
计算机使用常见问题与答案
查看>>
Mysql 触发器的Http请求
查看>>
Mysql 跟踪sql日志
查看>>
搭建一个Vue项目
查看>>
SVN Working Copy Locked 解决方法
查看>>
Java 简单的复习下JDBC 工具类
查看>>
将Java Swing Jar 封装成exe文件
查看>>
端口显示被占用,netstat -aon | findstr却找不到端口的解决方法
查看>>
Linux内核中读写文件数据的方法
查看>>
USB电池充电基础:应急指南(转载)
查看>>
I2C死锁原因及解决方法【转】
查看>>
Ubuntu系统如何安装双网卡及更改网卡名称(eth0改为eth1)
查看>>
二维数组指针
查看>>
Linux下socket的五种IO模型
查看>>
1--ip首部
查看>>
2--第四层
查看>>
3--TCP三次握手
查看>>
4--网关
查看>>
4.内存非连续分配管理方式
查看>>