Məlumat ötürmək üçün istifadə olunan XML formatı, düzgün tənzimlənmədikdə ciddi təhlükəsizlik boşluqlarına yol açır. Bu məqalədə XML-in daxili strukturu olan DTD və Entity anlayışlarını incələyəcək, bu mexanizmlərdən istifadə edərək sistem fayllarının necə sızdırıldığını (XXE) və daxili şəbəkələrə necə sızıldığını (SSRF) praktiki nümunələrlə görəcəyik.
XML (eXtensible Markup Language) nədir harda istifadə olunur?
XML, məlumatları həm insanların, həm də kompüterlərin rahat oxuya biləcəyi formada saxlamaq və ötürmək üçün istifadə olunan işarələmə dilidir. Əsasən banklar və dövlət saytları kimi təhlükəsizliyin vacib olduğu yerlərdə məlumatları bir serverdən digərinə ötürmək üçün istifadə olunur.

Document type definition (DTD)
DTD, XML faylının hansı teqlərdən və quruluşdan ibarət olacağını təyin edən, həm sənədin daxilində, həm də xaricində yerləşə bilən rəsmi qaydalar toplusudur. Bu sistem məlumatların vahid standartda qalmasını təmin edərək, kənar və ya yanlış teqlərin daxil edilməsinin qarşısını alan bir növ “nəzarətçi” funksiyasını yerinə yetirir.

Bu ümumi bir xml kod blokudur, DTD ise sənədin yuxarı hissəsində, <!DOCTYPE ilə başlayan və daxilində sənədin qaydalarının (hansı teqlərin olacağının) təyin edildiyi hissədir. Bu hissə ayrıca bir oxla vurğulanmışdır.
XML entities nədir və növləri?
XML Entity (Varlıq), XML sənədi daxilində uzun bir mətni, xüsusi simvolu və ya xarici faylı təmsil edən qısayol kimidir. Bir növ proqramlaşdırmadakı “dəyişən” (variable) məntiqi ilə işləyir
İki növü var:
- Custom entities
- External entities (XXE)
1. Custom entities
XML xüsusi obyektlərin DTD daxilində təyin olunmasına imkan verir.

- Təyin etmə (Declaration): <!ENTITY myentity “my entity value” > hissəsi ilə sən sistemə deyirsən ki: “Bundan sonra myentity adında bir qısayolum var və onun mətni my entity value olsun”.
- İstifadə (Reference): XML-in içində hardasa &myentity; yazsan, sistem onu oxuyanda avtomatik silib yerinə my entity value qoyacaq.
2. External entities
External Entities, dəyəri XML sənədinin özündən deyil, kənardakı bir fayldan və ya URL-dən gələn dəyişənlərdir.

- SYSTEM açar sözü: Bu söz sistemə deyir ki: “Bu məlumat burada deyil, get kənardan tap gətir”.
- URL/Yol: SYSTEM sözündən sonra məlumatın haradan tapılacağı (məsələn: bir fayl yolu və ya veb link) yazılır.
Exploit edilməsi
Serverdən hər hansı bir faylı ələ keçirmək üçün XXE hücumunu yerinə yetirərkən, göndərilən XML üzərində bu iki dəyişikliyi etməlisən:
- DOCTYPE elementini daxil et (və ya redaktə et): Burada oxumaq istədiyin faylın yolunu göstərən bir xarici entity (external entity) təyin edirsən.
- XML-dəki məlumat dəyərini dəyişdir: Tətbiqin sənə qaytardığı cavabın içərisində həmin təyin etdiyin entity-dən istifadə edirsən ki, faylın məzmunu ekranda görünsün.
Məsələn, təsəvvür edək ki, bir alış-veriş tətbiqi məhsulun stok səviyyəsini yoxlamaq üçün serverə aşağıdakı XML-i göndərir:

Tətbiq XXE hücumlarına qarşı heç bir xüsusi müdafiə tədbiri görmədiyi üçün, aşağıdakı XXE payloyadını (yükünü) göndərərək /etc/passwd faylını ələ keçirmək üçün XXE zəifliyindən istifadə edə bilərsiniz:

Bu XXE payload-u dəyəri /etc/passwd faylının məzmunu olan &xxe; adlı xarici obyekti (external entity) təyin edir və bu obyekti productId dəyərinin daxilində istifadə edir. Bu, tətbiqin verdiyi cavabın daxilində faylın məzmununun görünməsinə səbəb olur:

Burada əsas məntiq odur ki, tətbiq normalda productId yerində rəqəm gözləyir, amma sən ora &xxe; qoymaqla serverə deyirsən ki: “Get o faylı oxu və nəticəni bura yaz”. Server də faylı oxuyub “yanlış məhsul ID-si” xətasının içində sənə qaytarır.
Server-Side Request Forgery (SSRF) hücumları etmək məqsədilə XXE zəifliyindən sui-istifadə etmək
XXE hücumlarının digər əsas təhlükəsi SSRF (Server-Side Request Forgery) hücumları üçün istifadə edilə bilməsidir. Bu, serveri öz daxili şəbəkəsindəki hər hansı bir URL-ə sorğu göndərməyə məcbur edən ciddi bir zəiflikdir:

Bu kodla serverə deyirsən ki: “Məhsul ID-si yerinə get bu daxili sayta müraciət et və oradan gələn cavabı mənə gətir”.
Maarifləndirmə xüsusiyyəti daşıyır!