# **bksec Public Insecure News**

Ban đầu ta xem qua có các chức năng gì không, lướt qua một lúc thì không thấy có chức năng, những link dẫn đến các bài viết và video ở ip khác.
view source: thấy một vài đường dẫn /static như css hay js nhưng chưa thấy khả năng exploit
xem trong burp suite:

Thấy endpoint /logo, check mã nguồn xem nào

Chưa hiểu lắm nên quăng vô gpt thui :>

Quay lại burp ta thấy /logo có 1 param là file, ném qua repeater, thử xem có nghịch được gì không, nhìn thấy file nên ta nghĩ qua có thể mấy lỗi liên quan đến file như path traversal, LFI,.. test:

Thấy nó vẫn trả về logo.png, thử thêm vài payload

ta thấy có vẻ các dấu ../ bị filter mất dẫn đến đường dẫn bị ghép thành logo/etc/passwd, tức là file=logo.png đường dẫn của nó là logo/logo.png
chưa hiểu tại sao nên ta quay lại trang mã nguồn xem có gì không, nhưng thôi ta cứ vứt hết cho AI đọc hộ, lần này thử grok xem :>


Yess, hóa ra hàm replace đã xóa “../” nhưng như grok nói, ta có thể thử ….//, giống việc validate xss là replace(“<script>”, “”) ta có thể dùng <sc<script>ript> (tự nhiên nghĩ đến =)) )

Bùm, confirm path traversal, nhưng giờ làm gì tiếp, tất nhiên là thử /root/

Nhưng dễ thế thì đã tốt T.T
Đang chưa biết làm gì, tôi sang kali scan vài cái xem sao :>
scan param ẩn bằng arjun ⇒ không thấy

scan directory bằng dirsearch

⇒ /logo (500)
/console (200)
/logo thì ta vừa xem rùi
/console


Lên internet xem sao


Một vài thứ cần để tự generate pin
Đầu tiên cần username, lại chatgpt ta có:

Username: urmother
Modname là flask.app, tiếp theo là Flask
Tiếp là MAC của computer chuyển sang decimal


device id là eth0

Đầu tiên tôi nghĩ cái dãy này cố định, nhưng sau vài lần khi vào instance mới thì nó lại khác :v

Vậy MAC sang decimal là 113231594547997
Cuối cùng là machine-id

Đầu tiên ta thử /etc/machine-id

Không có gì hết, vậy thử /proc/sys/kernel/random/boot_id


Đây là đoạn mã để gen ra pin, thử thui, copy đoạn code về, sửa lại thông tin ta vừa lấy được

“Vui quá có flag rùi, thử pin nào”

:vvv, và sau khi thử lại rất nhiều lần, xem youtube exploit, đọc hint, nghe chat gpt thử /proc/self/maps, /proc/self/cgroup các kỉu vẫn không biết cách exploit T.T
---
# **Ezzzz**
Giải xong r là k mở được instance, sếp Trung vừa mở xong, e viết đây :v:

Thấy sơ sơ có chức năng add event gồm nội dung và ngày, thêm sort by title or date, test thêm vài cái bình thường ban đầu, thử html injection, xss

Không khả quan lắm, nhìn vào burp nào
/add

/?status=success

Tui có thử thay đổi giá trị của status nhưng vẫn trả về 200 như thường
Giờ ta thử 2 chức năng sort

Endpoint /sort có param là key với 2 giá trị title và date, title thì theo thứ tự bảng chữ cái, date thì theo ngày tháng
Thử dấu ‘ xem có dính sqli không

Lúc này tưởng đã confirm dính sqli rồi, mặc dù đúng là sqli thật nhưng chưa confirm được lắm, vì sau đấy thử không điền gì hoặc điền không đúng 2 giá trị title hoặc date đều sẽ hiện ra 500 internal server error
Sau một hồi chatgpt gợi ý ra những cái không có ích, thử payloadallthethings xem sao


Thành công, confirm sqli, và là blind sqli, giờ cần tìm logic để có thể exploit
Sau một hồi thử rất nhiều kiểu, thắc mặc tại sao lại vậy, hành vi như nào




Và vân vân =))
Lúc đó do mới chỉ add một 1 even nên tui chưa thấy được sự khác biệt, mặc dù vẫn chưa hiểu tại sao phải để đúng là date và title, đáng phải đi vào title và vẫn response 200, sort by title chứ T.T, thui kệ, tiếp nào
Sau khi nhận ra là chưa thêm vào, tôi thử thêm event, nội dung là các kí tự chữ bảng chữ cái để dễ phân biệt

Và để ngày của a sau ngày của b, để nếu sử dụng sort thì sẽ phân biệt khi query được gọi nó rơi vào cái nào


Vậy là coi như có logic để nhận ra sự khác biệt

nhưng khi thử để bắt đầu lấy thông tin db, thì lại lỗi

