免责声明:本文仅做技术交流与学习...
目录
背景:
前提条件:
演示:
实战中如何操作?
探针发现:
背景:
环境变量提权-------->
背景:
管理员编译了程序,给予了程序管理员运行的方案,
攻击通过对程序的运行调试反编译等得到了程序的运行大概逻辑,
尝试对程序调用的环境变量进行复制后覆盖,导致的程序加载继承权限.
前提条件:
ROOT 用户对某个第三方程序给予了 SUID 权限 .
演示:
某特殊程序有高权限-->调用环境变量,覆盖-->运行程序(脚本)
//假设管理员自己写了个脚本叫demo.c
//--->用系统命令执行ps命令(查看进程命令).
---------------
//demo.c
#include<unistd.h>
void main()
{
setuid(0);
setgid(0);
system("ps");
}
---这里你执行ps命令(或执行demo.c),会调用自带的环境变量.
demo.c ---> 会执行ps命令自带的环境变量路径:/bin/ps
---通过执行命令进行反编译.-->生成shell文件,再给他一个管理员权限.
gcc demo.c -o shell
chmod u+s shell
--->现在再执行shell文件 (相当于ps命令)
编译后shell(给到suid权限)可执行文件执行后相当于会运行ps命令
复制bash到当前目录取名ps
如果shell再次执行ps==>bash
####没有环境变量就找当前目录对应程序名有环境变量就找环境调用
#创建普通用户
useradd xiaodi
id xiaodi
---咋办,shell文件还是ps原始的样子.
--->设置环境变量
原始:ps命令
由于环境变量加了tmp执行ps执行/tmp/ps
ps又是通过bash复制的就是bash
shell执行bashsuid执行bash就是直接提权
实战中如何操作?
探针发现:
find / -user root -perm -4000 -print 2>/dev/null
实战中的发现挖掘这类的安全问题: 1、先获取suid所有程序 2、去除系统自带的一些命令(筛选第三方或编译等的程序) 3、下载这个程序进行反编译或找源代码看运行结果是干什么 4、思考程序有没有执行一些环境变量命令(ps ping su sudo等) 5、尝试通过复制suid提权的命令(findbash)复制替换原有的执行命令(先添加一个环境变量)