Kali Linux Căn Bản – Bài 2: Web hidden files/directories và các công cụ Gobuster, Dirbuster và Nikto

Xin chào,

Trong bài hôm nay, chúng ta sẽ làm quen với khái niệm web hidden files/directories. Đồng thời, mình cũng sẽ giới thiệu với các bạn các khái niệm căn bản về URL và cách dùng URL để tương tác với web server. Cuối cùng, chúng ta sẽ tìm hiểu và thực hành các công cụ như Gobuster, Dirbuster và Nikto nhé.


1 – Web hidden files/directories là gì?

Web server giống như một ổ cứng lưu trữ dữ liệu trên máy tính. Dữ liệu lưu trữ có thể bao gồm files, directories, v.v. Những dữ liệu được lưu trữ trên web server có thể là dữ liệu công khai (public) ví dụ như trang chủ của một website, những đường link dẫn đến những chuyên mục khác nhau (catergories) hoặc bài viết khác nhau của website đó, v.v. ; hoặc cũng có thể là dữ liệu riêng tư (private) ví dụ như trang đăng nhập, file robots, files hay directories chia sẻ thông tin nội bộ, v.v.

Những thông tin riêng tư này đôi khi sẽ cung cấp cho chúng ta chìa khóa dẫn đến việc xâm nhập thành công. Vì lẽ đó, nếu đối tượng chúng ta pentest là một web app, việc cần làm sau khi Nmap đó là tìm xem trên web có files hay directories ẩn hay không?

1A – Web URL trên Linux web server

Để dễ hiểu hơn, chúng ta sẽ thử phân tích một URL (Uniform Resource Locator) ở cấp độ căn bản nhé. Mình sẽ sử dụng URL của website này luôn.

https://tuhocnetworksecurity.business.blog/2020/12/17/kali-linux-can-ban-bai-1-nmap-va-netcat/

Đây là URL của bài số 1 của series Linux Căn Bản. Chúng ta sẽ bắt đầu phân tích URL trên nhé.

  • https: Giao thức được dùng để truy cập website
  • tuhocnetworksecurity.business.blog: Tên miền của website. Khi bạn sử dụng một trình duyệt web để truy cập vào tên miền tuhocnetworksecurity.business.blog, bạn đang truy cập vào một directory trên web server. Khi web server phát hiện có một yêu cầu truy cập, nó sẽ chạy một vài tác vụ để tạo nên giao diện trang chủ của website và tìm nội dung của website được lưu trong directory hiện tại để tải lên website. File chứa nội dung của website thường có tên là index.html
  • 2020 là directory con của directory chứa file index.html
  • 12 là directory con của directory 2020
  • 17 là directory con của directory 12
  • kali-linux-can-ban-bai-1-nmap-va-netcat: Tên của bài viết

Tổng kết lại chúng ta có URL mang ý nghĩa là: Bài viết kali-linux-can-ban-bai-1-nmap-va-netcat nằm bên trong directory 17; directory 17 nằm bên trong directory 12; directory 12 nằm bên trong directory 2020 và directory 2020 nằm bên trong directory chứa file index.html của web server tuhocnetworksecurity.business.blog.

Nói một cách dễ hiểu hơn nó cũng giống như PATH (đường dẫn/địa chỉ) trên hệ thống Linux, chúng ta có thể xem lại bài 10 của series Linux Căn Bản, ở mục tìm password cho account shiba4. Chúng ta đã tìm ra file shiba4 ở PATH sau:

/opt/secret/shiba4 

PATH trên có nghĩa là file shiba4 nằm bên trong directory secret, directory secret lại nằm bên trong directory opt, directory opt, nằm bên trong directory root (/).

Thì trên web server nó cũng giống y như thế, nghĩa là để truy cập được vào một file (bài viết), bạn phải biết chính xách PATH của file đó.

1B – Web hidden directories

Giao diện web khác với giao diện dòng lệnh. Trên giao diện dòng lệnh, bạn sẽ tương tác với hệ thống bằng các câu lệnh, tuy nhiên trên giao diện web, bạn lại tương tác với hệ thống chủ yếu thông qua URL.

H1B.1

Thật vậy, nếu các bạn thử bấm vào bất cứ một mục nào trên thanh menu của website của chúng ta bạn sẽ thấy URL sẽ thay đổi theo. Điều đó đồng nghĩa với việc, nếu bạn là một người dùng bình thường và không hiểu về cấu trúc URL, bạn sẽ chỉ có thể truy cập được vào những nội dung có sẵn trên trang chủ và trong thanh menu của web.

