Metin alanına “127.0.0.1” gibi bir IP girildiğinde, ping işlemi sonucun ekrana basıldığı görülmektedir.
127.0.0.1
Bunun yanında 2 komutu ardışık olarak çalıştırmak için “;” kullanıldığında ise hedef işletim sisteminde belirtilen komutların çalıştırılabildiği görülmektedir.
127.0.0.1; id
“;” ile birden fazla komut çalıştırılabildiği gibi “|” (pipe) kullanılarak da sol taraftaki ifadelerin çıktılarının sağ tarafa verilmesi sağlanabilir.
127.0.0.1 | id
“;” ile benzer olarak; “&&” kullanılarak birden fazla komutun çalıştırıldığı da görülmektedir.
; id && uname -a ; head -5 /etc/shadow ; tail -5 /etc/passwd
Not: Uygulama kullanıcısının (www-data) yetkisi olmadığı için “/etc/shadow” dosyasının okunamadığı ve herhangi bir hata mesajı ile karşılaşılmadığı da görülmektedir.
Zafiyete sebep olan kod parçacığı aşağıdaki gibidir. Herhangi bir girdi kontrolü yapılmadığı için işletim sistemi seviyesinde kod çalıştırılabilmiş oldu.
$target = $_REQUEST[ ‘ip’ ];
$cmd = shell_exec( ‘ping -c 3 ‘ . $target );
echo ‘<pre>’.$cmd.'</pre>’;
Not: OWASP DVWA’da bir uygulama zafiyeti başlığı altında birden fazla zafiyet de bulunabilmektedir. İşletim sisteminde çalışan komutun çıktısının ekrana basılması sırasında, XSS zafiyetinin olduğu da görülmektedir.
; echo “<script> alert(‘XSS de var’)</script>”
İlgili Kaynak Kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php if( isset( $_POST[ 'submit' ] ) ) { $target = $_REQUEST[ 'ip' ]; // Determine OS and execute the ping command. if (stristr(php_uname('s'), 'Windows NT')) { $cmd = shell_exec( 'ping ' . $target ); echo '<pre>'.$cmd.'</pre>'; } else { $cmd = shell_exec( 'ping -c 3 ' . $target ); echo '<pre>'.$cmd.'</pre>'; } } ?> |