はまやんはまやんはまやん

hamayanhamayan's blog

Login Sequel [TJCTF 2020]

Written by saisree
Login as admin you must. This time, the client is of no use :(. What to do?
https://login_sequel.tjctf.org/

f:id:hamayanhamayan:20200527190442p:plain

調査

  • 適当に'をまず入れてみるが反応に変わりはない
  • ソースコードを見てみるとヒントが書いてある
<!-- The following code might be helpful to look at: -->

<!--
def get_user(username, password):
    database = connect_database()
    cursor = database.cursor()
    try:
        cursor.execute('SELECT username, password FROM `userandpassword` WHERE username=\'%s\' AND password=\'%s\'' % (username, hashlib.md5(password.encode())))
    except:
        return render_template("failure.html")
    row = cursor.fetchone()
    database.commit()
    database.close()
    if row is None: return None
    return (row[0],row[1])
-->

バックエンドはpythonのようだ。
これを見ると反応は変わっていないが、SQLiできそうな感じがする。

SQL Injection

' OR 1=1 --これを投げてみると…

f:id:hamayanhamayan:20200527190457p:plain

detectされてしまった。何か文字を見ているんだろう。 自分が見つけた使えない文字は- or password from-がNG文字なのでPostgreSQLなんだろう。
他にコメント手段がないかを探すと、/* comment */も使えるらしい。
もしかしたら、コメント閉じが無くてもいけるのでは?と思ってやったらいける。
ユーザー名に' union select 'admin', 'pass' /*でパスワードを適当にしたら、フラグが出てくる。