Những nội dung (files và directories) không được đề cập và không có đường dẫn đến trên trang chủ và thanh menu chính là những nội dung ẩn.

Nếu biết về URL, bạn có thể thử làm những điều sau trên website tuhocnetworksecurity.business.blog. Bạn nào tinh ý sẽ thấy cụm /2020/12/17/ giống như là năm, tháng và ngày của bài viết. Vậy chúng ta thử vài thí nghiệm sau:

Ví dụ 1: Bạn thử thay đổi URL một tí để show ra tất cả nội dung của website vào năm 2020 xem

https://tuhocnetworksecurity.business.blog/2020/

Bingo, chúng ta đã xem vào được trang liệt kê tất cả nội dung đã được publish trong năm 2020. Đây là một trang nội dung không hề có trên trang chủ của website chúng ta các bạn nhé.

H1B.2

Ví dụ 2: Chúng ta sẽ sử dụng URL để kiểm tra xem các bài post được viết vào năm 2019 có được liệt kê ra không nhé

URL như sau:

https://tuhocnetworksecurity.business.blog/2019/
H1B.3

Chúng ta sẽ thấy nội dung không tồn tại, do mình chỉ mới phát triển website từ tháng 6/2020 thôi.

Ví dụ 3: Các bạn cũng có thể tiếp tục thử nghiệm với URL bên dưới để tìm các trang liệt kê bài viết mình đã viết trong tháng 11:

https://tuhocnetworksecurity.business.blog/2020/11/

Hoặc tìm xem trong ngày 26/12/2020 mình đã post bài gì bằng URL:

https://tuhocnetworksecurity.business.blog/2020/11/26

Các ví dụ trên chính là ví dụ điển hình của việc sử dụng URL để tìm những nội dung không có trên trang chủ và menu của web. Khi pentest, thay vì phải thay đổi URL để tìm files và directories ẩn thủ công, chúng ta sẽ có các công cụ chuyên biệt để làm việc đó.

2 – Công cụ Gobuster

Gobuster là một công cụ được viết bằng Golang. Đây là một công cụ mã nguồn mở miễn phí trên giao diện dòng lệnh, được sử dụng để tìm các files cũng như directories ẩn thông qua hình thức tấn công Brute Force. Chúng ta đã sử dụng Gobuster một lần trong phần 1 của bài Tấn công và xâm nhập server Pickle Rick.

2A – Gobuster hoạt động như thế nào?

Gobuster sẽ cần một wordlists (danh sách) những tên files hoặc tên directories thường hay được sử dụng nhất trên web server. Gobuster sẽ sử dụng những cái tên trong wordlists này kết hợp với URL của website để tạo thành một URL mới và sẽ thử truy cập vào URL mới này. Gobuster sẽ dựa vào HTTP response (bạn nào quên thì có thể xem lại phần 5 bài này nhé) để biết được là file hay directory có tồn tại hay có cho phép truy cập hay không.

Ví dụ, nếu HTTP response là:

  • 401, Gobuster sẽ biết file/directory này có tồn tại, nhưng không được phép truy cập
  • 404, Gobuster sẽ biết file/directory này không được tìm thấy và có thể không tồn tại
  • 200, Gobuster sẽ biết file/directory này có tồn tại và có thể truy cập được
  • v.v

Để dễ hiểu hơn, chúng ta sẽ có một ví dụ sau:

Chúng ta có một wordlist gồm 3 cái tên

  • index
  • robots
  • admin

Và URL của website cần kiểm tra là:

https://abc.com/

Gobuster sẽ lần lượt dùng các tên trong wordlists để tạo thành những URL mới

1 - https://abc.com/index

2 - https://abc.com/robots

3 - https://abc.com/admin

Và lần lượt truy cập website bằng URL mới và chờ HTTP response. Nếu URL 3 có HTTP response trả về là 200, và các URL còn lại là 404, chúng ta có thể kết luận URL 1 và 2 không tồn tại còn URL 3 có tồn tại và có thể truy cập được.

2B – Sử dụng Gobuster như thế nào?

Chúng ta sẽ dùng lệnh bên dưới để tìm hiểu công cụ Gobuster. Vì Gobuster không có manual page nên chúng ta không dùng man gobuster được mà phải dùng flag help như bên dưới.

gobuster --help
H2B.1

Như chúng ta thấy Gobuster có 3 chức năng chính:

  1. Directory/file brute force
  2. DNS subdomain brute force
  3. VHOST brute force

