Translated ['src/hardware-physical-access/firmware-analysis/README.md',

This commit is contained in:
Translator 2025-08-13 22:35:39 +00:00
parent 71baee96ad
commit 0279374239
4 changed files with 222 additions and 29 deletions

View File

@ -769,6 +769,7 @@
- [Ret2vDSO](binary-exploitation/rop-return-oriented-programing/ret2vdso.md)
- [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md)
- [SROP - ARM64](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md)
- [Synology Encrypted Archive Decryption](hardware-physical-access/firmware-analysis/synology-encrypted-archive-decryption.md)
- [Array Indexing](binary-exploitation/array-indexing.md)
- [Chrome Exploiting](binary-exploitation/chrome-exploiting.md)
- [Integer Overflow](binary-exploitation/integer-overflow.md)

View File

@ -4,13 +4,19 @@
## **Giriş**
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.
### İlgili kaynaklar
{{#ref}}
synology-encrypted-archive-decryption.md
{{#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öneten temel bir 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.
## **Bilgi Toplama**
**Bilgi toplama**, bir cihazın yapısını ve kullandığı teknolojileri anlamanın kritik bir başlangıç adımıdır. Bu süreç, aşağıdaki verilerin toplanmasını içerir:
- Çalıştığı CPU mimarisi ve işletim sistemi
- CPU mimarisi ve çalıştığı işletim sistemi
- Bootloader ayrıntıları
- Donanım düzeni ve veri sayfaları
- Kod tabanı metrikleri ve kaynak konumları
@ -23,14 +29,14 @@ Bu amaçla, **açık kaynak istihbaratı (OSINT)** araçları çok değerlidir;
## **Firmware Edinme**
Firmware edinmek, her biri kendi karmaşıklık seviyesine sahip çeşitli yollarla gerçekleştirilebilir:
Firmware edinme, her biri kendi karmaşıklık seviyesine sahip çeşitli yollarla gerçekleştirilebilir:
- **Doğrudan** kaynaktan (geliştiriciler, üreticiler)
- Verilen talimatlardan **oluşturarak**
- Resmi destek sitelerinden **indirerek**
- Barındırılan firmware dosyalarını bulmak için **Google dork** sorguları kullanarak
- [S3Scanner](https://github.com/sa7mon/S3Scanner) gibi araçlarla **bulut depolama** alanlarına doğrudan erişerek
- Adam ortada teknikleriyle **güncellemeleri** yakalayarak
- Man-in-the-middle teknikleriyle **güncellemeleri** yakalayarak
- **UART**, **JTAG** veya **PICit** gibi bağlantılar aracılığıyla cihazdan **çıkararak**
- Cihaz iletişimi içinde güncelleme taleplerini **dinleyerek**
- **Sabit kodlu güncelleme uç noktalarını** tanımlayıp kullanarak
@ -60,7 +66,7 @@ Veya dosyayı incelemek için [**binvis.io**](https://binvis.io/#/) ([code](http
### Dosya Sistemini Alma
Daha önce bahsedilen araçlarla `binwalk -ev <bin>` kullanarak **dosya sistemini çıkarmış olmalısınız**.\
Önceki bahsedilen araçlarla `binwalk -ev <bin>` kullanarak **dosya sistemini çıkarmış olmalısınız**.\
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.
#### Manuel Dosya Sistemi Çıkartma
@ -91,7 +97,7 @@ Alternatif olarak, aşağıdaki komut da çalıştırılabilir.
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
- squashfs (yukarıdaki örnekte kullanılan)
- Squashfs için (yukarıdaki örnekte kullanılmıştır)
`$ unsquashfs dir.squashfs`
@ -101,11 +107,11 @@ Dosyalar daha sonra "`squashfs-root`" dizininde olacaktır.
`$ cpio -ivd --no-absolute-filenames -F <bin>`
- jffs2 dosya sistemleri için
- JFFS2 dosya sistemleri için
`$ jefferson rootfsfile.jffs2`
- NAND flash ile ubifs dosya sistemleri için
- NAND flash ile UBIFS dosya sistemleri için
`$ ubireader_extract_images -u UBI -s <start_offset> <bin>`
@ -117,7 +123,7 @@ Firmware elde edildikten sonra, yapısını ve potansiyel zayıflıklarını anl
### İ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:
İ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 ve dosya sistemi ayrıntılarını anlamaya yardımcı olur:
```bash
file <bin>
strings -n8 <bin>
@ -126,13 +132,13 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header
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.
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.
**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, **file-data-carving-recovery-tools** belgeleri ve dosya incelemesi için **binvis.io** gibi araçlar ve kaynaklar önerilir.
### Dosya Sistemini Çıkarma
`binwalk -ev <bin>` kullanarak, genellikle dosya sistemini çıkarmak mümkündür; bu genellikle dosya sistemi türüyle adlandırılan bir dizine (örneğin, squashfs, ubifs) çıkar. Ancak, **binwalk** sihirli baytların eksikliği nedeniyle dosya sistemi türünü tanımadığında, manuel çıkarma gereklidir. Bu, `binwalk` kullanarak dosya sisteminin ofsetini bulmayı ve ardından dosya sistemini çıkarmak için `dd` komutunu kullanmayı içerir:
`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 çıkarma gereklidir. Bu, `binwalk` kullanarak dosya sisteminin ofsetini bulmayı ve ardından dosya sistemini çıkarmak için `dd` komutunu kullanmayı içerir:
```bash
$ binwalk DIR850L_REVB.bin
@ -147,12 +153,12 @@ Dosya sistemi çıkarıldıktan sonra, güvenlik açıkları arayışına başla
**Ana konumlar** ve **incelemesi gereken öğeler** şunlardır:
- **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ı
- Daha fazla analiz için gömülü ikililer
- Yaygın IoT cihazı web sunucuları ve ikilileri
Dosya sistemi içindeki hassas bilgileri ve güvenlik açıklarını ortaya çıkarmaya yardımcı olan birkaç araç vardır:
Dosya sistemi içindeki hassas bilgileri ve güvenlik açıklarını ortaya çıkarmaya yardımcı olan birkaç araç bulunmaktadır:
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) ve [**Firmwalker**](https://github.com/craigz28/firmwalker) hassas bilgi arayışı için
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) kapsamlı firmware analizi için
@ -162,17 +168,17 @@ Dosya sistemi içindeki hassas bilgileri ve güvenlik açıklarını ortaya çı
Dosya sisteminde bulunan hem kaynak kodu hem de derlenmiş ikililer güvenlik açıklarıı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.
## Dinamik Analiz için Firmware Taklit Etme
## Dinamik Analiz için Firmware Emülasyonu
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ı 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.
### Bireysel İkilileri Taklit Etme
### Bireysel İkililerin Emülasyonu
Tek programları incelemek için, programın endianlığını ve CPU mimarisini belirlemek kritik öneme sahiptir.
#### MIPS Mimarisi ile Örnek
MIPS mimarisi ikilisini taklit etmek için şu komut kullanılabilir:
MIPS mimarisi ikilisini emüle etmek için şu komut kullanılabilir:
```bash
file ./squashfs-root/bin/busybox
```
@ -188,7 +194,7 @@ ARM ikili dosyaları için süreç benzerdir; emülasyon için `qemu-arm` emüla
### Tam Sistem Emülasyonu
[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](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) gibi araçlar, tam firmware emülasyonunu kolaylaştırarak süreci otomatikleştirir ve dinamik analize yardımcı olur.
## Pratikte Dinamik Analiz
@ -196,7 +202,7 @@ Bu aşamada, analiz için gerçek veya emüle edilmiş bir cihaz ortamı kullan
## Çalışma Zamanı Analiz Teknikleri
Çalışma zamanı analizi, gdb-multiarch, Frida ve Ghidra gibi araçlar kullanarak bir süreç veya ikili dosya ile işletim ortamında etkileşimde bulunmayı içerir; bu araçlar, kesme noktaları ayarlamak ve fuzzing gibi tekniklerle zafiyetleri tanımlamak için kullanılır.
Ç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.
## İkili İstismar ve Kanıt-of-Konsept
@ -225,7 +231,7 @@ Tipik saldırı iş akışı:
* Web UI, mobil uygulama API'si, 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.
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).
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, en son görüntüyü tekrar flaşlayın veya kalıcılık sağlandıktan sonra tespiti önlemek için güncellemeleri devre dışı bırakın.
### Örnek: Geri Alma Sonrası Komut Enjeksiyonu
```http
@ -246,11 +252,11 @@ firmware_v1.3.11.490_signed.bin
```
### 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)?
* *güncelleme uç noktası* yeterince korunmuş mu (TLS + kimlik doğrulama)?
* Cihaz, flaşlamadan önce **sürüm numaralarını** veya **monotonik geri alma sayacını** 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)?
* Kullanıcı alanı kodu ek güvenlik kontrolleri yapıyor mu (örneğin, izin verilen bölüm haritası, model numarası)?
* *Kısmi* veya *yedek* güncelleme akışları aynı doğrulama mantığını yeniden kullanıyor mu?
* *kısmi* veya *yedek* güncelleme akışları 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.

View File

@ -0,0 +1,162 @@
# Synology PAT/SPK Şifreli Arşiv Şifre Çözme
{{#include ../../banners/hacktricks-training.md}}
## Genel Bakış
Birçok Synology cihazı (DSM/BSM NAS, BeeStation, …) yazılım ve uygulama paketlerini **şifreli PAT / SPK arşivleri** içinde dağıtır. Bu arşivler, resmi çıkarım kütüphanelerine gömülü olan sabit anahtarlar sayesinde yalnızca kamuya açık indirme dosyaları ile *çevrimdışı* olarak şifresi çözülebilir.
Bu sayfa, şifreli formatın nasıl çalıştığını ve her paketin içinde bulunan açık metin **TAR** dosyasının nasıl tamamen geri kazanılacağını adım adım belgeler. Prosedür, Pwn2Own İrlanda 2024 sırasında gerçekleştirilen Synacktiv araştırmasına dayanmaktadır ve açık kaynaklı araç [`synodecrypt`](https://github.com/synacktiv/synodecrypt) içinde uygulanmıştır.
> ⚠️ Format, `*.pat` (sistem güncellemesi) ve `*.spk` (uygulama) arşivleri için tam olarak aynıdır yalnızca seçilen sabit anahtar çiftlerinde farklılık gösterir.
---
## 1. Arşivi Al
Yazılım/uygulama güncellemesi genellikle Synologynin kamu portalından indirilebilir:
```bash
$ wget https://archive.synology.com/download/Os/BSM/BSM_BST150-4T_65374.pat
```
## 2. PAT yapısını dökme (isteğe bağlı)
`*.pat` görüntüleri, birkaç dosyayı (önyükleme yükleyici, çekirdek, rootfs, paketler…) içeren bir **cpio paketi**dir. Bu sarmayı incelemek için ücretsiz araç [`patology`](https://github.com/sud0woodo/patology) kullanışlıdır:
```bash
$ python3 patology.py --dump -i BSM_BST150-4T_65374.pat
[…]
$ ls
DiskCompatibilityDB.tar hda1.tgz rd.bin packages/ …
```
For `*.spk` doğrudan 3. adıma geçebilirsiniz.
## 3. Synology çıkarım kütüphanelerini çıkarın
Gerçek şifre çözme mantığı şunlarda bulunur:
* `/usr/syno/sbin/synoarchive` → ana CLI sarmalayıcı
* `/usr/lib/libsynopkg.so.1` → DSM UI'den sarmalayıcıyı çağırır
* `libsynocodesign.so` → **kriptografik uygulamayı içerir**
Her iki ikili dosya da sistem rootfs (`hda1.tgz`) **ve** sıkıştırılmış init-rd (`rd.bin`) içinde mevcuttur. Eğer sadece PAT'iniz varsa, bunları bu şekilde alabilirsiniz:
```bash
# rd.bin is LZMA-compressed CPIO
$ lzcat rd.bin | cpio -id 2>/dev/null
$ file usr/lib/libsynocodesign.so
usr/lib/libsynocodesign.so: ELF 64-bit LSB shared object, ARM aarch64, …
```
## 4. Hard-coded anahtarları geri al (`get_keys`)
`libsynocodesign.so` içinde `get_keys(int keytype)` fonksiyonu, istenen arşiv ailesi için iki 128-bit global değişkeni basitçe döndürür:
```c
case 0: // PAT (system)
case 10:
case 11:
signature_key = qword_23A40;
master_key = qword_23A68;
break;
case 3: // SPK (applications)
signature_key = qword_23AE0;
master_key = qword_23B08;
break;
```
* **signature_key** → Arşiv başlığını doğrulamak için kullanılan Ed25519 genel anahtarı.
* **master_key** → Her arşiv için şifreleme anahtarını türetmek için kullanılan kök anahtar.
Her DSM ana sürümü için bu iki sabiti yalnızca bir kez dökmeniz gerekir.
## 5. Başlık yapısı & imza doğrulama
`synoarchive_open()``support_format_synoarchive()``archive_read_support_format_synoarchive()` aşağıdakileri gerçekleştirir:
1. Magic (3 bayt) `0xBFBAAD` **veya** `0xADBEEF` okuyun.
2. Küçük sonlu 32-bit `header_len` okuyun.
3. `header_len` baytını + sonraki **0x40-bayt Ed25519 imzasını** okuyun.
4. `crypto_sign_verify_detached()` başarılı olana kadar tüm gömülü genel anahtarlar üzerinde yineleyin.
5. **MessagePack** ile başlığı çözün, sonuç:
```python
[
data: bytes,
entries: [ [size: int, sha256: bytes], … ],
archive_description: bytes,
serial_number: [bytes],
not_valid_before: int
]
```
`entries`, daha sonra libarchive'ın her dosyayı şifresi çözülürken bütünlüğünü kontrol etmesine olanak tanır.
## 6. Arşiv başına alt anahtarı türetin
MessagePack başlığında bulunan `data` blob'undan:
* `subkey_id` = little-endian `uint64` 0x10 ofsetinde
* `ctx` = 0x18 ofsetinde 7 bayt
32 baytlık **stream key**, libsodium ile elde edilir:
```c
crypto_kdf_derive_from_key(kdf_subkey, 32, subkey_id, ctx, master_key);
```
## 7. Synologynin özel **libarchive** arka ucu
Synology, sihirli değer `0xADBEEF` olduğunda sahte bir "tar" formatı kaydeden yamanmış bir libarchive paketler:
```c
register_format(
"tar", spk_bid, spk_options,
spk_read_header, spk_read_data, spk_read_data_skip,
NULL, spk_cleanup, NULL, NULL);
```
### spk_read_header()
```
- Read 0x200 bytes
- nonce = buf[0:0x18]
- cipher = buf[0x18:0x18+0x193]
- crypto_secretstream_xchacha20poly1305_init_pull(state, nonce, kdf_subkey)
- crypto_secretstream_xchacha20poly1305_pull(state, tar_hdr, …, cipher, 0x193)
```
Şifrelenmemiş `tar_hdr`, **klasik POSIX TAR başlığıdır**.
### spk_read_data()
```
while (remaining > 0):
chunk_len = min(0x400000, remaining) + 0x11 # +tag
buf = archive_read_ahead(chunk_len)
crypto_secretstream_xchacha20poly1305_pull(state, out, …, buf, chunk_len)
remaining -= chunk_len - 0x11
```
Her **0x18-byte nonce** şifreli parçanın önüne eklenir.
Tüm girişler işlendiğinde, libarchive herhangi bir standart araçla açılabilen tamamen geçerli bir **`.tar`** dosyası üretir.
## 8. Her şeyi synodecrypt ile şifre çözün
```bash
$ python3 synodecrypt.py SynologyPhotos-rtd1619b-1.7.0-0794.spk
[+] found matching keys (SPK)
[+] header signature verified
[+] 104 entries
[+] archive successfully decrypted → SynologyPhotos-rtd1619b-1.7.0-0794.tar
$ tar xf SynologyPhotos-rtd1619b-1.7.0-0794.tar
```
`synodecrypt` otomatik olarak PAT/SPK'yı tespit eder, doğru anahtarları yükler ve yukarıda açıklanan tam zinciri uygular.
## 9. Yaygın tuzaklar
* `signature_key` ve `master_key`'i **değiştirmeyin** farklı amaçlara hizmet ederler.
* **nonce**, her blok (başlık ve veri) için şifreli metinden *önce* gelir.
* Maksimum şifreli parça boyutu **0x400000 + 0x11**'dir (libsodium etiketi).
* Bir DSM nesli için oluşturulan arşivler, bir sonraki sürümde farklı sabit anahtarlara geçebilir.
## 10. Ek araçlar
* [`patology`](https://github.com/sud0woodo/patology) PAT arşivlerini ayrıştırma/dökme.
* [`synodecrypt`](https://github.com/synacktiv/synodecrypt) PAT/SPK/diğerlerini şifre çözme.
* [`libsodium`](https://github.com/jedisct1/libsodium) XChaCha20-Poly1305 secretstream için referans uygulaması.
* [`msgpack`](https://msgpack.org/) başlık serileştirmesi.
## Referanslar
- [Synology şifreli arşivlerinin çıkarılması Synacktiv (Pwn2Own IE 2024)](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
- [synodecrypt GitHub'da](https://github.com/synacktiv/synodecrypt)
- [patology GitHub'da](https://github.com/sud0woodo/patology)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,16 +1,16 @@
# Komut Enjeksiyonu
# Command Injection
{{#include ../banners/hacktricks-training.md}}
## Komut Enjeksiyonu Nedir?
## Command Injection Nedir?
Bir **komut enjeksiyonu**, bir saldırganın bir uygulamayı barındıran sunucuda rastgele işletim sistemi komutlarını çalıştırmasına izin verir. Sonuç olarak, uygulama ve tüm verileri tamamen tehlikeye girebilir. Bu komutların yürütülmesi genellikle saldırgana uygulamanın ortamına ve temel sisteme yetkisiz erişim veya kontrol sağlama imkanı tanır.
Bir **command injection**, bir saldırganın bir uygulamayı barındıran sunucuda rastgele işletim sistemi komutlarını çalıştırmasına izin verir. Sonuç olarak, uygulama ve tüm verileri tamamen tehlikeye girebilir. Bu komutların yürütülmesi genellikle saldırgana uygulamanın ortamına ve temel sisteme yetkisiz erişim veya kontrol sağlama imkanı tanır.
### Bağlam
**Girdiğiniz yerin nereye enjekte edildiğine** bağlı olarak, komutlardan önce **alıntı yapılan bağlamı sonlandırmanız** gerekebilir ( `"` veya `'` kullanarak).
## Komut Enjeksiyonu/Yürütme
## Command Injection/Yürütme
```bash
#Both Unix and Windows supported
ls||id; ls ||id; ls|| id; ls || id # Execute both
@ -45,7 +45,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
```
### Parametreler
İşte kod enjeksiyonuna ve benzeri RCE zafiyetlerine karşı savunmasız olabilecek en iyi 25 parametre (from [link](https://twitter.com/trbughunters/status/1283133356922884096)):
İşte kod enjeksiyonuna ve benzer RCE zafiyetlerine karşı savunmasız olabilecek en iyi 25 parametre (from [link](https://twitter.com/trbughunters/status/1283133356922884096)):
```
?cmd={payload}
?exec={payload}
@ -89,7 +89,7 @@ sys 0m0.000s
```
### DNS tabanlı veri sızdırma
`https://github.com/HoLyVieR/dnsbin` adresindeki araca dayanmaktadır, ayrıca dnsbin.zhack.ca adresinde de barındırılmaktadır.
`https://github.com/HoLyVieR/dnsbin` adresindeki araç temel alınarak, ayrıca dnsbin.zhack.ca'da barındırılmaktadır.
```
1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls'
@ -117,6 +117,28 @@ powershell C:**2\n??e*d.*? # notepad
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
### Node.js `child_process.exec` vs `execFile`
JavaScript/TypeScript arka uçlarını denetlerken sıklıkla Node.js `child_process` API'si ile karşılaşacaksınız.
```javascript
// Vulnerable: user-controlled variables interpolated inside a template string
const { exec } = require('child_process');
exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(payload)}'`, (err, stdout) => {
/* … */
});
```
`exec()` bir **shell** (`/bin/sh -c`) başlatır, bu nedenle kullanıcı girişi dizeye eklendiğinde shell için özel bir anlamı olan herhangi bir karakter (back-ticks, `;`, `&&`, `|`, `$()`, …) **komut enjeksiyonu** ile sonuçlanacaktır.
**Azaltma:** `execFile()` (veya `shell` seçeneği olmadan `spawn()`) kullanın ve **her bir argümanı ayrı bir dizi elemanı olarak** sağlayın, böylece hiçbir shell dahil edilmez:
```javascript
const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [
'--id_user', id_user,
'--payload', JSON.stringify(payload)
]);
```
Gerçek dünya vakası: *Synology Photos* ≤ 1.7.0-0794, saldırganın kontrolündeki verileri `id_user` içine yerleştiren kimlik doğrulaması yapılmamış bir WebSocket olayı aracılığıyla istismar edilebiliyordu; bu veriler daha sonra bir `exec()` çağrısına gömüldü ve RCE elde edildi (Pwn2Own İrlanda 2024).
## Brute-Force Tespit Listesi
{{#ref}}
@ -125,7 +147,9 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject
## Referanslar
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
- [Extraction of Synology encrypted archives Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
{{#include ../banners/hacktricks-training.md}}