SQS and Lambda SQL Injectionb
| 2024-6-23
字数 1555阅读时长 4 分钟
During a red team engagement you discovered hardcoded AWS credentials and reference to the region eu-north-1. What cloud infrastructure and sensitive information might be accessible using these details? The red team engagement is ending soon and another impactful finding would complete the report!
题目提供的信息
eu-north-1
AKIATWVWNKAVFMBHTHOR
xkyuDW2oXX/knwb/eRi9ng07e1sfzbbjZ+5qnVf+
 
先安装一下权限枚举工具
 
枚举
 
这玩意枚举起来还挺快的
 
然后 dump 就能看具体结果了
 
先查看 lambda 函数
 
但想查看详情就不行了
 
一个个尝试,可以调用
 
随便试了几个参数,就不行了,得 fuzz 了
 
下载参数 fuzz 字典
 
写个脚本 fuzz_labmda_param.sh
 
趁fuzz我们看下其他权限能拿到啥
 
尝试接收消息
 
刚刚脚本运行结果
 
需要一个 trackingID 参数,然后我们参考消息队列里的。刚好接受消息里有 trackingID,值为 HLT7748
好像并没有什么用,从消息队列多接收几次也是如此
 
我们自己提交一个消息
 
就能执行成功了
 
多尝试几次 receive-message 会发现 Client 的字段基本是固定的几个,尝试发送不存在的 Client
输出为 [] 空数组
 
尝试一下 SQL注入 VELUS CORP.\”
报 DB 错,意味着很可能有 SQL 注入
 
以上过程大概是 数据传入至消息队列(payload 引用)→ 等待处理→ 当 lambda 被触发 → lambda 向消息队列利用 SQL 语句查询数据 → 引起 SQL注入
 
这是一个典型的SQL二次注入,即输入SQL语句没有马上触发SQL注入,而是在另一功能点触发
 
写个脚本触发 lambda_sqli.sh
 
先枚举字段
 
和正常返回的字段个数一样,得到数据库版本在第四个字段 8.0.35
Amazon Relational Database Service (Amazon RDS) for MySQL now supports MySQL minor versions 5.7.42 and 8.0.33)
 
改一下脚本只输出 delivered 字段的内容
 
获取表名
 
一个 TrackingData 一个 customerData
 
查看数据 flag 就是 VELUS CORP 地址的 cardUsed 字段了
 
漏洞防御
有漏洞的函数是这样写的
即直接拼接了 clientName 到 SQL 语句里去查 MySQL
 
应该用预编译来防止 SQL 注入
 
此外,通过 AWS CloudTrail 来主动和快速响应正在进行的恶意攻击,比如频繁的访问的来源IP是一个已被攻击者利用的指标
 
此外存储到数据库的敏感数据应该加密存储,而不是明文~
 
Loading...
目录