
În trecut, am discutat despre Nemesida WAF Free — un instrument gratuit pentru protecția site-urilor și API-urilor împotriva atacurilor cibernetice, iar în această prezentare am decis să facem o recenzie a unui scanner de vulnerabilități popular .
Scanarea site-ului pentru vulnerabilități este o măsură necesară, care, împreună cu analiza codului sursă, permite evaluarea nivelului său de securitate împotriva amenințărilor de compromitere. Scanarea resursei web poate fi realizată cu ajutorul unor instrumente specializate.
Nikto, W3af (scris în Python 2.7, al cărui suport s-a încheiat) sau Arachni (care nu mai este suportat din februarie) — cele mai populare soluții disponibile în segmentul gratuit. Desigur, există și altele, de exemplu, Wapiti, pe care ne vom opri.
Wapiti funcționează cu următoarele tipuri de vulnerabilități:
- divulgarea fișierului (locale și externe, fopen, readfile);
- injecții (PHP / JSP / ASP / SQL-injecții și injecții XPath);
- XSS (cross-site scripting) (reflexiv și persistent);
- detectarea și executarea comenzilor (eval(), system(), passtru());
- injecții CRLF (separarea răspunsurilor HTTP, fixarea sesiunii);
- inserție XXE (XML external entity);
- SSRF (falsificarea cererii pe partea serverului);
- utilizarea fișierelor potențial periculoase cunoscute (datorită bazei de date Nikto);
- configurații slabe ale .htaccess, care pot fi ocolite;
- prezența fișierelor de rezervă care dezvăluie informații confidențiale (divulgarea codului sursă);
- Shellshock;
- redirectări deschise;
- metode HTTP neobișnuite care pot fi permise (PUT).
Funcționalități:
- suport pentru proxy HTTP, HTTPS și SOCKS5;
- autentificare prin mai multe metode: Basic, Digest, Kerberos sau NTLM;
- posibilitatea de a restricționa domeniul de scanare (domeniu, folder, pagină, URL);
- ștergerea automată a unuia dintre parametrii din URL;
- măsuri multiple de precauție împotriva loop-urilor infinite de scanare (de exemplu: ifor, restricționarea valorilor pentru parametru);
- posibilitatea de a stabili un priorități pentru studierea URL-urilor (chiar dacă nu se află în domeniul de scanare);
- posibilitatea de a exclude anumite URL-uri din scanare și atacuri (de exemplu: URL logout);
- importul fișierelor cookie (obținerea acestora cu ajutorul instrumentului wapiti-getcookie);
- posibilitatea de a activa / dezactiva verificarea certificatelor SSL;
- posibilitatea de a extrage URL-uri din JavaScript (un interpret JS foarte simplu);
- interacțiune cu HTML5;
- mai multe opțiuni pentru gestionarea comportamentului și restricțiilor crawler-ului;
- întârzirea maximă pentru procesul de scanare;
- adăugarea unor antete HTTP personalizabile sau configurarea unui User-Agent personalizat.
Funcționalități suplimentare:
- generarea de rapoarte de vulnerabilitate în diverse formate (HTML, XML, JSON, TXT);
- suspendarea și reluarea scanării sau atacului (mecanism de sesiune folosind baze de date SQLite3);
- evidențiere în terminal pentru a marca vulnerabilitatea;
- niveluri variate de logare;
- o modalitate rapidă și simplă de activare / dezactivare a modulelor de atac.
Instalare
Versiunea actuală a Wapiti poate fi instalată în 2 moduri:
- descărcând sursa de pe oficialul și rulând scriptul de instalare, după ce a fost instalat Python3;
- prin comanda pip3 install wapiti3.
După aceasta, Wapiti va fi gata de utilizare.
Lucrul cu instrumentul
Pentru a demonstra funcționarea Wapiti, vom folosi un stand special pregătit sites.vulns.pentestit.ru (resursă internă), care conține diverse vulnerabilități (Injection, XSS, LFI/RFI) și alte deficiențe ale aplicațiilor web.
Informațiile sunt furnizate exclusiv în scopuri informative. Nu încălcați legislația!
Comanda de bază pentru a rula scannerul:
# wapiti -u <target> <options>Există o documentație destul de detaliată cu o mulțime de opțiuni de rulare, de exemplu:
—scope — domeniul de aplicare
Dacă, împreună cu URL-ul pentru scanare, se specifică parametrul scope, se poate regla domeniul de scanare al site-ului, indicând fie o pagină individuală, fie toate paginile care pot fi găsite pe site.
-s și -x — parametrii pentru adăugarea sau eliminarea unor URL-uri specifice. Acești parametri sunt utili atunci când este necesar să se adauge sau să se elimine un URL specific în timpul procesului de scanare.
—skip — parametrul specificat cu această cheie va fi scanat, dar nu va fi atacat. Utile dacă există anumite parametrii periculoși care ar fi mai bine excluși în timpul scanării.
—verify-ssl — activarea sau dezactivarea verificării certificatului.
Scannerul Wapiti este modular. Totuși, pentru a rula module specifice, din cele care sunt conectate automat în timpul funcționării scannerului, trebuie utilizat parametrul -m și enumerate cele necesare prin virgulă. Dacă parametrul nu este utilizat, vor funcționa în mod implicit toate modulele. În cea mai simplă variantă, aceasta va arăta astfel:
# wapiti -u http://sites.vulns.pentestit.ru/ -m sql,xss,xxeAcest exemplu de utilizare înseamnă că vom folosi doar modulele SQL, XSS și XXE atunci când scanăm ținta. În plus, putem filtra funcționarea modulelor în funcție de metoda dorită. De exemplu -m “xss: get, blindsql: post, xxe: post”. În acest caz, modulul xss va fi aplicat cererilor trimise prin metoda GET, iar modulul blibdsql — la cererile POST etc. De altfel, dacă un anumit modul, care a fost inclus pe listă, nu a fost necesar în timpul scanării sau funcționează foarte lent, apăsând combinația Ctrl+C putem să sărim peste utilizarea modulului curent, alegând opțiunea corespunzătoare din meniul interactiv.
Wapiti suportă transmiterea cererilor prin intermediul unui server proxy folosind cheia -p și autentificarea pe site-ul țintă prin parametru -a. De asemenea, se poate specifica tipul de autentificare: Basiс, Digest, Kerberos și NTLM. Pentru ultimele două poate fi nevoie de instalarea unor module suplimentare. În plus, se pot insera în cereri orice anteturi (inclusiv unul arbitrar User-Agent) și multe altele.
Pentru utilizarea autentificării se poate folosi instrumentul wapiti-getcookie. Cu ajutorul acestuia formăm cookie, pe care Wapiti îl va folosi în timpul scanării. Formarea cookie se face cu comanda:
# wapiti-getcookie -u http://sites.vulns.pentestit.ru/login.php -c cookie.jsonÎn timpul funcționării în modul interactiv răspundem la întrebări și indicăm informațiile necesare, cum ar fi: nume de utilizator, parolă și altele:

