Salam bügün sizə XPATH injection haqda qısa məlumat vermək istərdim(versiya 1-ə aiddir dərslik).Görörəm ki , bu haqda userlərimiz çox az məlumaata sahibdir və qərara gəldim belə bir kiçik tutorial hazırlamağa.(Əslində bu tam deyil.Müəyyən qədər sizə məlumat vermək üçün yazdım.)
Keçək tutoriala..
Deməli müasir vebdə məlumatlar bir çox üsulla saxlamaq mümkündür.Ən çox istifadə olunan metod isə məlumatları təbii olaraq database(məlumatlar bazası)-də saxlamaqdır.Amma digər variantlarda mövcüddür(LDAP və XML).
XML = Extensible Markup Language adı altında fəaliyyət göstərir.Xml üstün cəhəti isə strukturanı istədiyin kimi qurmaqdır. Xml daha çox RDBMS oxşardır.
Databasedə datalar table row və columlarda saxlanılır.Amma xmldə isə bu sanki ağaca bənzər bir şəkildə olur.(biologiyaya keçmədən sohbəti dəyişim )
Xpath injection isə sql injectiona çox oxşuyur.Burada da əsas məqsəd XML bazadan sensitive məlumatları çəkməkdir.İki cür attack movcüddür:Auth bypass və Extracting.Bunu ilk dəfə səhv etmirəmsə Amit Klein tapıb( Respect ! )
Misal olaraq dərsə uyğun bir xml yaratdım mən və aşağıdakı kodları user.xml adı altında yaddaşa vurun.
Bəli xml database hazırdır və onu da qeydd edimki bazadakı nodes adlandırdığımız hissələr case sensitive dir.yəni biri <pentest_user> belə olub digəri <Pentest_user> belə olmaz.
Sonra digər faylımızı index.php adı altında qeyd edin.(Qeyd vaxt itirməmək üçün sessiya-lı scipt hazırlamadım.Hər dəfə refresh olanda yenə form açılacaq.)
Bizim xpath query miz = (//pentest_user[username/text()='".$u."' and password/text()='".$p."']/account/text())
İndi isə sizə vulnun nədən qaynaqlandığını deyim:
Yuxarıda fikir verdizsə Post methoddan gələn value sanitizə olunmadan birbaşa query yə daxil edilir və nəticədə injection yaranır..Explotasiyanı Diqqətlə izləyin...
Sonrakı iş isə hədəf sistemə daxil olmaqdır..Aşağıdakı payload useri dəqiq bildikdə exploitləmək üçündür.User bilinməyəndə nə etmək lazımdır onu da göstərəcəm..
Və yuxarıdakı şəkildən gördüyünüz kimi daxil olduq.Bəs birdən user bilinməsə nə edə billərik?
Onda complex payload yaratmalıyıq..Diqqətlə baxın..
username: 'or '1'='1' or '1'='1
password: nə istəseən(amma yazmaq vacibdir!)
və Owned
Burda nə etdik?? Biz məntiqi operator olan or dan 2 dəfə istifadə etdik və queryni modifikasiya etdik .Belə bir şey oldu :
False or (True) or (True) and (False və ya True)
Nəticə true oldu və auth bypasslandı.
Belə..Ümid edirəm bəyəndiniz..Nəsə əskiklik olsa bildirsəniz sevinərəm..
P.S Bu məqalə mənə aiddir və məndən icazəsiz ya dakı müəllif adı yazılmaqla paylaşıla bilər.
Vətən Sağ olsun!
Duman salamat qal, Dağ salamat qal..