Chuyển đến nội dung chính

[CTF] Làm thế nào để bắt đầu với CTF mảng Web

Web là một trong những mảng dễ tiếp cận khi chơi CTF. Vậy bắt đầu CTF mảng Web như thế nào?

Giờ đặt một website trước mặt mình thì không thể cứ thế mà làm. Làm gì? Tìm flag - một chuỗi bí mật do người ra đề giấu ở đâu đó quanh cái web. Muốn tìm được nó trước hết phải xem đề bài gợi ý cái gì, cho cái gì, trong web có gì, làm sao để khai thác mấy cái đó. Từ đây lại có một vấn đề: Phải hiểu về web trước đã.

Nói thêm một chút là ở bài viết này mình sẽ không đi sâu vào chi tiêt, mình chỉ dừng lại ở việc đặt ra các vấn đề quan trọng mà các bạn cần tìm hiểu.

Web hoạt động thế nào?
Chúng ta sẽ cần nắm kiến thức về web qua những vấn đề như thế này:
  - Cách hoạt động của web từ phía client cho đến phía server sẽ có những gì?
  - Client gửi request cho server và nhận lại response như thế nào? Qua đâu? (HTTP, HTTP Header, HTTP Methods)
  - Cách client và server lưu trữ thông tin của nhau (qua cơ sở dữ liệu, cookie, session, …).
  - Các ngôn ngữ cấu thành 1 trang web hoặc thường được dùng khi xây dựng web. (HTML, CSS, JS, PHP, SQL ...)
   - Thông tin whois của 1 trang web (ip, owner,...).

1. Liên quan đến HTTP
Mỗi khi truy cập một website, từ phía client phải gửi request lên server qua giao thức HTTP, và những request này được thể hiện dưới dạng HTTP header. Giống như việc muốn gửi bức thư thì phải có địa chỉ nhận, tên người viết, thông tin về người viết, nội dung dung thư thì có yêu cầu,… Các headers cũng chứa những thông tin tương tự như vậy.

Những headers này có rất nhiều nên các bạn có thể tự google tìm hiểu. Đặc biệt là chú ý về cookie, user-agent, là 2 trường hay được dùng trong các bài ctf.

Gủi một HTTP request đi cũng có thể gửi được bằng nhiều dạng khác nhau. Các dạng này chính là các HTTP Methods hay còn gọi là HTTP Verb. Dạng của nó bao gồm GET, POST, PUT, DELETE, OPTIONS,… Thường dùng nhất là POST và GET. Các bạn nên tìm hiểu kỹ điểm giống và khác của 2 methods này.

Một số bài khi dùng POST, GET đều không nhận được gì từ phía server, nhưng khi đổi sang HEAD, PUT, hoặc method khác thì lại ra kết quả. Lý do là ở file .htaccess đã block 2 method đó. Tham khảo:
  • http://www.tutorialspoint.com/restful/restful_introduction.htm
  • .htaccess là gì?
  • .htaccess Restrict method POST GET
Nói tiếp đến response. Hẳn các bạn đã không ít lần gặp những thông báo kiểu 404 Not Found hoặc 302 Forbidden khi truy cập một url nào đó. Đó là vì sau một request được gửi đến server, ta sẽ nhận được response. Trong response, một cái luôn luôn có là HTTP Status Code. Mỗi đầu số 1xx 2xx 3xx 4xx 5xx có một ý nghĩa khác nhau.

  • Tham khảo: Tìm hiểu cơ bản về HTTP và định dạng của các HTTP message

Cuối cùng là việc thao tác với các headers. Trên Firefox mình hay dùng addon Live Http Headers hoặc Tamper data. Nâng cao hơn các bạn hãy tập dùng curl, rất tiện và có api cho nhiều ngôn ngữ lập trình.

  • Tham khảo: http://curl.haxx.se/docs/httpscripting.html
2. Liên quan đến các ngôn ngữ lập trình web
Với nhiều bài CTF chúng ta sẽ phải đọc hiểu code, phân tích hoặc đoán code. Nói chung ta cần trang bị kiến thức về lập trình, hiểu từng ngôn ngữ để làm gì. Ví dụ như html, css thì giới hạn cũng để thể hiện giao diện web, ở html5 “xịn” hơn thì làm được game gì đó; js thì làm được nhiều hơn, hiệu ứng, tính toán …, quan trọng mấy thằng này đều là kiểu ngôn ngữ ở phía client, tức là chạy được luôn ở phía máy mình, và mình xem được code gốc của nó.

