4.6 KiB
Blokowanie głównej strony w celu kradzieży postmessage
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
- Pracujesz w firmie zajmującej się cyberbezpieczeństwem? Chcesz zobaczyć, jak Twoja firma jest reklamowana w HackTricks? A może chcesz mieć dostęp do najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF? Sprawdź PLAN SUBSKRYPCYJNY!
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź mnie na Twitterze 🐦@carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do repozytorium hacktricks i hacktricks-cloud.
Wygrywanie RC za pomocą Iframes
Zgodnie z tym wpisem Terjanq dokumenty blob utworzone z pustych źródeł są izolowane ze względów bezpieczeństwa, co oznacza, że jeśli utrzymujesz zajętą główną stronę, strona iframe zostanie wykonana.
W zasadzie w tym wyzwaniu wykonywana jest izolowana strona iframe, a zaraz po jej załadowaniu strona nadrzędna wysyła wiadomość post z flagą.
Jednak komunikacja postmessage jest podatna na XSS (strona iframe może wykonywać kod JS).
Dlatego celem atakującego jest pozwolić rodzicowi na utworzenie iframe, ale przed tym należy zajęć rodzica i wysłać payload do iframe. Podczas gdy rodzic jest zajęty, iframe wykonuje payload, który będzie pewnym kodem JS, który będzie nasłuchiwał na wiadomość postmessage od rodzica i wycieka flagę.
W końcu iframe wykonuje payload, a strona nadrzędna przestaje być zajęta, więc wysyła flagę, a payload ją wycieka.
Ale jak można sprawić, aby rodzic był zajęty zaraz po wygenerowaniu iframe i tylko wtedy, gdy czeka na gotowość iframe do wysłania wrażliwych danych? W zasadzie musisz znaleźć asynchroniczną akcję, którą rodzic może wykonać. Na przykład, w tym wyzwaniu rodzic nasłuchiwał wiadomości postmessage w ten sposób:
window.addEventListener('message', (e) => {
if (e.data == 'blob loaded') {
$("#previewModal").modal();
}
});
więc było możliwe wysłanie dużej liczby całkowitej w postmessage, która zostanie przekonwertowana na ciąg znaków w tej porównaniu, co zajmie trochę czasu:
const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);
Aby być precyzyjnym i wysłać to postmessage zaraz po utworzeniu iframe, ale przed jego gotowością do odbierania danych od rodzica, będziesz musiał pobawić się milisekundami w funkcji setTimeout
.
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
- Pracujesz w firmie zajmującej się cyberbezpieczeństwem? Chcesz zobaczyć swoją firmę reklamowaną w HackTricks? A może chcesz mieć dostęp do najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF? Sprawdź PLAN SUBSKRYPCYJNY!
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź mnie na Twitterze 🐦@carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do repozytorium hacktricks i hacktricks-cloud.