Plugin Nessusa do robienia zrzutów ekranu wykrytych usług WWW
W tym artykule pokażę, jak rozszerzyć możliwości skanera Nessus za pomocą pluginu napisanego w języku NASL (Nessus Attack Scripting Language). Plugin ten automatycznie robi zrzuty ekranu wykrytych usług webowych podczas skanowania. Tego typu funkcjonalności często brakowało mi w Nessusie, dlatego postanowiłem stworzyć plugin, który pozwala na dodanie tych zrzutów do raportu.
Plugin działa w trybie headless Google Chrome, robiąc zrzut ekranu wykrytej usługi HTTP lub HTTPS i zapisując go do pliku PNG. Po wykonaniu zrzutu, plik jest załączany do raportu Nessus. Dzięki temu mogę od razu w raporcie zobaczyć, jak wygląda wykryta usługa WWW. Jest to coś podobnego do narzędzia EyeWitness, ale zintegrowane bezpośrednio w Nessusie. Dzięki temu oszczędzam czas podczas identyfikacji wykrytych usług.
Instalacja pluginu
W pierwszej kolejności należy pobrać i zainstalować Google Chrome:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i ./google-chrome-stable_current_amd64.deb
Następnie skopiować plugin do odpowiedniego katalogu razem z innymi pluginami:
sudo cp create_www_screenshot.nasl /opt/nessus/lib/nessus/plugins
W kolejnym kroku wyłączamy sprawdzanie podpisów pluginów i ponownie kompilujemy wszystkie pluginy:
sudo /opt/nessus/sbin/nessuscli fix --set nasl_no_signature_check=yes
sudo /opt/nessus/sbin/nessusd -R
Na końcu restartujemy usługę Nessusa:
systemctl restart nessusd
Co robi kod?
Skrypt zaczyna się od ustawienia podstawowych informacji, takich jak jego identyfikator, wersja, data modyfikacji i kategoria:
script_id(998877);
script_version("1.0");
script_set_attribute(attribute:"plugin_modificaton_date", value: "2025/01/25");
script_name(english: "Create www service screenshot");
script_set_attribute(attribute:"solution", value:"n/a");
script_set_attribute(attribute:"risk_factor", value:"None");
script_set_attribute(attribute:"description", value: "Capture screenshots of identified web services and automatically attach them to the Nessus scan report");
script_summary(english: "Capture screenshots of identified web services and automatically attach them to the Nessus scan report");
script_category(ACT_GATHER_INFO);
script_family(english:"Misc.");
script_copyright("This script is Copyright (C) 2025 and is owned by Michal Walkowski <michal.walkowski at pwr.edu.pl");
Następnie skrypt sprawdza, czy są załadowane inne pluginy, których będzie potrzebował, takie jak te odpowiedzialne za wykrywanie usług WWW, wersji HTTP oraz wsparcia SSL/TLS:
script_dependencies("find_service.nasl", "http_version.nasl", "http_info.nasl", "ssl_supported_versions.nasl");
script_require_keys("Services/www");
script_require_ports("Services/www", 80);
Na podstawie wykrytej usługi, skrypt automatycznie wybiera protokół (HTTP lub HTTPS):
proto = "http";
if(get_port_transport(port) > ENCAPS_IP)
proto = "https";
Kiedy wszystko jest gotowe, skrypt wykonuje zrzut ekranu strony głównej wykrytej usługi i zapisuje go w pliku PNG:
pread(cmd:"google-chrome", argv:make_list("google-chrome", "--no-sandbox", "--headless", "--disable-gpu", "--ignore-certificate-errors", "--reduce-security-for-testing", "--disable-web-security", "--window-size=1920,1200", "--virtual-time-budget=1000", "--screenshot=" + img_file, proto + "://" + host_ip + ":" + port));
Po zrobieniu zrzutu ekranu, skrypt odczytuje plik i dołącza go do raportu Nessus:
attachments = make_list();
attachments[0] = make_array();
attachments[0]["type"] = "image/png";
attachments[0]["name"] = proto + ".png";
attachments[0]["value"] = r;
security_report_with_attachments(level:0, port:port, extra:"", attachments:attachments);
Cały kod pluginu można znaleźć tutaj.
Demo
Po poprawnym zaimportowaniu pluginu, w kategorii Misc pojawi się nowy plugin o nazwie Create www service screenshot
:
A po zakończeniu skanowania w raporcie Nessus pojawi się załącznik do pobrania w postaci zrzutu ekranu z wykrytej usługi WWW:
Po pobraniu załącznika otrzymujemy screenshot wykrytej usługi WWW.
Podsumowanie
Dzięki temu pluginowi do Nessusa mogę od razu otrzymać zrzuty ekranu wykrytych usług WWW w swoim raporcie. To wygodne i oszczędzające czas rozwiązanie, które jest bardzo przydatne podczas audytów bezpieczeństwa. Dzięki temu pluginowi nie muszę już korzystać z dodatkowych narzędzi, takich jak EyeWitness, żeby uzyskać wizualizację wykrytych usług.