Hoşgeldin Misafir

Blind XPath Injection Nedir Nasil Önlenir.

Security

25 Ağu 2017
894 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Web uygulamaları, kullanım durumlarına bağlı olarak çeşitli şekillerde ve formlarda veri depolar ve bunlara erişir. -Tarihsel olarak, ilişkisel veritabanları, diğer veri tabanları arasında büyük miktarda veri depolamak için popüler bir seçim olmuştur. -Ancak, veri depolamak için XML kullanımına doğru yükselen bir eğilim vardır. -XML kullanıldığında veriler iç içe bir yapıda sütunlar ve satırlar yerine dizin biçiminde depolanır. -Bunun birçok dezavantajı vardır, ancak yapılandırma ayarları gibi statik veriler için kullanılabilir. -Bunun nedeni, bu tür statik verilerin XML veritabanlarında çok yavaş okuma / yazma işlemlerini gerektirmesidir.

-[font=medium-content-serif-font, Georgia, Cambria,]XPath nedir?

XML'de depolanan veriler, kavramsal olarak SQL'e benzer olan XPath üzerinden sorgulanabilir. Aynı zamanda bir sorgu dilidir ve bir XML belgesindeki belirli öğeleri bulmak için kullanılır. Erişim seviyesi izni yoktur ve veritabanlarının, tabloların veya sütunların kısıtlanmasına izin veren SQL'den farklı olarak bir XML belgesinin ----hemen hemen herhangi bir kısmında rastlamak mümkündür--.--


[font=medium-content-serif-font, Georgia, Cambria,]XPath Enjeksiyonu Nedir?

XML kullanarak veri depolanırken ortaya çıkabilecek sorunlar da SQL'de karşılaşılan sorunlara benzer. XPath Injection, kötü niyetli bir girişin XML belgesinin yapısı ve içeriği gibi hassas bilgilerin yetkisiz erişime veya maruz kalmasına neden olabileceği bir tür saldırıdır. Sorgu dizesinin yapımında kullanıcının girişi kullanıldığında ortaya çıkar. Bir SQL Injection saldırısında kullanılabilecek çok sayıda teknik, hedef veritabanı tarafından kullanılan SQL lehçesinin özelliklerine bağlıyken, XPath enjeksiyon saldırıları çok daha uyarlanabilir ve her yerde bulunabilir.
--

-[font=medium-content-serif-font, Georgia, Cambria,]Aşağıdaki senaryoyu inceleyin:
Bir web sitesi, kullanıcıların kimlik bilgilerini ve diğer bilgileri depolamak için XML kullanır. XML belgesi aşağıdaki gibidir:
--
--

Kod:
<?xml version=”1.0" encoding="utf-8"?>
<Employees>
 <Employee ID="1">
 <Name>Sam</Name>
 <UserName>Johns</UserName>
 <Password>This is Secret</Password>
 </Employee>
 <Employee ID="2">
 <Name>Peter</Name>
 <UserName>Pan</UserName>
 <Password>Ssssshh</Password>
 </Employee>
</Employee

-[font=medium-content-serif-font, Georgia, Cambria,]Web sitesine giriş yapmak için kullanıcı, kullanıcı adı ve şifreyi girer. --[font=medium-content-serif-font, Georgia, Cambria,]Bu nedenle, verileri sorgulamak için oluşturulan XPath sorgusu aşağıdaki gibi olacaktır:
--
--

Kod:
"//Employee[UserName/text()='" & Request("UserName") & "' And Password/text()='" & Request("Password") & "']"

[font=medium-content-serif-font, Georgia, Cambria,]Kullanıcı adı olarak hatalı bir veri yükü eklersek, oluşturulan XPath sorgusu aşağıdaki gibi olur:
--

Kod:
Username : test' or 1=1 or 'a'='a 
Password : testXPath Query: 
//Employee[UserName/text()='test' or 1=1 or 'a'='a' And Password/text()='test']This is equivalent to:
//Employee[(UserName/text()='test' or 1=1) or ('a'='a' And Password/text()='test')]

[font=medium-content-serif-font, Georgia, Cambria,]Böylece, sorgunun ilk kısmı gerçek olur ve ikinci kısmı ihmal edilir. Parola alakasız hale gelir ve saldırgan web sitesine yetkisiz erişim sağlar.--

[font=medium-content-serif-font, Georgia, Cambria,]Yukarıdaki örneğe ek olarak , genel olarak Kör XPath Enjeksiyonu olarak adlandırılan XML belgesinin tamamını B oolenization ve XMLCrawling ile almak da mümkündür . Saldırgan web sitesine başarılı bir şekilde giriş yaptığında sunucu True , başarısızlık durumunda False'ye döndürür . Çeşitli XPath alt fonksiyonlarını kullanarak XML belgesindeki verileri tanımlayarak, düğüm sayısını tespit etmek mümkündür. Alt fonksiyonların bazıları aşağıdaki gibidir:--


PHP:
Returns the number of nodes:
count(//user/child::node()Checks if the password node has 6 characters
string-length(//user[position()=1]/child::node()[position()=3])=6



  • (') gibi kullanıcı girişinin sterilize edilmesi gerekiyor, “&” ile değiştirilebilir . Doğrulamanın hem istemci hem de sunucu tarafında eklenmesi gerekir.Sorguların önceden derlendiği ve kullanıcı girişinin ifadeler yerine parametreler olarak iletildiği parametreleştirilmiş sorguları (SQL'de Hazırlanmış İfadeler gibi) kullanabiliriz.
PHP:
"//users[LoginID/text()= $LoginID and passwd/text()= $password]"

[font=medium-content-serif-font, Georgia, Cambria,]-[font=medium-content-serif-font, Georgia, Cambria,]Security Tarafından: Bu makalede yayınlanan bilgiler yalnızca eğitim amaçlıdır. Bu makalenin içeriği benim kişisel öğrenme ve deneyimime dayanıyor. Herhangi bir bilginin yanlış kullanılması yazarın sorumluluğunda değildir.----