Đối với PHP, ASP, JSP,… đây là các ngôn ngữ được biên dịch trên server, và code gốc thì không xem được nhưng có rất nhiều bài CTF chủ động cho người chơi đọc code để phân tích hoặc có lỗi giúp ta có thể đọc code từ đó khai thác.

Túm lại ta cần học HTML, CSS, JS và một ngôn ngữ server nào đó như PHP hoặc JSP (ít nhất ở mức đọc hiểu).

3. Liên quan đến Cookie, Session
  • Nắm được định nghĩa cookie, session
  • Nắm được cách thức lưu trữ của cookie, session.
Lưu ý quan trọng là cookie có thể thay đổi được ở phía client. Session thì chỉ đổi được id (tức là làm mới id, hoặc làm rỗng id). Phía server nếu đọc cookie ko phân biệt ip, đặc điểm trình duyệt người dùng,… thì ta có thể dựa vào đó để khai thác. Ví dụ xác thực admin qua cookie (có một trường id=1234; user=guest, giờ nếu sửa thành id=1;user=admin thì sẽ có thể đăng nhập dưới quyền admin).

  • Một ví dụ rất cơ bản về cookie: https://www.youtube.com/watch?v=NrC3129Q55c
Giải thích một chút về clip phía trên như sau.
  • Phía server có một đoạn code kiểu như thế này:
Đoạn code này sẽ kiểm tra xem ở phía client có trường cookie là restricted_login chưa, nếu chưa có thì thêm vào và có giá trị là false. Nếu đã có thì kiểm tra giá trị của restricted_login, giá trị bằng true thì được phép qua bàn.
Trong CTF đối khi có một bài SQL injection qua cookie. Nói chung cookie cũng là dữ liệu từ phía người dùng, tức là mình có thể thay đổi, và truyền các dữ liệu sai trái lên server.

4. Liên quan đến SQL Injection
  • SQL injection cơ bản
  • SQL injection - Blind: Không thể trực tiếp get ra đoạn dữ liệu mình muốn và phải get từng ký tự, hoặc dựa và các câu lệnh điều kiện đúng sai,…
  • SQL injection - Error based: Có thể nói là mở rộng của blind, tùy vào dữ liệu đúng hoặc sai mà server trả về kết quả khác nhau.
  • SQL injection - Time based: Dùng một câu lệnh SQL chứa lệnh Sleep(), hoặc một hàm nào đó để nghỉ khi gặp điều kiện đúng. Ví dụ IF(điều kiện, điều kiện nếu đúng-> Sleep(10), đk nếu sai -> null)
SQL Injection cơ bản mình học qua course này, có thể ko cần học hết, chỉ cần nắm rõ cách khai thác qua SQL sau đó có thể tự tìm hiểu thêm tùy bài ctf:
  • http://newdemy.com/courses/sql-injection-online-course-by-hitesh-choudhary
5. Local & Remote File Inclusion
  • Chi tiết: http://hakipedia.com/index.php/Local_File_Inclusion
  • Một clip ví dụ: https://www.youtube.com/watch?v=s3XQ1n5kdeQ
6. XSS
  • Mọi thông tin chi tiết xin truy cập vào link sau: Kĩ thuật tấn công CROSS-SITE SCRIPTING
7. Luyện tập
Đọc qua tất cả những thông tin phía trên thì đúng là có phần hơi quá tải. Lúc đầu mới chơi CTF mình cũng không có nhiều kiến thức đến vậy. Bài viết này mình muốn là một nơi tổng hợp tương đối các kiến thức cần thiết để các bạn biết sẽ cần trang bị những gì, tìm vấn đề ở đâu,… Sau cùng dưới đây là những nơi mình đã luyện tập CTF mà thấy rất hiệu quả
  • http://hackthis.co.uk - Một site phù hợp cho người mới bắt đầu.
  • http://www.root-me.org/en/Challenges/Web-Server/ - Một list challenges bao quát rất nhiều vấn đề, gồm cả các bài LFI/ RFI, các loại SQLi, các tài liệu hướng dẫn.
  • http://overthewire.org/wargames/natas/ - Gồm cả các dạng bài về Command injection và PHP Objection Injection
  • http://webhacking.kr - Có khoảng 60 challenges về web từ khó đến dễ. Một số bài hơi mang tính thách đố
  • http://ringzer0team.com
