15 Ağustos 2019 Perşembe

Blind XPath Injection Nedir?



Açıklama



XPath, bir XML belgesinde belirli öğelerin (öznitelikler, işlem yönergeleri vb. Dahil) nasıl konumlandırılacağını tanımlayan bir sorgu dili türüdür. Sorgu dili olduğundan XPath, Structured Query Language (SQL) 'e biraz benzemektedir, ancak XPath, erişim kontrolü kısıtlamaları olmadan bir XML belgesinin hemen hemen herhangi bir bölümüne başvuruda bulunmak için kullanılabileceğinden farklıdır. SQL'de bir "kullanıcı" (XPath / XML bağlamında tanımlanmayan bir terimdir) belirli veritabanlarına, tablolara, sütunlara veya sorgulara sınırlandırılabilir. Bir saldırgan, bir XPATH Enjeksiyon saldırısı kullanarak, kendi seçimini yapması için XPATH sorgusunu değiştirebilir.



Kör XPath Enjeksiyon saldırıları, kullanıcı tarafından sağlanan verileri güvenli olmayan bir biçimde içine alan bir uygulamadan veri çıkarmak için kullanılabilir. Giriş düzgün bir şekilde sterilize edilmediğinde, saldırgan yürütülen geçerli XPath kodunu sağlayabilir. Bu tür saldırılar, saldırganın XML dokümantasyonunun yapısı hakkında bilgisi olmadığı veya belki de hata mesajının bastırıldığı ve gerçek / yanlış sorular sorarak bir seferde yalnızca bir kez bilgi alabileceği durumlarda kullanılır. booleanized sorguları), Blind SQL Injection gibi.



Örnekler



Saldırgan, iki yöntem kullanarak başarılı bir saldırı kurabilir: Boolenization ve XML Crawling. XPath sözdizimine ekleyerek, saldırgan ek ifadeler kullanır (saldırganın enjeksiyon yerine ne girdiğini değiştirerek).



Boolenization



"Boolenization" yöntemini kullanarak saldırgan, verilen XPath ifadesinin Doğru mu, Yanlış mı olduğunu öğrenebilir. Saldırganın amacının bir web uygulamasında bir hesaba giriş yapmak olduğunu varsayalım. Başarılı bir oturum açma "Doğru", başarısız oturum açma girişimi "Yanlış" döndürür. Bilginin sadece küçük bir kısmı analiz edilen karakter veya sayı ile hedeflenir. Saldırgan bir dizgiye odaklandığında, bu dizginin ait olduğu karakter sınıfı / karakter aralığı içindeki her bir karakteri kontrol ederek bütünüyle açığa çıkarabilir.





Saldırgan, S'nin bir dize olduğu bir dize uzunluğu (S) işlevi kullanarak, saldırgan bu dizenin uzunluğunu bulabilir. Uygun sayıda alt dizgi (S, N, 1) işlev yinelemeleriyle, burada S, daha önce belirtilen bir dizedir, N, bir başlangıç ​​karakteridir ve "1", N karakterinden sayılan bir sonraki karakterdir, saldırgan, numaralandırmayı yapabilir. tüm dize.



Kod:
<?xml version="1.0" encoding="UTF-8"?>
<data>
   <user>
   <login>admin</login>
   <password>test</password>
   <realname>SuperUser</realname>
   </user>
   <user>
   <login>rezos</login>
   <password>rezos123</password>
   <realname>Simple User</realname>
   </user>
</data

Foksiyon:
string.stringlength(//user[position()=1]/child::node()[position()=2]) returns the length of the second string of the first user (8),
substring((//user[position()=1]/child::node()[position()=2),1,1) returns the first character of this user ('r').

XML tarama

XML belge yapısını tanımak için saldırganın kullanabileceği:
sayısı (ifade)

Kod:
count(//user/child::node()

Bu, düğüm sayısını döndürür (bu durumda 2).
dize uzunluğu (string)

Kod:
string-length(//user[position()=1]/child::node()[position()=2])=6

Bu sorguyu kullanarak saldırgan, ilk düğümün (user 'admin') ikinci dizesinin (parola) 6 karakterden oluşup oluşmadığını öğrenir.
alt dize (dize, sayı, sayı)

Kod:
substring((//user[position()=1]/child::node()[position()=2]),1,1)="a"

Bu sorgu, kullanıcının ('admin') şifresinin ilk karakterinin "a" karakteri olduğunu onaylar (Doğru) veya reddeder (Yanlış).
Giriş formu şöyle görünürse:

C#:

Kod:
String FindUser;
FindUser = "//user[login/text()='" + Request("Username") + "' And
      password/text()='" + Request("Password") + "']";
  
  
  Kod:
Username: ' or substring((//user[position()=1]/child::node()[position()=2]),1,1)="a" or ''='

XPath sözdizimi size yaygın SQL Injection saldırılarını hatırlatabilir, ancak saldırgan bu dilin ifadenin geri kalan kısmını yorumlamalarına izin vermediğini düşünmelidir. Bu sınırlandırmayı atlamak için saldırganın, saldırıyı bozabilecek tüm ifadeleri susturmak için OR ifadeleri kullanması gerekir.
Boolenization nedeniyle, sorguların sayısı, küçük bir XML belgesinde bile, çok yüksek olabilir (binlerce, yüz binlerce ve daha fazlası). Bu saldırı bu yüzden elle yapılmıyor. Birkaç temel XPath işlevini bilen saldırgan, kısa sürede bir dokümanın yapısını yeniden oluşturacak ve bunu kendi başına verilerle dolduracak bir uygulama yazabilir.

Kaynak: OWASP


0 comentários:

Yorum Gönder