<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
* 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 kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **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.
Vidhibiti vya CSS vinaundwa ili kulinganisha thamani za `jina` na `thamani` ya kipengele cha `input`. Ikiwa thamani ya kipengele cha input inaanza na herufi maalum, rasilimali ya nje iliyopangwa tayari inasomwa:
Hata hivyo, njia hii inakabiliwa na kikwazo wakati inashughulikia vipengele vya pembejeo vilivyofichwa (`type="hidden"`) kwa sababu vipengele vilivyofichwa havipakii mandharinyuma.
Ili kuzunguka kikwazo hiki, unaweza kulenga kipengele cha ndugu kinachofuata kwa kutumia kishikilizi cha ndugu cha jumla `~`. Sheria ya CSS basi inatumika kwa ndugu zote zinazofuata kipengele cha pembejeo kilichofichwa, ikisababisha picha ya mandharinyuma kupakia:
Mfano wa vitendo wa kutumia mbinu hii umeelezwa kwa undani katika kificho kilichotolewa. Unaweza kuona kificho hicho [hapa](https://gist.github.com/d0nutptr/928301bde1d2aa761d1632628ee8f24e).
1.**Urefu wa Payload**: Vector ya CSS injection lazima iweze kusaidia payloads ndefu vya kutosha kuwezesha utekelezaji wa selectors uliotengenezwa.
2.**Upya wa CSS**: Lazima uwe na uwezo wa kuunda ukurasa, ambao ni muhimu kwa kuzindua upya wa CSS na payloads mpya zilizotengenezwa.
3.**Rasilimali za Nje**: Mbinu hii inategemea uwezo wa kutumia picha zilizohifadhiwa nje ya tovuti. Hii inaweza kuwa imezuiliwa na Sera ya Usalama ya Yaliyomo (CSP) ya tovuti.
Kama [**ilivyoelezwa katika chapisho hili**](https://portswigger.net/research/blind-css-exfiltration), ni muhimu kuunganisha selectors **`:has`** na **`:not`** ili kutambua maudhui hata kutoka kwenye vipengele vipofu. Hii ni muhimu sana wakati huna wazo la kilichomo ndani ya ukurasa wa wavuti unaojaza CSS injection.\
Pia ni muhimu kutumia selectors hizo kuondoa habari kutoka kwenye vikundi kadhaa vya aina ile ile kama vile:
Kwa kuchanganya na mbinu ya **@import** ifuatayo, niwezekano wa kuvuja habari nyingi kwa kutumia CSS injection kutoka kwenye kurasa zisizo na uwezo wa kuona na **blind-css-exfiltration**.
Mbinu iliyotangulia ina baadhi ya mapungufu, angalia mahitaji ya awali. Unahitaji kuwa na uwezo wa **kutuma viungo vingi kwa muathirika**, au unahitaji kuwa na uwezo wa **kuweka CSS injection kwenye ukurasa unaoweza kuvuja**.
Badala ya kupakia ukurasa huo mara kwa mara na mizigo tofauti kila wakati (kama ilivyokuwa hapo awali), tutapakia ukurasa mara moja tu na tu kwa kuagiza kwenye seva ya mshambuliaji (hii ndiyo mizigo ya kutuma kwa muathirika):
Unaweza kupata [msimbo wa Pepe Vila wa kutumia hii hapa](https://gist.github.com/cgvwzq/6260f0f0a47c009c87b4d46ce3808231) au unaweza kupata [msimbo sawa lakini ulio na maoni hapa](./#css-injection)
Maranyingi script **haidetecti kwa usahihi kwamba kiambishi + kisitiri kilichogunduliwa tayari ni bendera kamili** na itaendelea mbele (kwenye kiambishi) na nyuma (kwenye kisitiri) na wakati fulani itasimama.\
Usijali, tuangalie **matokeo** kwa sababu **unaweza kuona bendera hapo**.
* **`.class-ya-kutafuta:nth-child(2)`**: Hii itatafuta kipengee cha pili chenye darasa "class-ya-kutafuta" kwenye DOM.
* Chaguo la **`:empty`**: Hutumiwa kwa mfano katika [**hii writeup**](https://github.com/b14d35/CTF-Writeups/tree/master/bi0sCTF%202022/Emo-Locker)**:**
**Marejeo:** [CSS based Attack: Abusing unicode-range of @font-face ](https://mksben.l0.cm/2015/10/css-based-attack-abusing-unicode-range.html), [Error-Based XS-Search PoC by @terjanq](https://twitter.com/terjanq/status/1180477124861407234)
Nia kuu ni **kutumia fonti ya desturi kutoka kwenye kifaa kilichodhibitiwa** na kuhakikisha kuwa **maandishi (katika kesi hii, 'A') yanawekwa na fonti hii tu ikiwa rasilimali iliyotajwa (`favicon.ico`) haiwezi kupakia**.
- Kipengele cha `<object>` chenye `id="poc0"` kinatengenezwa katika sehemu ya `<body>`. Kipengele hiki kinajaribu kupakia rasilimali kutoka `http://192.168.0.1/favicon.ico`.
-`font-family` kwa kipengele hiki imewekwa kuwa `'poc'`, kama ilivyoelezwa katika sehemu ya `<style>`.
- Ikiwa rasilimali (`favicon.ico`) haiwezi kupakia, maudhui ya akiba (herufi 'A') ndani ya lebo ya `<object>` yataonyeshwa.
- Maudhui ya akiba ('A') yataonyeshwa kwa kutumia fonti ya kibinafsi `poc` ikiwa rasilimali ya nje haiwezi kupakia.
Pseudo-class ya **`:target`** inatumika kuchagua kipengele kinacholengwa na **kitambulisho cha URL**, kama ilivyoelezwa katika [maelezo ya CSS Selectors Level 4](https://drafts.csswg.org/selectors-4/#the-target-pseudo). Ni muhimu kuelewa kuwa `::target-text` haitachagua kipengele chochote isipokuwa ikiwa nakala inalengwa wazi na kitambulisho.
Wasiwasi wa usalama unatokea wakati wadukuzi wanatumia kipengele cha kitambulisho cha **Scroll-to-text**, kuruhusu kuthibitisha uwepo wa nakala maalum kwenye ukurasa wa wavuti kwa kupakia rasilimali kutoka kwenye seva yao kupitia uingizaji wa HTML. Njia hii inahusisha kuingiza sheria ya CSS kama ifuatavyo:
Katika hali kama hizo, ikiwa neno "Msimamizi" lipo kwenye ukurasa, rasilimali `target.png` inaombwa kutoka kwenye seva, ikionyesha uwepo wa neno hilo. Mfano wa shambulio hili unaweza kutekelezwa kupitia URL maalum iliyojengwa kwa kuweka CSS iliyodukuliwa pamoja na kipande cha maandishi cha Scroll-to-text:
Hapa, shambulio linabadilisha kuingiza HTML ili kuhamisha nambari ya CSS, lengo likiwa ni maandishi maalum "Msimamizi" kupitia kipande cha Scroll-to-text (`#:~:text=Administrator`). Ikiwa maandishi yanapatikana, rasilimali iliyoelezwa inapakia, ikionyesha uwepo wake kwa bahati mbaya kwa mshambuliaji.
1.**Ulinganishi Mdogo wa STTF**: Kipande cha Scroll-to-text Fragment (STTF) kimeundwa ili kulinganisha tu maneno au sentensi, hivyo kikizuia uwezo wake wa kuvuja siri au alama za siri zisizo na mpangilio.
2.**Kizuizi kwa Muktadha wa Kivinjari cha Ngazi ya Juu**: STTF inafanya kazi tu katika muktadha wa kivinjari cha ngazi ya juu na haifanyi kazi ndani ya iframes, hivyo kufanya jaribio lolote la udanganyifu kuwa dhahiri zaidi kwa mtumiaji.
3.**Hitaji la Kuanzishwa kwa Mtumiaji**: STTF inahitaji hatua ya kuanzishwa na mtumiaji ili ifanye kazi, maana shambulio linawezekana tu kupitia urambazaji ulioanzishwa na mtumiaji. Mahitaji haya yanapunguza kwa kiasi kikubwa hatari ya mashambulio kufanywa kiotomatiki bila ushiriki wa mtumiaji. Walakini, mwandishi wa chapisho la blogu anataja hali na njia za kuzunguka maalum (kama vile uhandisi wa kijamii, mwingiliano na programu-jalizi maarufu za kivinjari) ambazo zinaweza kuwezesha kiotomatiki shambulio.
Kwa habari zaidi angalia ripoti ya asili: [https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/](https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/)
Unapoingia ukurasa huu, Chrome na Firefox hupata "?A" na "?B" kwa sababu kipengele cha habari nyeti kina herufi "A" na "B". Lakini Chrome na Firefox hawapati "?C" kwa sababu hauna "C". Hii inamaanisha kuwa tumeweza kusoma "A" na "B".
### Udukuzi wa kuvuja kwa kipengele cha maandishi (I): ligatures <a href="#udukuzi-wa-kuvuja-kwa-kipengele-cha-maandishi-i-ligatures" id="udukuzi-wa-kuvuja-kwa-kipengele-cha-maandishi-i-ligatures"></a>
**Marejeleo:** [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/)
Teknolojia iliyoelezwa inahusisha kuchukua maandishi kutoka kwa kipengele kwa kuchanganya herufi za fonti na kufuatilia mabadiliko ya upana. Mchakato huu unajumuisha hatua kadhaa:
- CSS inatumika kuhakikisha kuwa maandishi hayapindi (`white-space: nowrap`) na kubinafsisha mtindo wa kisanduku cha skrini.
- Kuonekana kwa kisanduku cha skrini ya usawa, kilichobinafsishwa kwa njia tofauti, hufanya kama kiashiria (oracle) kwamba ligature fulani, na hivyo mfuatano fulani wa herufi, upo katika maandishi.
- **Hatua ya 1**: Fonti zinaundwa kwa jozi za herufi zenye upana mkubwa.
- **Hatua ya 2**: Mbinu ya kisanduku cha skrini inatumika kugundua wakati glyph yenye upana mkubwa (ligature ya jozi ya herufi) inavyoonyeshwa, ikionyesha uwepo wa mfuatano wa herufi.
- **Hatua ya 3**: Baada ya kugundua ligature, glyphs mpya zinaundwa kuwakilisha mfuatano wa herufi tatu, zikiunganisha jozi iliyogunduliwa na kuongeza herufi kabla au baada yake.
- **Hatua ya 4**: Ugunduzi wa ligature ya herufi tatu unafanywa.
- **Hatua ya 5**: Mchakato unaendelea, ukifichua hatua kwa hatua maandishi yote.
### Udukuzi wa kuvuja kwa kipengele cha maandishi (II): kuvuja kwa charset kwa kutumia fonti ya chaguo-msingi (bila kuhitaji rasilimali za nje) <a href="#udukuzi-wa-kuvuja-kwa-kipengele-cha-maandishi-ii-kuvuja-kwa-charset-kwa-kutumia-fonti-ya-chaguo-msingi" id="udukuzi-wa-kuvuja-kwa-kipengele-cha-maandishi-ii-kuvuja-kwa-charset-kwa-kutumia-fonti-ya-chaguo-msingi"></a>
Mbinu hii ilitolewa katika [**mjadala wa Slackers**](https://www.reddit.com/r/Slackers/comments/dzrx2s/what\_can\_we\_do\_with\_single\_css\_injection/). Charset inayotumiwa katika kipengele cha maandishi inaweza kuvuja **kwa kutumia fonti za chaguo-msingi** zilizosanikishwa kwenye kivinjari: hakuna fonti za nje -au za kibinafsi- zinazohitajika.
Wazo linahusisha kutumia uhuishaji kuongeza taratibu upana wa `div`, kuruhusu herufi moja kwa wakati kuhamia kutoka sehemu ya 'sufiksi' ya maandishi hadi sehemu ya 'kiambishi'. Mchakato huu unagawa maandishi katika sehemu mbili:
Katika mpito huu, **mtego wa unicode-range** unatumika kutambua kila herufi mpya inapojiunga na kiambishi. Hii inafanikiwa kwa kubadilisha fonti kuwa Comic Sans, ambayo ni refu kuliko fonti ya chaguo-msingi, na hivyo kusababisha kisanduku cha skrini cha wima. Kuonekana kwa kisanduku cha skrini hiki kunafichua uwepo wa herufi mpya katika kiambishi.
Kimsingi, **unicode-range inatumika kugundua herufi**, lakini kwa kuwa hatutaki kupakia fonti ya nje, tunahitaji kupata njia nyingine.\
Wakati **herufi** inapopatikana, inapewa **fonti ya Comic Sans iliyosanikishwa tayari**, ambayo inafanya herufi kuwa **kubwa** na kusababisha **kisanduku cha skrini** ambacho kitavuja herufi iliyopatikana.
Hii ni mbinu ya kuingiza CSS kwenye tovuti ili kufanya mabadiliko fulani. Kwa mfano, unaweza kutumia CSS Injection kubadilisha upana wa kipengee fulani kwenye tovuti.
Kwa mfano, unaweza kutumia kanuni ifuatayo ya CSS Injection kubadilisha upana wa kipengee kwa asilimia tofauti:
Katika mfano huu, tunatumia `@keyframes` kuanzisha mzunguko wa mabadiliko ya upana wa kipengee. Kisha, tunatumia `animation` kwenye kipengee cha `div` ili kuomba mzunguko huo wa mabadiliko ya upana.
Pia, tunatumia `div::-webkit-scrollbar` kubadilisha rangi ya background ya scrollbar. Na kwa kutumia `div::-webkit-scrollbar:vertical`, tunaweza kubadilisha rangi ya background ya scrollbar ya upande wa pili.
Kwa kutumia CSS Injection, unaweza kufanya mabadiliko mbalimbali kwenye tovuti kwa kutumia kanuni za CSS.
### Uchunguzi wa Node ya Matini (III): Kuvuja kwa charset kwa kutumia fonti ya chaguo-msingi kwa kuficha vitu (bila kuhitaji mali za nje) <a href="#uchunguzi-wa-node-ya-matini-ii-kuvuja-kwa-charset-kwa-kutumia-fonti-ya-chaguo-msingi" id="uchunguzi-wa-node-ya-matini-ii-kuvuja-kwa-charset-kwa-kutumia-fonti-ya-chaguo-msingi"></a>
Kesi hii ni sawa sana na ile iliyotangulia, hata hivyo, katika kesi hii lengo la kufanya **herufi maalum kuwa kubwa kuliko nyingine ni kuficha kitu** kama kifungo ambacho hakitabonyezwa na boti au picha ambayo haitapakia. Kwa hivyo tunaweza kupima hatua (au kutokuwepo kwa hatua) na kujua ikiwa herufi maalum ipo ndani ya matini.
### Uchunguzi wa Node ya Matini (III): Kuvuja kwa charset kwa kutumia muda wa kache (bila kuhitaji mali za nje) <a href="#uchunguzi-wa-node-ya-matini-ii-kuvuja-kwa-charset-kwa-kutumia-fonti-ya-chaguo-msingi" id="uchunguzi-wa-node-ya-matini-ii-kuvuja-kwa-charset-kwa-kutumia-fonti-ya-chaguo-msingi"></a>
Ikiwa kuna mechi, **font itapakia kutoka `/static/bootstrap.min.css?q=1`**. Ingawa haitapakia kwa mafanikio, **kivinjari kinapaswa kukihifadhi**, na hata kama hakuna hifadhi, kuna **muhuri wa 304 usiobadilishwa**, kwa hivyo **jibu linapaswa kuwa haraka** kuliko mambo mengine.
Walakini, ikiwa tofauti ya wakati kati ya jibu lililohifadhiwa na lile lisilohifadhiwa sio kubwa ya kutosha, hii haitakuwa na maana. Kwa mfano, mwandishi alitaja: Walakini, baada ya kufanya majaribio, niligundua kuwa shida ya kwanza ni kwamba kasi haipo sana, na shida ya pili ni kwamba boti hutumia bendera ya `disk-cache-size=1`, ambayo ni ya kufikiria sana.
### Uchunguzi wa Kifungu cha Nakala (III): kuvuja kwa charset kwa kupima upakiaji wa mamia ya "fonti" za ndani (bila kuhitaji mali za nje) <a href="#uchunguzi-wa-kifungu-cha-nakala-ii-kuvuja-kwa-charset-kwa-fonti-ya-kawaida" id="uchunguzi-wa-kifungu-cha-nakala-ii-kuvuja-kwa-charset-kwa-fonti-ya-kawaida"></a>
**Marejeleo:** Hii inatajwa kama [suluhisho lisilofanikiwa katika andishi 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 mechi inatokea. Kwa njia hii, unaweza **kupima wakati** inachukua na kugundua ikiwa herufi inaonekana au la kwa kitu kama:
Kwa hivyo, ikiwa herufi hazilingani, wakati wa majibu wakati wa kutembelea bot inatarajiwa kuwa takriban sekunde 30. Walakini, ikiwa kuna kulingana na herufi, maombi mengi yatatumwa kupata herufi, ikisababisha shughuli za mtandao kuendelea. Kama matokeo, itachukua muda mrefu kutimiza hali ya kusimamisha na kupokea majibu. Kwa hivyo, wakati wa majibu unaweza kutumika kama kiashiria cha kubaini ikiwa kuna kulingana na herufi.
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ikiwa unataka kuona **kampuni yako inatangazwa katika HackTricks** au **kupakua HackTricks kwa muundo wa PDF** Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**swag rasmi wa 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) 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) github repos.