# XSS (Cross Site Scripting)
Ikiwa una nia ya **kazi ya udukuzi** na kudukua yasiyodukuliwa - **tunakupa kazi!** (_ujuzi wa Kipolishi wa kuandika na kusema unahitajika_).
{% embed url="https://www.stmcyber.com/careers" %}
## Mbinu
1. Angalia ikiwa **thamani yoyote unayoidhibiti** (_parameta_, _njia_, _vichwa vya habari_?, _vidakuzi_?) inaonyeshwa katika HTML au **kutumiwa** na **msimbo wa JS**.
2. **Pata muktadha** ambapo inaonyeshwa/inatumika.
3. Ikiwa **inaonyeshwa**
1. Angalia **herufi zipi unaweza kutumia** na kulingana na hilo, andaa mzigo:
1. Katika **HTML ghafi**:
1. Je, unaweza kuunda vitambulisho vipya vya HTML?
2. Je, unaweza kutumia matukio au sifa zinazounga mkono itifaki ya `javascript:`?
3. Je, unaweza kukiuka ulinzi?
4. Je, yaliyomo ya HTML inachambuliwa na injini yoyote ya JS ya upande wa mteja (_AngularJS_, _VueJS_, _Mavo_...), unaweza kutumia [**Uingizaji wa Kielelezo cha Upande wa Mteja**](../client-side-template-injection-csti.md).
5. Ikiwa huwezi kuunda vitambulisho vya HTML vinavyotekeleza msimbo wa JS, unaweza kutumia [**Kutundikwa kwa Alama - Uingizaji wa HTML bila skripti**](../dangling-markup-html-scriptless-injection/)?
2. Ndani ya **kitambulisho cha HTML**:
1. Je, unaweza kutoka kwenye muktadha wa HTML ghafi?
2. Je, unaweza kuunda matukio/sifa mpya za kutekeleza msimbo wa JS?
3. Je, sifa ambapo umekwama inaunga mkono utekelezaji wa JS?
4. Je, unaweza kukiuka ulinzi?
3. Ndani ya **msimbo wa JavaScript**:
1. Je, unaweza kuepuka lebo ya ``** vitambulisho vya ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa inayotumia itifaki ya **`javascript:`**:
* Ikiwa yanaonyeshwa kati ya **``** vitambulisho, hata kama matokeo yako yamo ndani ya aina yoyote ya alama, unaweza kujaribu kuingiza `` na kutoka kwenye muktadha huu. Hii inafanya kazi kwa sababu **kivinjari kitachambua kwanza vitambulisho vya HTML** na kisha yaliyomo, kwa hivyo, haitagundua kuwa alama yako ya kuingiza `` iko ndani ya msimbo wa HTML.
* Ikiwa yanaonyeshwa **ndani ya herufi ya JS** na mbinu ya mwisho haifanyi kazi unahitaji **kutoka** kwenye herufi, **kutekeleza** msimbo wako na **kujenga upya** msimbo wa JS (ikiwa kuna kosa, hautatekelezwa:
* `'-alert(1)-'`
* `';-alert(1)//`
* `\';alert(1)//`
* Ikiwa yanaonyeshwa ndani ya kielelezo cha herufi unaweza **ingiza mielekeo ya JS** kwa kutumia sintaksia ya `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
* **Ukodishaji wa Unicode** unafanya kazi kuandika **msimbo wa JS halali**:
```javascript
\u{61}lert(1)
\u0061lert(1)
\u{0061}lert(1)
```
#### Kukweka Javascript
Kukweka Javascript inahusu fursa ya **kutangaza kazi, mizani au darasa baada ya kutumiwa ili uweze kutumia hali ambapo XSS inatumia variables au functions ambazo hazijatangazwa.**\
**Angalia ukurasa ufuatao kwa maelezo zaidi:**
{% content-ref url="js-hoisting.md" %}
[js-hoisting.md](js-hoisting.md)
{% endcontent-ref %}
### Kazi ya Javascript
Kurasa kadhaa za wavuti zina **makutano ambayo hukubali kama parameta jina la kazi ya kutekeleza**. Mfano wa kawaida unaoweza kuonekana ni kama: `?callback=callbackFunc`.
Njia nzuri ya kugundua ikiwa kitu kilichotolewa moja kwa moja na mtumiaji kinajaribu kutekelezwa ni **kubadilisha thamani ya parameta** (kwa mfano kuwa 'Vulnerable') na kutazama kwenye konsoli kwa makosa kama:
![](<../../.gitbook/assets/image (651) (2).png>)
Ikiwa ni dhaifu, unaweza **kuzindua onyo** kwa kutuma thamani: **`?callback=alert(1)`**. Walakini, ni kawaida sana kwamba makutano haya yata **thibitisha maudhui** ili kuruhusu herufi, nambari, alama za mshale na mistari (**`[\w\._]`**).
Hata hivyo, hata na kizuizi hicho bado inawezekana kutekeleza baadhi ya vitendo. Hii ni kwa sababu unaweza kutumia herufi halali hizo kufikia kipengele chochote katika DOM:
![](<../../.gitbook/assets/image (662).png>)
Baadhi ya kazi muhimu kwa hili:
```
firstElementChild
lastElementChild
nextElementSibiling
lastElementSibiling
parentElement
```
Unaweza pia kujaribu **kuzindua kazi za Javascript** moja kwa moja: `obj.sales.delOrders`.
Walakini, kwa kawaida vituo vinavyotekeleza kazi iliyotajwa ni vituo bila DOM ya kuvutia sana, **kurasa nyingine katika asili ile ile** zitakuwa na **DOM yenye kuvutia zaidi** kufanya vitendo zaidi.
Kwa hivyo, ili **kutumia udhaifu huu katika DOM tofauti** ilitengenezwa unyanyasaji wa **utekelezaji wa Mbinu ya Asili Iliyofanana (SOME)**:
{% content-ref url="some-same-origin-method-execution.md" %}
[some-same-origin-method-execution.md](some-same-origin-method-execution.md)
{% endcontent-ref %}
### DOM
Kuna **msimbo wa JS** ambao unatumia **bila usalama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama vile `location.href`. Mshambuliaji, anaweza kutumia hii kutekeleza msimbo wa JS wa aina yoyote.
{% content-ref url="dom-xss.md" %}
[dom-xss.md](dom-xss.md)
{% endcontent-ref %}
### **Universal XSS**
Aina hii ya XSS inaweza kupatikana **mahali popote**. Hazitegemei tu unyanyasaji wa mteja wa programu ya wavuti bali kwenye **muktadha wowote**. Aina hii ya **utekelezaji wa JavaScript wa aina yoyote** inaweza hata kutumiwa kwa **RCE**, **kusoma** **faili za aina yoyote** kwenye wateja na seva, na zaidi.\
Baadhi ya **mfano**:
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
{% endcontent-ref %}
{% content-ref url="../../network-services-pentesting/pentesting-web/electron-desktop-apps/" %}
[electron-desktop-apps](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
{% endcontent-ref %}
## Kupitisha WAF kwa kuweka picha
![kutoka https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](../../.gitbook/assets/eaubb2ex0aerank.jpg)
## Kuingiza ndani ya HTML ghafi
Wakati matokeo yako yanarudishwa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza msimbo wa HTML katika muktadha huu, **jambo la kwanza** unalohitaji kufanya ni kuangalia ikiwa unaweza kutumia `<` kuunda vitambulisho vipya: Jaribu tu **kurudisha** **herufi** hiyo na uangalie ikiwa ina **kodishwa kwa HTML** au **kufutwa** au ikiwa ina **kurudishwa bila mabadiliko**. **Katika kesi ya mwisho tu utaweza kutumia udhaifu huu**.\
Kwa kesi hizi pia **kumbuka** [**Uingizaji wa Kigezo cha Upande wa Mteja**](../client-side-template-injection-csti.md)**.**\
_**Maelezo: Maoni ya HTML yanaweza kufungwa kwa kutumia**** ****`-->`**** ****au**** ****`--!>`**_
Katika kesi hii na ikiwa hakuna orodha nyeusi/orodha nyeupe inayotumiwa, unaweza kutumia mizigo kama:
```html