Bạn tốn khá nhiều thời gian để kiểm tra đi kiểm tra lại một lỗ hổng ở nhiều trang web khác nhau bằng cách thủ công. Bài này sẽ giúp bạn biết về Nuclei, một công cụ đắc lực giúp hỗ trợ và giảm thiểu thời gian trong quá trình kiểm thử.

 

Nuclei là gì

Nuclei là gì? Nuclei là tool quét lỗ hổng nhanh, hiệu quả và có khả năng mở rộng.Nó có thể quét nhiều máy chủ trong cùng một thời điểm. Nó có thể thực hiện quét lỗ hổng tự động cho ứng dụng web, cloud, v.v. Công cụ Nuclei sử dụng các template dựa trên YAML để xác định các bước cần thiết nhằm phát hiện lỗ hổng. Là một công cụ nguồn mở, điều này có nghĩa là bất cứ khi nào một CVE mới được xuất bản, ai đó có thể tạo mẫu Nuclei và có thể xuất bản mẫu đó cho cộng đồng bảo mật sử dụng.

 

Cách Nuclei hoạt động

Nuclei sử dụng các mẫu template YAML sau đó sẽ tự động gửi các yêu cầu HTTP tới các URL đã chỉ định. Các yêu cầu này có thể được cấu hình với nhiều phương thức như GET, POST, v.v.

Sau khi nhận được phản hồi từ server, Nuclei sẽ phân tích nội dung của phản hồi để kiểm tra xem có bất kỳ lỗ hổng nào tồn tại hay không. Điều này có thể dựa vào:

  • Mã trạng thái HTTP: Kiểm tra mã trạng thái trả về (ví dụ: 200, 404).
  • Nội dung phản hồi: Tìm kiếm các từ khóa, chuỗi hoặc mẫu trong thân HTML.
  • Các điều kiện khác: So sánh với các giá trị hoặc tiêu chí cụ thể.

Nuclei có thể được tích hợp vào các công cụ khác như Burp Suite, giúp tối ưu hóa quy trình kiểm tra bảo mật.

Người dùng có thể tự tạo hoặc cập nhật các template để theo kịp với các lỗ hổng mới và thay đổi trong các ứng dụng web.

 

Template của Nuclei bao gồm những gì

Template của Nuclei là một tệp YAML. Dữ liệu được đánh dấu trong tệp cho Nuclei biết cần gửi những gì đến máy chủ và những gì cần tìm trong phản hồi của máy chủ để xác định xem nó có tồn tại lỗ hổng hay không. Nuclei có thể hiểu các giao thức và dịch vụ mạng khác nhau bao gồm HTTP, DNS, SSL và TCP. Trước tiên, chúng tôi sẽ đề cập chi tiết về các mẫu để quét HTTP, vì các dịch vụ web là mục tiêu phổ biến nhất đối với người dùng Nuclei.

Template của nuclei bao gồm có 4 phần chính:

  1. ID: Một định danh duy nhất cho template.
  2. Info: Thông tin về template, bao gồm tên, tác giả, mức độ nghiêm trọng và các thẻ để phân loại.
  3. Requests: Phần này xác định các requests HTTP mà Nuclei sẽ gửi. Có thể sử dụng nhiều phương thức (GET, POST, v.v.) và nhiều đường dẫn khác nhau.
  4. Matchers: Xác định cách để kiểm tra xem một lỗ hổng có tồn tại hay không, bằng cách so sánh phản hồi từ server với các từ khóa, mã trạng thái hoặc điều kiện khác.

Hãy xem ví dụ đầy đủ về một mẫu đơn giản chứa các thông tin này:

id: htpasswd

info:
  name: Detect exposed .htpasswd files
  author: geeknik
  severity: info
  tags: config,exposure

requests:
  - method: GET
    path:
      - "{{BaseURL}}/.htpasswd"

    matchers-condition: and
    matchers:
      - type: word
        words:
          - ":{SHA}"
          - ":$apr1$"
          - ":$2y$"
        condition: or

      - type: status
        status:
          - 200

Chúng ta sẽ xem xét chi tiết các phần khác nhau của định nghĩa mẫu, nhưng hiện tại, chỉ cần biết rằng mục đích của các mẫu về cơ bản là cho nuclei biết những yêu cầu nào cần gửi và những gì cần tìm trong phản hồi.

Sử dụng Nuclei

Câu lệnh quét cơ bản:

bash
nuclei -u <https://example.com> -t ./nuclei-templates/
  • u: Địa chỉ URL của mục tiêu.
  • t: Đường dẫn đến thư mục chứa các mẫu.

Một số câu lệnh khác:

  • l: Quét nhiều URL
    bash
    nuclei -l targets.txt -t ./nuclei-templates/
    
  • o: Ghi kết quả vào file:
    bash
    nuclei -u <https://example.com> -t ./nuclei-templates/ -o output.txt
    
  • severity: Chỉ định mức độ lỗ hổng (info, low, medium, high, critical):
    bash
    nuclei -u <https://example.com> -t ./nuclei-templates/ -severity high
    
  • timeout: Đặt thời gian chờ:
    bash
    nuclei -u <https://example.com> -t ./nuclei-templates/ -timeout 5
    
  • H: Thêm các header tùy chỉnh vào yêu cầu:
    bash
    nuclei -u <https://example.com> -t ./nuclei-templates/ -H "Authorization: Bearer YOUR_TOKEN"
    

