Script alert 42

Preview:

Citation preview

"><script>alert(42);</script>

Magyar Attila @athoshun

ELTE, 2011. 12. 01.

"><script>alert(42);</script>

Információbiztonság általában Webes biztonság

Üzemeltetés Fejlesztés

További játszanivaló

Disclaimer

Nem script-kiddie képző!!!

Információbiztonság általában

Confidentality Integrity Availability Authenticity Non-repudiation Tudatos kockázatvállalás Leggyengébb láncszem

WWW

P0WN3D!

A kommunikáció támadása: MITM

HTTPS

HTTP over SSL/TLS

A kiszolgáló támadása

Üzemeltetés

Buffer overflow, 0-day exploit DEP, ASLR CVE (http://cve.mitre.org/)

DoS, dDoS Router, tűzfal, IDS

WAF

Demó: debug mód

Debug mód

Az éles rendszer ne a kimenetben teregesse ki a fejlesztőknek szóló hibaüzeneteket!

Demó: input validáció

Input validáció

Az adat a felhasználótól érkezik

Input validáció

Az adat a felhasználótól AZ ÖRDÖGTŐL érkezik

Demó: file inclusion

File inclusion

GET /?page=../logs/access.log HTTP/1.1

$page = 'pages/' . $_GET['page'];if (!is_file($page)) $page = 'pages/default.php';

include $page;// include 'pages/../logs/access.log'

Demó: file inclusion vs. user agent

File inclusion

GET /?page=../logs/access.log HTTP/1.1

$page = 'pages/' . $_GET['page'];if (!is_file($page)) $page = 'pages/default.php';

include $page;// include 'pages/../logs/access.log'

File inclusion

Front Controller, routing, keretrendszerek, stb. A kereket már feltalálták!

Demó: file feltöltés

File feltöltés

Nagyon veszélyes! Validáció tartalom alapján, a HTTP kérés

hamisítható! EXIF fejlécben meglepetés?

Kovertáljunk! (Ésszel!) Bütykölt kép file 100000x100000-es mérettel a

fejlécben? Bütykölt kép file exploittal?

Demó: SQLi

SQLi

mysql_query( "SELECT * FROM users WHERE" . " name='$name' AND password='$password';");

// $name = "admin"// $password = "a' OR '1'='1"//// SELECT * FROM users WHERE// name='admin' AND password='a' OR '1'='1';

SQLi

Prepared statement! (SQL quote-olás/escape-elés)

$stmt = $pdo->prepare( "SELECT * FROM users" . " WHERE name=:name AND password=:password;");

$stmt->bindParam(':name', $name);$stmt->bindParam(':password', $password);

SQLi :-D

Demó: SQLi, UNION

SQLi, UNION

http://vulnshop.localhost:8085/?page=product.php&id=42

/?page=product.php&id=' UNION SELECT 111,CONCAT(name,':',password),333,444 FROM users WHERE name='admin';--

Jelszavak tárolása

Ellenőrzéshez elég a jelszó egy hash-e (kriptográfiai hash, pl. SHA-1)

Születésnap-paradoxon Rainbow table Saltolás!

$hash = sha1($password . $salt); $hash = sha1($password . $name . $salt)

A felhasználó támadása

Demó: CSRF

CSRF

Alice-nek van élő munkamenet cookie-ja Bob webshopjától

CSRF

Alice-nek van élő munkamenet cookie-ja Bob webshopjától

Alice pl. egy facebook üzenetben lévő linket követve megnyitja Mallory weboldalát

CSRF

Alice-nek van élő munkamenet cookie-ja Bob webshopjától

Alice pl. egy facebook üzenetben lévő linket követve megnyitja Mallory weboldalát

Mallory JavaScriptjei a cookie-t same origin policy miatt nem látják :-)

CSRF

Alice-nek van élő munkamenet cookie-ja Bob webshopjától

Alice pl. egy facebook üzenetben lévő linket követve megnyitja Mallory weboldalát

Mallory JavaScriptjei a cookie-t same origin policy miatt nem látják, AJAX sem megy :-)

De űrlapot POST-olni tudnak Bob webshopjának! :-( A böngészőnek a cél domainhez tartozó cookie-kat

is küldenie kell Bob webshopja érvényes munkamenet cookie-val

érvényes POST kérést kap Alice böngészőjétől

CSRF token

Követeljünk meg egy azonosítót minden HTTP kérésben a session cookie-n kívül is, a kérés törzsében!

Pl. minden formban egy „kellőképpen” véletlenszerűen generált token, amit a szerveroldal a munkamenetben is tárol

Egy HTTP kérés feldolgozása a token ellenőrzésével kezdődik

Mallory JavaScriptjei nem tudják a CSRF tokent megszerezni, a same origin policy miatt :-)

Demó: XSS

XSS

A beinjektált HTML/JS kóddal a támadó (szinte) bármit megtehet, amit az oldalt betöltő felhasználó

Böngészők XSS filterei nem sokat érnek A view rétegben a view rétegnek megfelelő

quote-olás kell! htmlspecialchars(), htmlentities() urlencode() json_encode() ...

XSS: BeEF

http://beefproject.com Ha már benn van a vállalati intranetben egy

XSS, idő kérdése, míg egy kliens ugróponttá válik

Eszköztár

Ami támadásra jó, az jó tesztelésre is: netcat tcpdump, Wireshark nmap JohnTheRipper Nessus, OpenVAS Metasploit BeEF BackTrack Linux

Olvasnivaló

OWASP: https://www.owasp.org OWASP Top10

BuheraBlog: http://buhera.blog.hu BalaBit OpenAcademy 2011. májusi előadása:

http://youtu.be/CoCItL3cMPU

Hacktivity: https://hacktivity.com Wargame: http://www.hackthissite.org/ GIYF: Google Is Your Friend :-)

Ami kimaradt

Spam (CAPTCHA) Clickjacking Apache/mod_rewrite és társai REST, egyéb API megvalósítások

Miért kezdődik a GMail minden AJAX válasza így? while(1); ###START###

Social engineering Böngésző pluginek, böngésző bugok ...

Példakódok, diák

Kód: https://github.com/attilammagyar Diák: http://www.slideshare.net/athoshun

„We only have to be lucky once. You will have to be lucky always.” (IRA)

?

Köszönöm