Trong ba chức năng trên, chức năng số 1 được sử dụng nhiều nhất. Chúng ta sẽ thử tìm hiểu cách sử dụng nhé.

gobuster dir --help 
H2B.2

Một câu lệnh Gobuster điển hình để tìm các files và directories ẩn sẽ như sau:

gobuster dir -w <tên-wordlists> -u <IP-mục-tiêu> -x <tên-extension>

Trong câu lệnh trên, chúng ta có sử dụng thêm flag -x dùng để liệt kê những extension file mà chúng ta muốn tìm. Những extension này sẽ được kết hợp với tên file trong wordlists để tạo thành tên một file hoàn chỉnh.

Ví dụ chúng ta có các URL sau khi kết hợp với tên files hoặc directories trong wordlist như sau:

1 - https://abc.com/index

2 - https://abc.com/robots

3 - https://abc.com/admin

Và các extension file mà chúng ta muốn tìm sẽ là txt, php, py

Lúc này các URL mới được Gobuster tạo ra sẽ là:

1  - https://abc.com/index
2  - https://abc.com/index.txt
3  - https://abc.com/index.php
4  - https://abc.com/index.py

5  - https://abc.com/robots
6  - https://abc.com/robots.txt
7  - https://abc.com/robots.php
8  - https://abc.com/robots.py

9  - https://abc.com/admin
10 - https://abc.com/admin.txt
11 - https://abc.com/admin.php
12 - https://abc.com/admin.py

Nếu bạn không dùng flag -x, giả dụ trong web server tồn tại file robots.txt, file này sẽ không bao giờ được tìm thấy, vì URL mà Gobuster dùng sẽ là

https://abc.com/robots

Vì path file không đúng, nên dĩ nhiên file robots.txt sẽ không được tìm thấy. Và chúng ta đã bỏ qua một thông tin quan trọng. (Bạn nào quên tính năng của file robots.txt xin xem lại mục 2B-6b của bài sau).

Lưu ý:

File wordlists càng lớn và extension càng nhiều thì thời gian chạy Gobuster sẽ càng lâu. Do đó để hạn chế bớt extension không cần thiết, bạn phải xác định xem server hiện tại đang chạy Linux hay Windows thông qua Nmap (chúng ta đã bàn về vấn đề này ở bài 1 series Kali Linux Căn Bản). Đồng thời cố gắng xác định xem web app hiện tại đang chạy trên web platform hoặc ngôn ngữ nào? Ví dụ như WordPress, Django, v.v.

Ví dụ, chúng ta biết được web hiện đang chạy trên Linux Server và dùng WordPress. Vậy các extensions thường gặp có thể sẽ là: .php, .sh, .txt, pl, py, rb.

Khi đi vào các bài lab của giai đoạn 4, mình sẽ nói kỹ hơn về phần này nhé.

2C – Thực hành (Task 4)

Mình sẽ hướng dẫn các bạn 2 câu cuối, các câu còn lại các bạn hoàn toàn có thể tự trả lời thông qua hướng dẫn sử dụng công cụ Gobuster tại:

gobuster --help

Để thực hành, trước tiên các bạn nhất nút deploy tại task 4 để khởi động lab.

Lưu ý:

IP của bạn không nhất định phải giống trong hình.

H2C.1

Sau đó, chúng ta cần download wordlist cái đã. Chúng ta sẽ sử dụng lại wordlist đã dùng khi tấn công server Pickle Rick nhé. Các bạn nào chưa download, có thể download tại đây.

Sau khi download xong, các bạn sẽ chuyển đến directory chứa file
common-web-content.txt đã download và dùng lệnh bên dưới. Vì chúng ta sẽ làm cả 2 câu cùng 1 lúc, nên ở đây mình dùng thêm flag -x.

gobuster dir -w common-web-content.txt -u 10.10.171.107 -x xxa
H2C.2

Trong hình trên, vì mình lưu wordlist trong directory /usr/share/wordlists, nên đầu tiên mình phải cd đến đây, dùng lệnh ls để kiểm tra lại xem file common-web-content.txt có ở đây không và sau đó cho chạy lệnh Gobuster. Việc còn lại là ngồi chờ kết qủa thôi. Quá trình chạy sẽ diễn ra tầm 15 phút tùy thuộc vào tốc độ và độ ổn định của mạng nhà bạn nhé.

3 – Công cụ Dirbuster

