Đây là writeup của các bài CTF mảng Web - Client trên Rootme
Bài 1. HTML - disabled buttons
Bài này mở màn là thấy 2 phần bị disable thì như tên bài, ta chỉ cần chỏ vào đó và xoá trường "disable" đi và submit là ta đã có flag của bài này.
Flag: HTMLCantStopYou
Bài 2. Javascript - Authentication
Bài này thì chúng ta chỉ cần mở Dev tool lên và check src thấy có hàm main js, ta có thể thấy logic chương trình khá đơn giản.
Flag: sh.org
Bài 3. Javascript - Source
Lại một bài nữa chúng ta chỉ cần check src code bằng Dev tool và có Flag
Flag: 123456azerty
Bài 4. Javascript - Authentication 2
Bài này cũng chỉ yêu cầu đọc hiểu code cơ bản, mở F12 lên và chỉ cần quan tâm đoạn khoanh đỏ như hình dưới và ta đã có Flag của bài này.
Flag: HIDDEN
Bài 5. Javascript - Obfuscation 1
Khái niệm Obfuscation: Đây là kỹ thuật để convert từ 1 đoạn code dễ hiểu về mặt logic, view thành 1 đoạn code khó đọc, khó reverse bằng cách thêm vào hoặc sửa đổi tên hàm tên biến thành những ký tự khó hiểu cho cả người và máy.
Tại sao phải obfuscate code Javascript ? Do javascript là một ngôn ngữ thông dịch và Js cần một thông dịch viên để có thể biên dịch và execute (thông dịch viên ở đây chính là Browser của chúng ta). Chính vì vậy nên người dùng có khả năng đọc code -> lộ logic, lộ các thông tin nhạy cảm có trong code của chúng ta -> nhiều khi người dùng sẽ có ý đồ xấu gây hại cho chương trình.
Đọc đoạn code trên logic cũng không khó hiểu lắm, cái ta cần quan tâm chính là biến pass thay vì ghi bản rõ thì có vẻ người lập trình viên đã ghi bằng bản mã. Ta chỉ cần
console.log(unescape(pass))
và ta đã có flag.
Flag: cpasbiendurpassword
Bài 6. Javascript - Obfuscation 2
Bài này mở F12 lên và ta thấy có 1 đoạn script trong file html
Giờ ta hãy dùng hàm decodeURIComponent() của Javascript để decode cái này xem ta sẽ thu được gì
Đây là kết quả khi chạy hàm trên và in ra console của trình duyệt. Giờ chúng ta chỉ cần
thực thi câu lệnh
String.fromCharCode(104,68,117,102,106,100,107,105,49,53,54)
mà chúng ta thu được sau khi decode ở trên và ta sẽ có được Flag.
Flag: hDufjdki156
Bài 7. Javascript - Native code
Ở bài này khi ta F12 lên thì sẽ thấy 1 đoạn script khá rắc rối và không thể hiểu nổi, đây thực chất vẫn là Obfuscation.
Ta sẽ decode đoạn mã này và sau đó ta thu được 1 function như sau
Logic khá dễ hiểu nên ta sẽ có luôn Flag của bài này.
Flag: toto123lol
Bài 8. Web-pack.
Khái niệm: Webpack là module bundle, mục đích của nó là để đóng gói các tệp Javascript để sử dụng trong trình duyệt, điều này sẽ làm code trở nên nhẹ hơn, bảo mật code tốt hơn,...
Tuy nhiên bài này khá dễ, ta chỉ cần F12 lên và tìm Flag thôi
Flag: BecauseSourceMapsAreGreatForDebuggingButNotForProduction