Penetration Testing Step 3 – Nikto, web server scanner nhỏ mà có võ

Kết thúc nội dung Penetration Testing Step 3 – Bộ ba “er” Sequencer, Decoder và Comparer của Burp Suite, tôi xin tạm gác lại câu chuyện với Burp Suite và chuyển sang một nhân vật khác trong làng rà quét lỗ hổng các mục tiêu web application là Nikto.

#1. Nikto dùng để làm gì?

Nikto (đọc chuẩn cmnr là “Nick-Toe”, không phải “Nikito” hay cái “quờ quờ” gì tương tự như thế cả) là Open Source (GPL) web server scanner cho phép bạn triển các bài test ác chiến vô mục tiêu để xác định các files/programs có nguy cơ độc hại, các kiểu yếu điểm theo version cụ thể cũng như vấn đề chạy version outdated (lỗi thời).

Chuyện bên lề, đọc xong rồi bỏ: Cái tên Nikto được lấy cụm thần chú hồi sinh “Klaatu barada nikto” của phim “The Day the Earth Stood Still”. Bạn có thể đọc thêm trong trang chính chủ Nikto2 | CIRT.net.

Nikto site
Nikto site

Ngoài ra, Nikto cũng có thể kiểm tra các vấn đề liên quan đến server configuration (cấu hình server) ví dụ như dạng multiple index files (nhiều file index), HTTP server options (các tùy chọn HTTP) cũng như xác định các phần mềm được cài cắm trên mục tiêu.

Điểm quan trọng cần lưu ý là Nikto chơi dạng quân tử, đập thẳng vô mặt mục tiêu nhanh hết mức có thể chứ không chơi lén kiểu stealth mode nên chắc chắn sẽ bị ghi vào log của đám IDS/IPS. Nếu muốn, bạn vẫn có thể dùng toy hỗ trợ như LibWhisker’s anti-IDS methods (công cụ hỗ trợ chống IDS của LibWhisker).

Túm lại, với Nikto, bạn sẽ có thể:

  • Dò lỗi cấu hình software và server;
  • Kiểm tra file/programe mặc định;
  • Kiểm tra file/programe không bảo mật;
  • Kiểm tra vấn đề outdate của server/program.

Về vấn đề cài đặt, bạn có thể xúc Nikto về cài trên các thể loại Unix/Linux (bao gồm Mac OS X) hay Windows. Với Kali Linux, hàng đã có sẵn nên bạn chỉ cần móc ra xài thôi.

Lưu ý: Nếu chưa biết Kali Linux là gì thì bạn có thể đọc thêm trong nội dung Giải ngố Kali Linux – Phần 1: Kali Linux là gì?

#2. Các dạng test cơ bản với Nikto

#2.1 Single Port – Chơi solo 1 port

Đây là dạng scan cơ bản nhất chỉ yêu cầu thông tin host (mặc định Nikto sẽ scan port 80 nếu bạn không chỉ định thông tin khác). Host ở đây có thể để dạng IP hoặc Hostname đặt ngay sau -h option với cú pháp kiểu như sau.

nikto -h IP_address/hostname

Tôi chạy thử một cái với mục tiêu megacorpone của ông Offensive Security.

nikto -h http://www.megacorpone.com -maxtime=60s

Nikto simple test
Nikto simple test

Lưu ý: Tôi dùng -maxtime option 60s để demo cho nhanh. Thực tế bạn sẽ cần xác định maxtime phù hợp cho từng mục tiêu.

Nếu muốn chỉ định port khác, bạn có thể dùng -p option với cú pháp kiểu như sau:

nikto -h IP_address -p 443

Tôi cũng chạy thử một cái với mục tiêu megacorpone.

nikto -h 149.56.244.87 -p 443 -maxtime=60s

Nikto simple test port
Nikto simple test port

Như bạn thấy ở trên, lúc này Target Port đã đổi sang 443 với thông tin SLL info tương ứng. Hoặc nếu không thích -p option thì bạn có thể chơi kiểu full URL syntax với cú pháp minh họa như sau:

nikto -h https://149.56.244.87:443/ -maxtime=60s

Theo quy trình thông thường, Nikto sẽ test HTTP trước khi thử với HTTPS. Nếu bạn chắc chắn server chơi SSL/TLS thì có thể chỉ định luôn với -s (hoặc -ssl) option để giúp tăng tốc quá trình kiểm tra theo cú pháp kiểu như sau:

nikto -h 149.56.244.87 -p 443 -ssl -maxtime=60s

Lưu ý: Vấn đề HTTP/HTTPSSSL/TLS bạn có thể xem thêm trong nội dung Giải ngố WWW – Phần 3: HTTPS có gì ngon hơn HTTP

#2.2 Multiple Port/Host – Chơi kiểu chết chùm nhiều port/host