Cũng giống như Gobuster, Dirbuster là một công cụ tìm files và directories ẩn thông qua hình thức tấn công Brute Force. Dirbuster cũng là một công cụ miễn phí, chỉ có điều công cụ này có giao diện người dùng và giải quyết được một vấn đề mà Gobuster không thể làm, đó là recursive.

Nghĩa là, với Gobuster, khi nó tìm được một directory, nó sẽ in ra tên directory đó và tiếp tục đi tìm những directories khác dựa vào wordlists đã cung cấp, chứ nó không đi vào bên trong directory đã tìm được và in ra các nội dung nằm bên trong. Dirbuster có thể làm được điều đó, nhưng bù lại Dirbuster không nhanh như Gobuster và dễ bị lỗi hơn Gobuster.

Để sử dụng Dirbuster, trên giao diện dòng lệnh của Kali Linux, các bạn gõ lệnh sau:

dirbuster 

Giao diện của Dirbuster sẽ như hình bên dưới

H3.1

Để trả lời 2 câu hỏi của task 4 bằng Dirbuster, các bạn sẽ cấu hình nó như bên dưới và bấm Start:

H3.2

Để xem kết quả các file tìm được trong quá trình scan các bạn bấm vào phần Results – List View.

H3B.3

Lưu ý:

Gobuster và Dirbuster không phải là 2 công cụ duy nhất để tìm files và directories ẩn, chúng ta còn có các công cụ khác như dirb, dirbsearch, dirscan, v.v. Mỗi công cụ sẽ có những ưu nhược điểm khác nhau. Bạn có thể chọn bất cứ công cụ nào mà bạn thích để tìm nội dung web ẩn, nhưng hãy luôn nắm rõ điểm yếu và điểm mạnh mà công cụ bạn đang dùng nhé.

4 – Công cụ Nikto

Nikto là một công cụ miễn phí và mã nguồn mở. Nikto được sử dụng chủ yếu để quét lỗi bảo mật trên web server. Khi tiến hành quét lỗi với Nikto, nó sẽ thực hiện hơn 6000 bài kiểm tra trên đối tượng để tìm ra các lỗ hổng bảo mật trên web server, lỗi đó có thể xuất phát từ chính những dịch vụ chạy trên web server hoặc cũng có thể lỗi xuất phát từ quá trình cấu hình web server.

Nếu so sánh với các công cụ quét lỗi đình đám như Nessus hoặc OpenVas, Nikto khá là yếu thế. Trên thực tế, Nikto chỉ được sử dụng để quét lỗi nhanh cũng như thu thập thông tin nhạy cảm của web server để từ đó xác định xem web server có dính phải những lỗ hổng nghiêm trọng và phổ biến hay không.

Một lưu ý khi dùng Nikto đó là không phải tất cả thông tin hiện ra khi chạy Nikto đều là lỗ hổng bảo mật, có những kết quả sẽ chỉ là thông tin của website mà Nikto tìm được thôi.

Cú pháp của câu lệnh Nikto như sau:

nikto -h http://<ip-mục-tiêu> <tùy-chọn-flag>

Để tìm hiểu thêm các tính năng của Nikto, các bạn có thể tham khảo bằng lệnh:

man nikto 
H4.1

Nikto cũng có tùy chọn cho phép bạn sử dụng các plugins được tích hợp sẵn để quét lỗi hoặc thu thập thông tin mục tiêu, chức năng này khá giống với Nmap Script Engine, chỉ có điều plugins của Nikto không đa dạng bằng.

Để liệt kê các plugins được tích hợp trong Nikto, các bạn dùng command sau:

nikto -list-plugins 
H4.22

Để tìm một plugin nhất định nào đó, thay vì phải đọc hết cả list plugin, chúng ta có thể sử dụng lệnh grep pipe operator mà mình đã hướng dẫn trong series Linux Căn Bản. Ví dụ để tìm plugins report_xml mình sẽ dùng câu lệnh sau:

nikto -list-plugins | grep report_xml 

Để trả lời các câu hỏi của task 5, các bạn hãy dùng thông tin trong man nikto nhé.

Nếu các bạn muốn thực hành, các bạn có thể dùng Nikto, quét thử labs mà chúng ta đã dùng ở phần Gobuster ở task 4.

H4.3

Như các bạn thấy, Nikto in ra các thông tin khá hữu ích như tên của HTTP server là Apache và version cũng như hệ điều hành của web server; ngoài ra chúng ta Nikto còn liệt kê ra một vài directories và file ẩn nữa.


Cám ơn các bạn đã theo dõi và chúc các bạn nhiều sức khỏe,

Vincent Nguyễn

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s