Một lưu ý cuối là các bạn hãy kết hợp việc luyện tập ở các site phái trên và việc tham gia các giải ctf mới ra ở http://ctftime.org nữa. Chúc các bạn vui vẻ!

by @sting8k

Nhận xét

Bài đăng phổ biến từ blog này

HttpOnly Flag và Secure Flag của chiếc Cookie để làm gì?

Cookies rất hữu ích nhưng cũng tồn tại không ít rủi ro. Bài viết sau đây giúp tìm hiểu rõ thêm về 2 thuộc tính giúp bảo vệ Cookies là Httponly flag   và Secure flag.   Nếu anh em mò vào được bài này thì chắc cũng biết về Cookie rồi, nhưng còn hiểu lơ mơ    thì click vào đây trước nhé -  Cookie . Chuyện kể rằng, ngày xửa ngày xưa, có một "nghệ sĩ" nọ do không sao kê tiền từ thiện nên đã bị hacker tấn công chiếm rất nhiều tài khoản do bị mất cookie.  1. Tại sao lại mất?   Nguyên nhân "nghệ sĩ" bị mất thông tin cá nhân là do quá chủ quan khi click đọc email do rất nhiều "fan" gửi cho, trong những email đó có gắn đường link chứa mã độc đánh cắp cookie của 1 trang web nào đó.  Do cookies phản hồi từ server mà các đường link đó dẫn tới không được bảo vệ     nên đã bị đối tượng xấu lấy mất cookies chứa xác thực đăng nhập -> dẫn tới mất thông tin. Về mặt bản chất, cũng có thể hiểu đây như là một cuộc tấn công XSS , đối tượng gửi email sẽ execute một đoạn scri

Mã hóa đối xứng và bất đối xứng

Hôm nay mình xin được nói về hai thuật toán cơ bản và quan trong nhất trong bảo mật đó là mã hóa đối xứng và mã hóa bất đối xứng . 1. Mã hóa đối xứng (mã hóa không công khai- symmetric-key algorithms ) - Là lớp thuật toán các mã hóa trong đó việc mã hóa và giải mã đều dùng chung cho 1 khóa (secret key) 1.1 Các loại thuật toán khóa đối xứng Thuật toán đối xứng có thể được chia ra làm hai thể loại, mật mã luồng ( stream ciphers ) và mật mã khối ( block ciphers ). Mật mã luồng mã hóa từng bit của thông điệp trong khi mật mã khối gộp một số bit lại và mật mã hóa chúng như một đơn vị. Cỡ khối được dùng thường là các khối 64 bit. Thuật toán tiêu chuẩn mã hóa tân tiến ( Advanced Encryption Standard ), được NIST công nhận tháng 12 năm 2001, sử dụng các khối gồm 128 bit. Các thuật toán đối xứng thường không được sử dụng độc lập. Trong thiết kế của các hệ thống mật mã hiện đại, cả hai thuật toán bất đối xứng ( asymmetric ) (dùng chìa khóa công khai) và thuật toán đối xứng được sử

Những câu hỏi phỏng vấn kỹ sư bảo mật thường gặp.

Dưới đây là một danh sách các câu hỏi thường được sử dụng trong việc phỏng vấn tuyển dụng chuyên gia bảo mật. Nhiều câu hỏi được thiết kế buộc người được phỏng vấn phải suy nghĩ, và không thể chuẩn bị trước cho dạng câu hỏi này. Ở đó, các phản ứng của ứng viên cũng quan trọng  như câu trả lời. Một số câu hỏi được pha trộn giữa kỹ thuật và lý thuyết, hoặc câu hỏi tìm hiểu quan điểm của ứng viên để tạo ra những câu hỏi khó khăn hơn. Các câu hỏi cũng thường được chia thành các thể loại khác nhau, một số câu hỏi mẹo sẽ được chèn vào giữa. Mục đích của những câu hỏi dạng đánh đố này là tìm kiếm những điểm yếu kỹ thuật thường chỉ xuất hiện khi ứng viên đi vào làm việc :| . Nhóm câu hỏi chung 1. Giữa các dự án mã mở và mã đóng, bên nào bảo mật hơn? Câu trả lời của ứng viên sẽ nói rất nhiều về họ. Nó cho thấy 1) họ biết những khái niệm gì trong phát triển phần mềm, 2) cho thấy mức độ chín chắn của ứng viên. Mục tiêu chính của câu hỏi là đưa ra được ưu/ nhược điểm của hệ mã đóng và mã m