Nikto cũng có thể chơi dạng multiple port (tức là chơi nhiều port cùng lúc) trong cùng một scanning session bằng cách sử dụng -p option với comma-delimited list (nói theo kiểu bình thường không làm màu là dùng dấu phẩy “,”) theo cú pháp kiểu như sau:

nikto -h 149.56.244.87 -p 80,443 -maxtime=60s

Nikto simple test multiport
Nikto simple test multiport

Như bạn thấy, với kiểu này nó sẽ lần lượt múc cả 2 Target Port là 80 và 443.

Và nếu muốn, bạn cũng có thể chơi nhiều host cùng lúc trong cùng một scanning sesion bằng cách sử dụng text file chứa danh sách các IP_address/hostname cần xúc. Tuy nhiên, bạn cần lưu ý text file cần tuân thủ định dạng:

  • Mỗi IP_address/hostname một dòng;
  • Thông tin port đặt ở cuối, cách biệt với thông tin host hoặc các port khác bằng dấu colon (“:”) hoặc comma (“,”).

#3. Interactive Features – các tính năng tương tác với Nikto

Trong quá trình scan, bạn có thể nhấn các phím sau để tương tác:

  • SPACE– Báo cáo tình trạng scan;
  • v– Bật hoặc tắt chế độ “nói nhiều” – tức là nó sẽ phụt ra màn hình đủ thứ thông tin nếu bạn turn on;
  • d– Bật hoặc tắt chế độ debug;
  • e– Bật hoặc tắt chế độ báo cáo lỗi;
  • p– Bật hoặc tắt chế độ báo cáo tiến độ xử lý;
  • r– Bật hoặc tắt tùy chọn hiển thị redirect (code 3xx);
  • c– Bật hoặc tắt hiển thị cookie;
  • o – Bật hoặc tắt hiển thị OK (code 200);
  • a– Bật hoặc tắt hiển thị thông tin auth;
  • q– Thoát kiểu nhẹ nhàng tình cảm;
  • N– Chuyển sang host/post kế tiếp;
  • P– Dừng.

Lưu ý: Các phím tắt trên là dạng case sensitive – có phân biệt chữ hoa và chữ thường và tốc độ xử lý có thể hơi chậm. Bạn đừng nôn nóng ấn loạn xạ rồi lại mạnh dạn kết luận tool xàm bị lỗi nhé.

Tôi chạy lại với command sau để tương tác thử.

nikto -h https://149.56.244.87:443/

Nikto Interactive
Nikto Interactive
Nikto Interactive (cont)
Nikto Interactive (cont)

#4. Xuất kết quả sau khi cày bừa với Nikto

Nikto cho phép bạn xử lý với nhiều export formats – định dạng xuất khác nhau, bao gồm:

  • CSV;
  • HTML;
  • XML;
  • NBE;
  • JSON;
  • SQL.

Phần thiết lập này này sẽ đi kèm với -output (-o) option và -Format (-F) option. Nếu bạn chỉ dùng -output mà không chỉ định -Format, Nikto sẽ có gắng thử định dạng phù hợp (nếu nó chả nghĩ ra được cái nào phù hợp thì sẽ chỉ chuyển thông tin ra stdout).

Lưu ý vấn đề liên quan đến stdout tôi có giới thiệu trong nội dung Giải ngố Linux – Phần 4: Quản lý process, thu thập thông tin hệ thống, log và phần cứng

nikto -h https://149.56.244.87:443/ -o ./test_nikto -F json -maxtime=60s

Nikto output json
Nikto output json
Nikto output json content
Nikto output json content

Ngoài ra, khi xử lý với Nikto, bạn có tùy chọn lưu hết mấy thứ thú vị tìm được trong plaintext với -Save (-S)option. Với thằng này, bạn sẽ cần cung cấp thông tin directory để tạo hoặc lưu và file được lưu sẽ theo định dạng HOSTNAME_PORT_DATE_TESTID.txt. Thông tin lưu trữ trong các file này sẽ bao gồm các thứ như test ID, full HTTP response, requestresponse dạng JSON.

nikto -h https://149.56.244.87:443/ -S ./ -maxtime=60s

Nikto save
Nikto save

Lưu ý: Tôi có giới thiệu về piping (|), grep trong nội dung Giải ngố Kali Linux – Phần 5: Nâng cấp kỹ năng tìm kiếm trên Linux với grep commandvi trong nội dung Giải ngố Kali Linux – Phần 6: Bộ 3 nguyên tử text editor nano/vi/vim và cách buff damage với skill so sánh nội dung file bằng comm/diff. Bạn có thể xem thêm nếu cần.

1 thought on “Penetration Testing Step 3 – Nikto, web server scanner nhỏ mà có võ”

Leave a Reply

Your email address will not be published. Required fields are marked *