+12

Làm quen với các công cụ scan internet và recon: Netlas và Hunter - những đối thủ mới của Shodan.io

Mayfest2023 ContentCreator

Có lẽ các bạn đã nghe nhiều đến công cụ tìm kiếm các thiết bị online trên internet shodan.io (nếu bạn chưa, thì mình khuyến khích các bạn có thể đọc bài viết này: https://viblo.asia/p/shodan-cong-cu-tim-kiem-cho-kiem-thu-bao-mat-924lJJD0lPM). Hiện đã có các công cụ khác nổi lên như là đối trọng cũng như công cụ thay thế cho Shodan. Trong bài này, mình muốn giới thiệu hai công cụ như vậy: Netlas và Hunter và cùng so sánh kết quả tìm kiếm với Shodan xem như thế nào nhé.

Sơ lược

Về cơ bản, 3 công cụ này đều có những điểm tương đồng với nhau, cho chúng ta tìm kiếm thông tin về các host (hay các IPv4 trên toàn bộ internet) đi kèm là những thông tin của host đó như: chứng chỉ SSL (nếu có), các port đang được mở, banner, HTTP response,... Chúng ta cũng có thể dùng các filter để thu hẹp phạm vi kết quả tìm kiếm của mình.

netlas.io là một công cụ tìm kiếm khá mới, họ mới chuyển từ thử nghiệm Alpha sang thử nghiệm Beta và sau đó release gần đây. Trong 3 công cụ, mình thấy Netlas có khả năng truy vấn chi tiết nhất.

image.png

Hunter thực tế là một công cụ mới, nhưng cũng cho nhiều kết quả khá khả quan. Tuy nhiên, số lượng filter thì không được nhiều.

image.png

So sánh

Trước hết hãy bắt đầu bằng một query đơn giản.

Thử tìm các host trên internet là GitLab self-hosted server

Thông thường khi truy cập vào GitLab, chúng ta sẽ bị redirect về trang login như sau:

VD ở https://gitlab.com/users/sign_in

image.png

Còn với self-host GitLab thường sẽ có giao diện như sau:

image.png

Tìm kiếm bằng từ khóa

Với shodan, chúng ta có thể input đơn giản là GitLab vào ô tìm kiếm để thấy kết quả:

image.png

kết quả trả về sẽ là kết quả tìm kiếm từ khóa này ở bất cứ thành phần nào: trong HTML body, trong url, trong headers.

Đối với Netlas thì chúng ta không thể query như vậy được mà cần chỉ rõ từ khóa GitLab nằm ở phần nào của kết quả:

Đối với trang login thì thường nội dung HTML sẽ như sau: image.png

Chúng ta có thể chọn signature là <title>Sign in · GitLab</title> để tìm kiếm. Quay lại với Shodan, dùng truy vấn http.title:"Sign in · GitLab"

image.png

Với Netlas thì sẽ là truy vấn bằng: http.body:"Sign in · GitLab"

image.png

Với Hunter chúng ta truy vấn bằng: web.title="Sign in · GitLab"

image.png

Tạm thời chưa nói đến tính chính xác thì Hunter đang cho kết quả nhiều nhất 608,797 tuy nhiên đây là số lượng URLs, services, còn thực tế số unique IP là 110.3K, cũng tương đương Netlas và nhiều hơn Shodan khá nhiều.

Ví dụ, với lỗ hổng CVE-2023-2825, unauth đọc file tùy ý trên GitLab, thì lỗ hổng này chỉ ảnh hưởng trên GitLab Community và Enterprise phiên bản 16.0.0 mà thôi. Sử dụng kỹ thuật fingerprinting ở đây, ta biết được file CSS tương ứng với phiên bản GitLab này là:

application-77ee44de16d2f31b4ddfd214b60b6327fe48b92df7054b1fb928fd6d4439fc7e.css

Ta có thể truy vấn như ở trên để tìm ra các GitLab host đang chạy phiên bản này:

Với Shodan: http.html:"application-77ee44de16d2f31b4ddfd214b60b6327fe48b92df7054b1fb928fd6d4439fc7e.css"

image.png

Hunter: web.body="application-77ee44de16d2f31b4ddfd214b60b6327fe48b92df7054b1fb928fd6d4439fc7e.css"

image.png

còn với Netlas, thì do 1 lý do nào đó, lại không ra được kết quả nào 🤔

Tìm kiếm bằng favicon

Favicon, có thể coi là logo của trang web, là một yếu tố chúng ta có thể xem xét đến khi recon vì hầu hết nếu cùng sử dụng chung một open source software thì nếu nội dung trang web có thể thay đổi hoặc custom lại nhiều thì logo này (thường) sẽ ít thay đổi:

image.png

Tất nhiên vẫn có trường hợp các công ty muốn branding lại logo để đồng nhất:

image.png

Ở Shodan, chúng ta chỉ cần click vào logo bên cạnh title ở kết quả tìm kiếm để tìm kiếm theo favicon đó (được hash bằng MurmurHash3)

Shodan: http.favicon.hash:1265477436 image.png

Chúng ta sẽ thấy có sự chênh lệch kết quả giữa các cách tìm kiếm (vì cơ bản thì không có cách nào là hoàn hảo cả 😅)

Netlas không sử dụng favhash mà dùng SHA256 của file favicon:

Netlas: http.favicon.hash_sha256:72a2cad5025aa931d6ea56c3201d1f18e68a8cd39788c7c80d5b2b82aa5143ef

image.png

Hunter: favicon_hash=="f7e3d97f404e71d302b3239eef48d5f2"

image.png Chúng ta có thể tìm kiếm bằng title trước rồi sau đó lấy favicon hash từ kết quả để tìm kiếm thêm.

Tìm kiếm bằng tag

Khi thực hiện scan toàn bộ internet, các trang này đều sẽ có đánh tag cho các host dựa theo framework, ngôn ngữ, OSS của host đó, ta cũng có thể dùng truy vấn này để thu hẹp phạm vi tìm kiếm lại.

Shodan: product:"gitlab"

image.png

Netlas: tag.name:"gitlab"

image.png

Hunter: product.name="GitLab"

image.png

Tất nhiên, các tag này sẽ chỉ dược đánh cho các framework, ngôn ngữ, OSS, có nhiều người sử dụng thôi, còn những trường hợp khác, chúng ta phải fingerprint thông qua favicon, headers, HTML body,...

Tìm kiếm nâng cao

Tìm kiếm bằng tên cookie

Để ý là khi truy cập vào trang login của GitLab, chúng ta sẽ thấy có header Set-Cookie như sau:

set-cookie: _gitlab_session=ccdaea61e1e31cac2ae58ac6d955304a; path=/; expires=Wed, 31 May 2023 04:53:07 -0000; secure; HttpOnly

Đây cũng có thể coi là một signature giúp chúng ta phát hiện các host GitLab.

Shodan: Set-Cookie: _gitlab_session, tuy nhiên truy vấn này sẽ giới hạn ở mức cookie _gitlab_session ở vị trí đầu tiên trong value của header.

image.png

Netlas: http.headers.set_cookie:"_gitlab_session"

image.png

Các kết quả của Netlas đều trả về dạng JSON và chúng ta có thể truy vấn value theo các key của JSON này (như chứng chỉ, headers, protocol, country...)

Hunter không hỗ trợ truy vấn như trên...

Tìm kiếm bằng URL path

Đây là một tính năng khá hay của Netlas, chúng ta có thể tìm kiếm bằng regex trên URL luôn. Shodan và Hunter chỉ tìm theo host mà không theo URL (Netlas gọi là các responses)

VD: tìm kiếm các subdomain của *.dell.com đang chạy trên cổng 80 vào 443 (http/https)

Với yêu cầu này chúng ta có thể dùng truy vấn như sau:

uri:/https?:\/\/.*\.dell\.com:(80|443)\//

image.png

Hoặc trong trường hợp chúng ta không quan tâm đến domain, mà chỉ quan tâm đến 1 đường dẫn đặc biệt, ta cũng có thể mở rộng regex ở uri như trên.

VD: Tìm các host có URL path /glpi/, thường là root dir của sản phẩm GLPI Project

Chúng ta có thể tìm với truy vấn sau:

uri:/http(s?):\/\/.*\/glpi\/.*/

image.png

để ra kết quả rất sát với kỳ vọng 😀.

Và đừng quên, chúng ta có thể kết hợp các filter ( bằng các toán tử AND, OR) để thu hẹp phạm vi tìm kiếm hơn nữa nhé.

Kết

Còn khá nhiều công cụ khác tương tự, ví dụ như ZoomEyeFOFA

Bạn hãy thử tìm hiểu để chọn ra công cụ hữu ích và phù hợp với workflow của mình nhé.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.