La ieșire obținem un fișier în format JSON. O altă variantă — adăugarea tuturor informațiilor necesare prin intermediul parametrului -d:
# wapiti-getcookie - http://sites.vulns.pentestit.ru/login.php -c cookie.json -d "username=admin&password=admin&enter=submit"Rezultatul va fi similar:

Când analizăm funcționalitatea principală a scanner-ului, cererea finală pentru testarea aplicației web în cazul nostru a fost:
# wapiti --level 1 -u http://sites.vulns.pentestit.ru/ -f html -o /tmp/vulns.html -m all --color -с cookie.json --scope folder --flush-session -A 'Pentestit Scans' -p http://proxy.office.pentestit.ru:3128unde, printre altele, parametrii:
-f și -o — formatul și calea pentru salvarea raportului;
-m — conectarea tuturor modulelor — nu este recomandat, deoarece va influența timpul de testare și dimensiunea raportului;
—color — evidențierea vulnerabilităților găsite în funcție de severitatea acestora conform versiunii Wapiti;
-c — utilizarea unui fișier cu cookie, generat cu ajutorul wapiti-getcookie;
—scope — alegerea țintei pentru atac. Alegând opțiunea folder se va scana și ataca fiecare URL, începând de la baza. URL-ul de bază trebuie să aibă o bară oblică (fără numele fișierului);
—flush-session — permite efectuarea unei scanări repetate, în care rezultatele anterioare nu vor fi luate în considerare;
-A — propriu User-Agent;
-p — adresa serverului proxy, dacă este necesar.
Câteva informații despre raport
Rezultatul scanării este prezentat sub formă de raport detaliat privind toate vulnerabilitățile găsite, în format de pagină HTML, într-un mod clar și ușor de înțeles. În raport vor fi indicate categoriile și numărul de vulnerabilități găsite, descrierile acestora, solicitările, comenzile pentru curl și sfaturi despre cum să le remediezi. Pentru ușurința navigării, în titlurile categoriilor va fi adăugat un link prin care se poate accesa:

Un dezavantaj semnificativ al raportului este lipsa unei hărți a aplicației web, fără de care nu va fi clar dacă toate adresele și parametrii au fost analizați. De asemenea, există riscul de alarme false. În cazul nostru, în raport sunt incluse "fișiere de backup" și "fișiere potențial periculoase". Numărul acestora nu corespunde realității, deoarece nu existau astfel de fișiere pe server:

Este posibil ca modulele care funcționează incorect să fie corectate în timp. De asemenea, un alt dezavantaj al raportului este lipsa colorării vulnerabilităților găsite (în funcție de criticialitate), sau măcar clasificarea acestora pe categorii. Singurul mod prin care putem înțelege indirect criticialitatea unei vulnerabilități găsite este aplicarea parametrului —color în timpul scanării și atunci vulnerabilitățile găsite vor fi colorate în diverse culori:

Dar în raportul propriu-zis, o astfel de colorare nu este prevăzută.
Vulnerabilități
SQLi
Scannerul a reușit parțial să identifice SQLi. Atunci când caută vulnerabilități SQL pe paginile unde nu este necesară autentificarea, nu apar probleme:

Nu a fost posibil să se identifice vulnerabilitățile pe paginile accesibile numai după autentificare, chiar și cu utilizarea unor date valide cookie, deoarece probabil că după autentificarea reușită va avea loc "ieșirea din sesiune" și cookie vor deveni invalide. Dacă funcția de deautentificare ar fi fost implementată ca un script separat responsabil pentru gestionarea acestei proceduri, s-ar fi putut exclude complet prin parametrul -x, prevenind astfel activarea acesteia. În caz contrar, nu va fi posibil să se excludă procesarea sa. Aceasta nu este o problemă specifică unui anumit modul, ci a instrumentului în ansamblu, dar din cauza acestui detaliu nu s-au putut descoperi mai multe injecții în zona închisă a resursei.
XSS
Scannerul a gestionat excelent sarcina dată și a identificat toate vulnerabilitățile pregătite:

LFI/RFI
Scannerul a găsit toate vulnerabilitățile ascunse:

În general, în ciuda alarmelor false și a omisiunilor de vulnerabilități, Wapiti, ca instrument gratuit, oferă rezultate destul de bune. Oricum, este important de recunoscut că scannerul este destul de puternic, flexibil și multifuncțional, iar cel mai important — gratuit, așa că merită utilizat, ajutând administratorii și dezvoltatorii să obțină informații de bază despre starea de securitate a aplicațiilor web.
Rămâneți sănătoși și în siguranță!
Sursa: habr.com
