Xpath Enjeksiyonu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    r3dros
    r3dros's avatar
    Kayıt Tarihi: 17/Temmuz/2005
    Erkek

    Selam müridler Adsl kotamın sınırsız yaptım.. Bu bulmuş olduğum dökümanı sizlerle paylaşıyorum  bir zat kendim araştırdım... Ve sizlere sunuyorum ida ediyoruz müridler herkes sQL öğrenecek :)

    XPath enjeksiyonu, kullanıcı kaynaklı girdilerden Xpath sorguları oluşturan web sitelerini sömürmek için kullanılan bir tekniktir.

     

    Xpath 1.0 bir XML dökümanının parçalarını işaret etmek için kullanılabilir. Doğrudan uygulama tarafından bir XML dökümanını sorgulamak için kullanılabildiği gibi, XSTL dökümanının XML dökümanına dönüşümü veya XML dökümanına Xquery uygulanması gibi daha büyük bir işlemin parçası olarak da kullanılabilir.

     

    Xpath’in sözdizimi bir SQL sorgusunu andırır, ve aslında, Xpath kullanarak bir xml dökümanında SQL benzeri sorgular oluşturmak mümkündür. Örneğin, kullanıcı isimli bir elemanı olan bir XML dökümanı olsun, ve bütün bu kullanıcıların isim, parola ve hesap isimli 3 tane alt elemanı olsun. Takip eden Xpath ifadesi “jsmith” isimli ve “Demo1234” parolalı kullanıcının hesap numarasını verir. (veya böyle bir kullanıcı yoksa boş dize verir.)

     

    string(//user[isim/text()='jsmith' and parola/text()='Demo1234']/hesap/text())

     

    Eğer bir uygulama, Xpath sorgusunu yürütme esnasında oluşturuyorsa, sorguya güvenli olmayan kullanıcı girdisi gömerek sorguya veri enjekte edebilir ve yeni oluşan sorgu programcının isteğinin dışında çalışabilir.

     

    Örnek

    Düşünün ki bir web uygulaması bir XML dökümanına sorgu yapmak için Xpath kullanıyor ve ismi ve parolası girilen bir kullanıcının hesap numarasını getiriyor. Bu uygulama bu değerleri doğrudan Xpath sorgusunun içine gömebilir ve güvenlik açığı oluşturabilir.

     

    İşte bir örnek (Microsoft ASP.NET ve C# kullanılarak)

     

    XmlDocument XmlDoc = new XmlDocument();

    XmlDoc.Load("...");

     

    XPathNavigator nav = XmlDoc.CreateNavigator();

    XPathExpression expr = nav.Compile("string(//kullanıcı[name/text()='"+TextBox1.Text+"'

    and password/text()='"+TextBox2.Text+ "']/account/text())");

     

    String account=Convert.ToString(nav.Evaluate(expr));  

    if (account=="") {

                // name+password pair is not found in the XML document

                // login failed.

               

    } else {

                // account found -> Login succeeded.

                // Proceed into the application.

    }

     

    Bu kod kullanıldığında, bir saldırgan Xpath ifadeleri enjekte edebilir ve, örneğin, takip eden değeri kullanıcı adı olarak sağlayabilir.

     

     ' or 1=1 or ''='

     

    Bu orjinal Xpath in anlamının değişmesine, ve her zaman XML dökümanındaki ilk hesap numarasının dönmesine sebep olur. Bu durumda sorgu,

     

    string(//kullanıcı[isim/text()='' or 1=1 or ''='' and parola/text()='foobar']/hesap/text())

     

    Bu, (önermedeki eşitlik her zaman doğru olacağından), şununla eşdeğerdir:

     

    string(//kullanıcı/hesap/text())

     

    ve ilk //kullanıcı/hesap/text() örneğini döndürür.

     

    Bu yüzden, saldırı, doğru kullanıcı adı ve parolası girmediği halde saldırganı sisteme sokar (XML dökümanındaki ilk kullanıcı olarak).

     

Toplam Hit: 2112 Toplam Mesaj: 1