Wapiti - праверка сайта на ўразлівасці сваімі сіламі
У мінулым артыкуле мы распавялі аб Nemesida WAF Free - бясплатнай прыладзе для абароны сайтаў і API ад хакерскіх нападаў, а ў гэтай вырашылі зрабіць агляд папулярнага сканара ўразлівасцяў Вапіці.
Сканіраванне сайта на ўразлівасці - неабходная мера, якая, разам з аналізам зыходнага кода, дазваляе ацаніць узровень яго абароненасці ад пагроз кампраметацыі. Выканаць сканіраванне вэб-рэсурсу можна з дапамогай спецыялізаванага інструментара.
Nikto, W3af (напісаны на Python 2.7, падтрымка якога скончылася) або Arachni (з лютага больш не падтрымліваецца) - найболей папулярныя рашэнні, прадстаўленыя ў бясплатным сегменце. Зразумела, ёсць і іншыя, напрыклад, Wapiti, на якім мы вырашылі спынімся.
Wapiti працуе з наступнымі тыпамі ўразлівасцяў:
расчыненне файла (лакальныя і выдаленыя, fopen, readfile);
ін'екцыі (PHP / JSP / ASP / SQL-ін'екцыі і XPath-ін'екцыі);
XSS (міжсайтавы скрыптынг) (адлюстраваная і пастаянная);
выяўленне і выкананне каманд (eval(), system(), passtru() );
выкарыстанне вядомых патэнцыйна небяспечных файлаў (дзякуючы базе даных Nikto);
слабыя канфігурацыі .htaccess, якія можна абыйсці;
наяўнасць файлаў рэзервовых копій, якія раскрываюць канфідэнцыйную інфармацыю (раскрыццё зыходнага кода);
Shellshock;
адкрытыя перанакіраванні;
нестандартныя метады HTTP, якія могуць быць дазволены (PUT).
магчымасці:
падтрымка проксі HTTP, HTTPS і SOCKS5;
аўтэнтыфікацыя з дапамогай некалькіх метадаў: Basic, Digest, Kerberos ці NTLM;
магчымасць абмежаваць вобласць сканавання (дамен, тэчка, старонка, URL-адрас);
аўтаматычнае выдаленне аднаго з параметраў у URL;
множныя меры засцярогі супраць бясконцых цыклаў сканавання (прыклад: ifor, абмежаванне значэнняў для параметра);
магчымасць усталёўкі прыярытэту для вывучэння URL-адрасоў (нават калі не знаходзяцца ў вобласці сканавання);
магчымасць выключыць некаторыя URL-адрасы са сканавання і нападаў (напрыклад: URL logout);
імпарт файлаў cookie (атрыманне іх з дапамогай прылады wapiti-getcookie);
магчымасць актываваць / дэактываваць праверку сертыфікатаў SSL;
магчымасць атрымаць URL з JavaScript (вельмі просты JS-інтэрпрэтатар);
узаемадзеянне з HTML5;
некалькі варыянтаў кіравання паводзінамі і абмежаваннямі crawler'a;
усталёўка максімальнага часу для працэсу сканавання;
даданне некаторых наладжвальных HTTP-загалоўкаў або налада карыстацкага User-Agent.
Дадатковыя магчымасці:
стварэнне справаздач аб уразлівасцях у розных фарматах (HTML, XML, JSON, TXT);
прыпыненне і аднаўленне сканавання ці напады (механізм сеансу з выкарыстаннем баз дадзеных SQLite3);
падсвятленне ў тэрмінале для вылучэння ўразлівасці;
розныя ўзроўні лагіравання;
хуткі і просты спосаб актывацыі / дэактывацыі модуляў атакі.
Ўстаноўка
Актуальную версію Wapiti можна ўсталяваць 2 спосабамі:
спампаваць зыходнік з афіцыйнага сайта і запусціць скрыпт усталёўкі, папярэдне ўсталяваўшы Python3;
з дапамогай каманды pip3 install wapiti3.
Пасля гэтага Wapiti будзе готаў да працы.
Праца з інструментам
Для дэманстрацыі працы Wapiti мы будзем выкарыстоўваць спецыяльна падрыхтаваны стэнд sites.vulns.pentestit.ru (унутраны рэсурс), які змяшчае розныя ўразлівасці (Injection, XSS, LFI / RFI) і іншыя недахопы вэб-прыкладанняў.
Інфармацыя прадстаўлена выключна ў азнаямленчых мэтах. Не парушайце заканадаўства!
Базавая каманда для запуску сканара:
# wapiti -u <target> <options>
Пры гэтым маецца даволі падрабязная даведка з вялікай колькасцю опцый запуску, напрыклад:
-scope - вобласць прымянення
Калі разам з URL для сканавання паказаць параметр scope, то можна рэгуляваць вобласць сканавання сайта, паказаўшы як асобную старонку, так і ўсе старонкі, якія атрымаецца знайсці на сайце.
-s и -x - Параметры дадання або выдалення канкрэтных URL-адрасоў. Дадзеныя параметры карысныя, калі неабходна дадаць ці выдаліць пэўны URL-адрас у працэсе сканавання.
-skip - паказаны параметр з гэтым ключом будзе сканавацца, але не будзе атакавацца. Карысна, калі ёсць нейкія небяспечныя параметры, якія лепш выключыць пры сканаванні.
-verify-ssl - уключэнне або адключэнне праверкі сертыфіката.
Сканар Wapiti модульны. Аднак, для запуску пэўных модуляў, з ліку тых, якія аўтаматычна падключаюцца падчас працы сканара, трэба выкарыстоўваць ключ -m і пералічваць патрэбныя праз коску. Калі ключ не выкарыстоўваць, то будуць па змаўчанні працаваць усе модулі. У самым простым варыянце выглядаць гэта будзе наступным чынам:
Дадзены прыклад выкарыстання азначае, што мы будзем выкарыстоўваць толькі модулі SQL, XSS і XXE пры сканаванні мэты. Апроч гэтага, можна фільтраваць працу модуляў у залежнасці ад патрэбнага метаду. Напрыклад -m "xss: get, blindsql: post, xxe: post". У такім выпадку модуль хсс будзе прымяняцца да запытаў, якія перадаюцца метадам GET, а модуль blibdsql - да POST-запытаў і г.д. Дарэчы, калі нейкі модуль, які быў уключаны ў спіс, не запатрабаваўся падчас сканавання ці працуе вельмі доўга, то націснуўшы камбінацыю Ctrl+C можна прапусціць выкарыстанне бягучага модуля, абраўшы які адпавядае пункт у інтэрактыўным меню.
Wapiti падтрымлівае перадачу запытаў праз проксі-сервер з дапамогай ключа -p і аўтэнтыфікацыю на мэтавым сайце праз параметр -a. Таксама можна пазначыць тып аўтэнтыфікацыі: Basiс, Digest, Kerberos и NTLM. Для апошніх двух можа запатрабавацца ўсталёўка дадатковых модуляў. Акрамя таго, можна ўстаўляць у запыты любыя загалоўкі (у тым ліку адвольны Карыстальнік) і многае іншае.
Для выкарыстання аўтэнтыфікацыі можна выкарыстоўваць прыладу wapiti-getcookie. З яго дапамогай мы фармуем печыва, якія Wapiti будзе выкарыстоўваць пры сканаванні. Фарміраванне печыва выконваецца з дапамогай каманды:
Пры разглядзе асноўнага функцыяналу сканара, канчатковым запытам для правядзення тэсціравання вэб-прыкладанні ў нашым выпадку стаў:
# 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:3128
дзе сярод іншых параметраў:
-f и -o - Фармат і шлях для захавання справаздачы;
-m - падлучэнне ўсіх модуляў - не рэкамендуецца, т.к. будзе адбівацца на часе тэсціравання і памеры справаздачы;
-color - падсвятляць знойдзеныя ўразлівасці ў залежнасці ад іх крытычнасці па версіі самога Wapiti;
-c - Выкарыстанне файла з печыва, згенераванага з дапамогай wapiti-getcookie;
-scope - Выбар мэты для нападу. Выбраўшы варыянт папка будзе сканавацца і атакавацца кожны URL, пачынаючы з базавай. Базавы URL павінен мець касую рысу (без імя файла);
-flush-session - дазваляе праводзіць паўторнае сканаванне, пры якім не будуць улічвацца папярэднія вынікі;
-A - уласны Карыстальнік;
-p - адрас проксі-сервера, калі неабходзен.
Трохі аб справаздачы
Вынік сканавання прадстаўлены ў выглядзе падрабязнай справаздачы па ўсіх знойдзеных уразлівасцямі ў фармаце HTML-старонкі, у зразумелым і зручным для ўспрымання выглядзе. У справаздачы будуць указаны катэгорыі і колькасць знойдзеных уразлівасцяў, іх апісанне, запыты, каманды для завітак і парады аб тым, як іх закрыць. Для зручнасці навігацыі ў назвы катэгорый будзе дабаўляцца спасылка, клікнуўшы па якой можна перайсці да яе:
Істотны мінус справаздачы - адсутнасць як такой карты вэб-прыкладанні, без якой не будзе зразумела, ці ўсе адрасы і параметры былі прааналізаваны. Таксама ёсць верагоднасць ілжывых спрацоўванняў. У нашым выпадку ў справаздачы фігуруюць "файлы бэкапаў" і "патэнцыйна небяспечныя файлы". Іх колькасць не адпавядае рэчаіснасці, бо падобных файлаў на серверы не было:
Магчыма, некарэктна якія працуюць модулі выправяць са часам. Таксама недахопам справаздачы можна назваць адсутнасць афарбоўкі знойдзеных уразлівасцяў (у залежнасці ад іх крытычнасці), ці хаця б іх падзелы па катэгорыях. Адзінае, як мы можам ускосна зразумець аб крытычнасці знойдзенай уразлівасці - гэта ўжываць параметр -color пры сканаванні і тады знойдзеныя ўразлівасці будуць афарбоўвацца рознымі колерамі:
Але ў самой справаздачы падобная афарбоўка не прадугледжана.
ўразлівасці
SQLi
Сканар часткова зладзіўся з пошукам SQLi. Пры пошуку SQL-уразлівасцяў на старонках, дзе не патрабуецца аўтэнтыфікацыя, ніякіх праблем не ўзнікае:
Не атрымалася знайсці ўразлівасць на старонках, даступных толькі пасля аўтэнтыфікацыі, нават з выкарыстаннем валідных печыва, бо хутчэй за ўсё пасля паспяховай аўтэнтыфікацыі будзе зроблены "выхад іх сесіі" і печыва стануць несапраўднымі. Калі б функцыя дэаўтарызацыі была выканана ў выглядзе асобнага скрыпту, які адказвае за апрацоўку гэтай працэдуры, то можна было б цалкам выключыць яго праз параметр -x, і тым самым прадухіліць яго спрацоўванне. У адваротным выпадку выключыць яго апрацоўку не атрымаецца. Гэта праблема не канкрэтнага модуля, а інструмента ў цэлым, але з-за гэтага нюансу не ўдалося выявіць некалькі ін'екцый у закрытай вобласці рэсурсу.
XSS
З зададзенай задачай сканер выдатна зладзіўся і знайшоў усе падрыхтаваныя ўразлівасці:
LFI/RFI
Сканар знайшоў усе закладзеныя ўразлівасці:
У цэлым, нягледзячы на ілжывыя спрацоўванні і пропускі ўразлівасцяў, Wapiti, як бясплатная прылада, паказвае даволі нядрэнныя вынікі працы. У любым выпадку варта прызнаць, што сканер даволі магутны, гнуткі і шматфункцыянальны, а галоўнае - бясплатны, таму мае права на выкарыстанне, дапамагаючы адміністратарам і распрацоўшчыкам атрымліваць базавую інфармацыю аб стане абароненасці вэб-прыкладанні.