XPath Injection
Veriler veritabanı yerine XML içerisinde tutuluyor olabilir. XML için kullanılan sorgu dilinin adı Xpath’dir. XPath, XML verilerini parçalar ve bunları DOM nesnesine çevirir. XPath sorguları manipüle ederek XML içerisindeki verilere ulaşabiliriz.
Alınan kullanıcı isminin kontrol edilmeden sorgu içerisinde kullanıldığını düşünelim;$xml->xpath("//uye[kullanici/text()="'.$kullanici.'"]");
Şimdi sorguyu bozacak şekilde girdi verelim,->xpath("//uye[kullanici/text()='isim' and 1='1']");
Bu şekilde denemeler yapıp sorguyu aşmaya çalışalım. Fakat kullanılan sorgu dilini bilmiyoruz. Bunu xpath dilindeki position() fonksiyonunu kullanarak öğrenebiliriz. Dili öğrenirsek dilin yapısına göre hareket ederiz.
Deneyelim,->xpath("//uye[kullanici/text()='isim' or position()='1']");
Eğer Xpath dili olduğunu doğrulayabildiysek, artık Xpath dilindeki komutları kullanarak veri çekebiliriz demektir.
Daha detaylı bilgi için: (http://ha.cker.io/dc48119080fa36fa74a10787045eea2e)
XPath Injection Saldırılarından Nasıl Korunabiliriz?
XML ile veri tutmak artık çok sık kullanılan bir yöntem değildir. Mümkünse XML kullanmayın. Bu zafiyet türü için Json kullanılabilir.