Con gpt nó rep như z, còn smirk mình, quá láo :v
Nhưng có vẻ sai, vì sau khi đi tra thì vẫn được, và tui có thử CASE WHEN SUBSTR(‘ab’,1,1) = 1 và CASE WHEN SELECT 1 = 1 thì nó vẫn trả ra, chỉ khi thử database() là báo lỗi, vậy cần phải tìm xem server đang dùng sql server nào

Thế là tui tin là postgreSQL, thử current_database() các thứ trong postgreSQL vẫn không được, quá nản =)), đã thử mysql, microsoft sql server,.. và về đến nhà đợi phase2 thử sqlite3 T.T


Và ta có payload
(CASE WHEN (SUBSTR((SELECT name FROM sqlite_master WHERE type='table' LIMIT 1),1,1)='a') THEN date ELSE title END)

Sau khi thử từ a trở đi

Đến ‘s’, sort đã thành sort by date, tức điều kiện when khi này đúng, vậy từ đầu tiên của table_name thứ nhất là s, cứ thế mới kí tự, nhưng làm thủ công trông có vẻ mỏi, ta có thể dùng intruder, nhưng tui nghĩ nếu dùng intruder thì so sánh như nào, vì length hay size đều giống nhau, vào pytthon thuii

Paste vào vscode ta được

Giờ vũ trang lại nó xíu là exploit được ngay :>

Test để kiểm tra vẫn bình thường, tiếp tục nào
Ban đầu tôi định dùng sql-anding, so sánh bit để tìm ra từng kí tự cho nhanh, nhưng có vấn đề là sqlite không có ASCII(), tôi thử search thì có UNICODE(), nhưng nó hoạt động không đúng lắm, nên tôi ta lại thử tất cả các kí tự vậy :>

sau một hồi prompt engineering thì khi chạy ta sẽ có flag, em đang định chạy thì instance bị đóng nên thui :v
BKSEC{B00l34n_4nd_3rr0r_B4s3d_SQLi_4r3_P0w3rfu1_TechniquesKQcdaIJNPD52aIKn}
---
# **low-effort-sns-2**
build


Có vẻ như toàn là api, không có gui
Vì tôi k code golang nên chắc sẽ phải chatgpt nhiều, xem nàooo, writeup real time :v
Có vài chỗ để ý


Cũng có vài gợi ý :>

Xem tiếp các file khác
Sau khi xem qua một lượt thấy, mặc dù không hiểu code lắm nhưng ngờ ngợ xíu các chức năng
Signup, login, secret gì đó, profile, có hàm hash và check password

Rồi trong authentication liên quan đến khoá bất đối xứng rsa, maybe rsa256

Và các chức năng khác :v
Thử đăng ký trước đã


Thử curl xem

Có vẻ đã đăng ký thành công, giờ thử đăng nhập


Vậy là đã thành công :>
Token trả về là jwt để xác thực người dùng


Đúng là trong secret của admin sẽ có flag
Ta sẽ bám theo hướng này

Thử đổi role thành admin

ta cần biết public và private key
Tìm hiểu xem cách tạo jwt token

Muốn thay đổi role trong payload, ta cũng phải thay đổi cả chữ ký, vậy giờ cần tự tạo ra chữ ký
Thử hỏi chatgpt coi sao

Sau khi tra chatgpt, grok, internet các thứ thì tui vẫn chưa tìm ra cách để tự ký T.T
Sau khi chả biết làm gì nữa : ) thì mình xem lại mấy file, vào file handlers.go thì thấy endpoint này


Có vẻ ta có keys gì đó, search tiếp thui



Ta đã có public và private key từ đoạn code grok cung cấp :>

Giờ thử gen jwt trên jwt.io lại
Cho lại jwt của mình hiện tại vào

Thay role thành admin, expired thêm số vì nó đã bị expired và thêm public và private key vào

Giờ ta đã có jwt với role admin

Exploiteddd.
---
# **Forensics: introduction2mem4**
Sau khi giải nén file author cấp ta được 2 file, một file là challenge.zip, một file là checksum.txt

Sau một hồi thử unzip file challenge.zip thì tui chưa biết cách nào, nhưng chợt nhớ ra biết đâu cái pass giải nén file zip đầu cũng là của cái này, thế là thử, bùm :>

Ta đã có file memdump.mem

File vẫn còn nguyên vẹn

Sau khi thử BKSEC{d0_n0t_p4sS_s3cr3TZ_0n_th3_cmDljn3} sai
Có vẻ còn flag BKSEC{l00k_ljk3_w3_h4v3_a_n3w_ nhưng chưa hết
Giờ nc đến ip author cấp nc 10.8.0.1 10001
Đến đây sau khi vào sẽ có câu hỏi


Vậy windows version là 10

Và câu hỏi tiếp theo là when memory is dumped
Ban đầu khi chưa có volatility, em dùng

Nhờ chat gpt convert nhưng sai

Nhưng như ảnh trên ta có

Chuyển về giờ việt nam UTC+7 ta cộng 7 tiếng
2025-02-20 22:05:26
Vậy có thể đáp án câu tiếp theo là 2025-02-20 22:05:26
Bingbong, hết giờ :v T.T