Ví dụ cụ thể về sử dụng Nuclei

Giả sử chúng ta có một trang web nghi ngờ có lỗ hổng SQLI chúng ta muốn kiểm tra xem nó có lỗ hổng không. Chúng ta sẽ tạo một quy tắc Nuclei để xác định.

Bước 1: Cài đặt Nuclei

VD trên linux:

go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest

Bước 2: Viết quy tắc Nuclei

Tạo một file YAML với nội dung sau:

id: error-based-sql-injection

info:
  name: Error based SQL injection
  author: geeknik,0xelkot
  severity: high
  description: Detects the possibility of SQL injection
  tags: sqli,generic,error

requests:
  - method: GET
    path:
      - "{{BaseURL}}'"
      - "{{BaseURL}} 1 or 1"
      - "{{BaseURL}} %22%22|0;#"
      - "{{BaseURL}} ''"
      - "{{BaseURL}} ' or#"
      - "{{BaseURL}} ' OR '1"
      - "{{BaseURL}} ' OR 1 -- -"
      - "{{BaseURL}} %22 OR 1 = 1 -- -#"
      - "{{BaseURL}} OR 1=1"
      - "{{BaseURL}} AND 1"
      - "{{BaseURL}} AND false"
      - "{{BaseURL}} 1' ORDER BY 1--+"
      - "{{BaseURL}} 1' ORDER BY 1,2--+"
      - "{{BaseURL}} 1' GROUP BY 1,2,3--+"
      - "{{BaseURL}} ' GROUP BY columnnames having 1=1 --"

    matchers-condition: and
    matchers:
      - type: regex
        part: body
        regex:
          - "SQL syntax.*MySQL|Warning.*mysql_.*|valid MySQL result|MySqlClient.|mysqli_error|mysqli_query"
          - "PostgreSQL.*ERROR|Warning.*Wpg_.*|valid PostgreSQL resultNpgsql."
          - "Microsoft Access Driver|JET Database Engine|Access Database Engine"
          - "ORA-[0-9][0-9][0-9][0-9]|Oracle error|Oracle.*Driver|Warning.*Woci_.*|Warning.*Wora_.*"
          - "CLI Driver.*DB2|DB2 SQL error|bdb2_w+"
          - "SQLite/JDBCDriver|SQLite.Exception|System.Data.SQLite.SQLiteException|Warning.*sqlite_.*|Warning.*SQLite3::|SQLITE_ERROR"
          - "(?i)Warning.*sybase.*|Sybase message|Sybase.*Server message.*"

      - type: status
        status:
          - 500

Bước 3: Lưu quy tắc vào file

Lưu quy tắc này vào một tệp, ví dụ: sqli_detection.yaml

Bước 4: Chạy Nuclei trên trang web nghi ngờ có lỗ hổng:

nuclei -t sqli_detection.yaml -u <https://example.com>

Nếu response trả về được xác định trong quy tắc, nuclei sẽ báo cáo một kết quả khớp.

Nhận xét về nuclei

Ưu điểm:

  • Nuclei cải thiện đáng kể cách bạn tiếp cận đánh giá bảo mật bằng cách tăng cường các quy trình thủ công, lặp đi lặp lại.
  • Pen-testers có được toàn bộ sức mạnh của các Temple mẫu công khai và khả năng tùy chỉnh của Nuclei để tăng tốc quá trình đánh giá của họ và đặc biệt với chu trình hồi quy, nơi bạn có thể dễ dàng xác minh bản sửa lỗi.
  • Dễ dàng tạo danh sách kiểm tra tuân thủ, bộ tiêu chuẩn của bạn (ví dụ: OWASP Top 10).
  • Với các khả năng như fuzz và quy trình làm việc, các bước thủ công phức tạp và đánh giá lặp đi lặp lại có thể được tự động hóa dễ dàng với Nuclei.
  • Dễ dàng kiểm tra lại lỗ hổng bảo mật-sửa chữa bằng cách chạy lại mẫu.

Nhược điểm:

  • Người dùng cần có kiến thức về bảo mật và cách thức hoạt động của Nuclei để tối ưu hóa việc sử dụng công cụ.
  • Mặc dù có nhiều template có sẵn, nhưng đôi khi người dùng cần tạo các template riêng cho các lỗ hổng đặc thù mà có thể không được hỗ trợ.
  • Một số lỗ hổng phức tạp có thể không được phát hiện nếu template không được thiết kế phù hợp hoặc không cập nhật kịp thời.
  • Một số ứng dụng có cơ chế bảo vệ (như WAF) có thể ngăn chặn các yêu cầu từ Nuclei, dẫn đến việc không phát hiện được lỗ hổng.
  • Nuclei không thể thay thế hoàn toàn cho các phương pháp kiểm tra bảo mật thủ công, vì một số lỗ hổng chỉ có thể được phát hiện thông qua phân tích sâu và kiểm tra thực tế.

Kết luận:

Nuclei cải thiện đáng kể cách bạn tiếp cận đánh giá bảo mật bằng cách tối ưu hóa các quy trình thủ công. Tuy nhiên, người dùng cần có kiến thức về bảo mật để tận dụng tốt nhất công cụ này.

294 lượt xem