КампутарыПраграмаванне

Што такое ін'екцыя SQL?

Колькасць сайтаў і старонак у Сеткі няўхільна расце. За распрацоўку бяруцца ўсе, хто толькі можа. І пачаткоўцы вэб-праграмісты вельмі часта выкарыстоўваюць небяспечны і стары код. А гэта стварае масу пралазаў для зламыснікаў і хакераў. Чым яны і карыстаюцца. Адна з самых класічных уразлівасцяў - SQL-ін'екцыя.

крыху тэорыі

Шмат хто ведае, што большасць сайтаў і сэрвісаў у сеткі выкарыстоўваюць для захоўвання базы SQL. Гэта такі мова структураваных запытаў , які дазваляе кіраваць і адміністраваць сховішчы з дадзенымі. Вядома шмат розных версій сістэм менеджменту базамі дадзеных - Oracle, MySQL, Postgre. Па-за залежнасці ад імя і тыпу, яны аднолькава выкарыстоўваюць запыты да дадзеных. Менавіта тут і крыецца патэнцыйная ўразлівасць. Калі распрацоўшчык не змог правільна і бяспечна апрацаваць запыт, то зламыснік можа скарыстацца гэтым і прымяніць асаблівыя тактыкі для атрымання доступу да базы, а адтуль - і да кіравання ўсім сайтам.

Для пазбягання такіх сітуацый трэба пісьменна аптымізаваць код і ўважліва сачыць за тым, які запыт якім спосабам апрацоўваецца.

Праверка на SQL-ін'екцыі

Для ўстанаўлення наяўнасці ўразлівасці ў сетцы маецца маса гатовых аўтаматызаваных праграмных комплексаў. Але можна ажыццявіць простую праверку і ўручную. Для гэтага трэба перайсці на адзін з доследных сайтаў і ў адраснай радку паспрабаваць выклікаць памылку базы дадзеных. Да прыкладу, скрыпт на сайце можа не апрацоўваць запыты і не абрэзаць іх.

Напрыклад, ёсць некий_сайт / index.php? Id = 25

Самы лёгкі спосаб - паставіць пасля 25 двукоссе і адправіць запыт. Калі ніякай памылкі не ўзнікла, то альбо на сайце фільтруюцца ўсе запыты і правільна апрацоўваюцца, альбо ў наладах адключаны іх вывад. Калі старонка перазагрузіць з праблемамі, значыць, ўразлівасць для SQL-ін'екцыі ёсць.

Пасля таго як яна выяўленая, можна спрабаваць пазбавіцца ад яе.

Для рэалізацыі дадзенай уразлівасці трэба ведаць крыху пра камандах SQL-запытаў. Адна з іх - UNION. Яна аб'ядноўвае некалькі вынікаў запыту ў адзін. Так можна вылічыць колькасць палёў у табліцы. Прыклад першага запыту выглядае так:

  • некий_сайт / index.php? id = 25 UNION SELECT 1.

У большасці выпадкаў такая запіс павінна выдаць памылку. Гэта значыць, што колькасць палёў не роўна 1. Такім чынам, падбіраючы варыянты ад 1 і больш, можна ўсталяваць іх дакладная колькасць:

  • некий_сайт / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.

Гэта значыць, калі памылка перастане з'яўляцца, значыць, колькасць палёў адгадана.

Ёсць таксама і альтэрнатыўны варыянт вырашэння гэтай праблемы. Напрыклад, калі лік палёў вялікае - 30, 60 ці 100. Гэта каманда GROUP BY. Ён групуе вынікі запыту па якой-небудзь прыкмеце, напрыклад id:

  • некий_сайт / index.php? id = 25 GROUP BY 5.

Калі памылак не было атрымана, значыць, палёў больш, чым 5. Такім чынам, падстаўляючы варыянты з даволі шырокага дыяпазону, можна вылічыць, колькі ж іх на самой справе.

Дадзены прыклад SQL-ін'екцыі - для пачаткоўцаў, якія хочуць паспрабаваць сябе ў тэставанні свайго сайта. Важна памятаць, што за несанкцыянаваны доступ да чужога маецца артыкул Крымінальнага кодэкса.

Асноўныя тыпы ін'екцый

Рэалізаваць уразлівасці з дапамогай SQL-ін'екцыі можна некалькімі варыянтамі. Далей ідуць найбольш папулярныя методыкі:

  • UNION Query SQL Injection. Просты прыклад дадзенага тыпу быў ужо разгледжаны вышэй. Рэалізуецца ён за кошт памылкі ў праверцы што прыходзяць дадзеных, якія ніяк не фільтруюцца.

  • Error-based SQL injection. Як зразумела з назвы, дадзены тып таксама выкарыстоўвае памылкі, пасылаючы выразы, складзеныя сінтаксічна няправільна. Затым адбываецца перахоп загалоўкаў адказу, аналізуючы якія, можна правесці пасля SQL-ін'екцыю.

  • Stacked queries SQL Injection. Дадзеная ўразлівасць вызначаецца выкананнем паслядоўных запытаў. Характарызуецца ён далучэннем ў канцы знака «;». Гэты падыход часцей рэалізуецца для доступу да рэалізацыі чытання і запісы дадзеных або жа кіраваннем функцыямі аперацыйнай сістэмы, калі прывілеі гэта дазваляюць.

Праграмныя комплексы для пошуку SQL-уразлівасцяў

Якія існуюць для правядзення SQL-ін'екцый, праграмы звычайна маюць дзве складнікаў - сканаванне сайта на магчымыя уразлівасці і іх выкарыстанне для атрымання доступу да дадзеных. Існуюць такія ўтыліты практычна для ўсіх вядомых платформаў. Іх функцыянал у значнай меры палягчае праверку сайта на магчымасць узлому SQL-ін'екцыяй.

Sqlmap

Вельмі магутны сканер, які працуе з большасцю вядомых СКБД. Падтрымлівае розныя методыкі ўкаранення SQL-ін'екцый. Мае магчымасць аўтаматычнага распазнавання тыпу хэша пароля і яго ўзлому па слоўніку. Прысутнічае і функцыянал загрузкі і выгрузкі файлаў з сервера.

Ўстаноўка ў асяроддзі Linux выконваецца з дапамогай каманд:

  • git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • cdsqlmap-dev /,
  • ./sqlmap.py --wizard.

Для Windows маецца як варыянт з камандным радком, так і з графічным інтэрфейсам карыстальніка.

jSQL Injection

jSQL Injection - кросплатформавы інструмент для тэставання выкарыстання SQL уразлівасцяў. Напісаны на Java, таму ў сістэме павінен быць усталяваны JRE. Здольны апрацоўваць запыты GET, POST, header, cookie. Валодае зручным графічным інтэрфейсам.

Ўстаноўка дадзенага праграмнага комплексу адбываецца так:

wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | grep-E -o '/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] {1,2}. [0-9] {1,2} .jar '| head-n 1`

Запуск ажыццяўляецца з дапамогай каманды java -jar ./jsql-injection-v*.jar

Для таго каб пачаць праверку сайта на SQL-уразлівасць, трэба ўвесці яго адрас у верхняе поле. Яны ёсць асобныя для GET і для POST. Пры станоўчым выніку ў левым акне з'явіцца спіс даступных табліц. Іх можна пабачыць і даведацца нейкую канфідэнцыйную інфармацыю.

Для пошуку адміністрацыйных панэляў выкарыстоўваецца ўкладка «Admin page». На ёй з дапамогай спецыяльных шаблонаў выконваецца аўтаматычны пошук сістэмных запісаў прывілеяваных карыстальнікаў. З іх можна атрымаць усяго толькі хэш пароля. Але і ён маецца ў інструментары праграмы.

Пасля знаходжання ўсіх уразлівасцяў і инъектирования патрэбных запытаў, ўтыліта дазволіць заліць на сервер свой файл або жа, наадварот, спампаваць яго адтуль.

SQLi Dumper v.7

Дадзеная праграма - просты ў выкарыстанні інструмент для пошуку і рэалізацыі уразлівасцяў у SQL. Вырабляе оон гэта на аснове так званых дорков. Іх спісы можна знайсці ў інтэрнэце. Дорки для SQL-ін'екцый - гэта адмысловыя шаблоны пошукавых запытаў. З іх дапамогай можна знайсці патэнцыйна ўразлівы сайт праз любы пошукавік.

Інструменты для трэніроўкі

На сайце itsecgames.com маецца адмысловы набор інструментара, які дазваляе на прыкладзе паказвае як зрабіць SQL ін'екцыю і пратэставаць яе. Для таго каб скарыстацца, яе трэба спампаваць і ўсталяваць. Архіў змяшчае ў сабе набор файлаў, які ўяўляе сабой структуру сайта. Для яго ўстаноўкі спатрэбіцца існуючы ў сістэме набор вэб-сервера Apache, MySQL і PHP.

Распакаваўшы архіў у тэчку вэб-сервера, трэба перайсці па адрасе, уведзены пры ўсталёўцы дадзенага праграмнага прадукту. Адкрыецца старонка з рэгістрацыяй карыстальніка. Тут трэба ўвесці свае дадзеныя і націснуць «Create». Перавядучы карыстальніка ў новае акно, сістэма прапануе выбраць адзін з варыянтаў тэставання. Сярод іх маецца як апісваныя ін'екцыі, так і шмат іншых тэставых заданняў.

Варта разгледзець прыклад SQL-ін'екцыі тыпу GET / Search. Тут трэба абраць яе і націснуць «Hack». Перад карыстачом паўстане радок пошуку і імітацыя нейкага сайта з фільмамі. Перабіраць фільмы можна доўга. Але іх усяго 10. Да прыкладу, можна паспрабаваць ўвесці Iron Man. Вывядзецца фільм, значыць, сайт працуе, і табліцы, у ім ёсьць. Цяпер трэба праверыць, фільтруе Ці скрыпт асаблівыя сімвалы, у прыватнасці двукоссе. Для гэтага ў радок адрасу трэба дадаць ' ». Прычым, зрабіць гэта трэба пасля назвы фільма. Сайт выдасць памылку Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%' 'at line 1, якая абвяшчае пра тое, што знакі ўсё-ткі апрацоўваюцца няправільна. Значыць, можна спрабаваць падставіць свой запыт. Але трэба спачатку вылічыць колькасць палёў. Для гэтага выкарыстоўваецца order by, які ўводзіцца пасля двукоссі: http://testsites.com/sqli_1.php?title=Iron+Man 'order by 2 - & action = search.

Дадзеная каманда проста выведзе звесткі пра фільм, гэта значыць колькасць палёў больш 2. Падвойны злучок паведамляе серверу, што астатнія запыты трэба адкінуць. Цяпер трэба перабіраць, падстаўляючы усе вялікія значэння да таго часу, пакуль не вывядзецца памылка. У выніку атрымаецца, што палёў будзе 7.

Цяпер настаў час атрымаць нешта карыснае з базы. Прыйдзецца трохі мадыфікаваць запыт у адраснай радку, прывёўшы яе да такога выгляду: http://testsites.com/sqli_1.php?title=Iron+Man 'union select 1, database (), user (), 4, password, 6, 7 from users - & action = search. У выніку яе выканання выведуцца радкі з хэшами пароляў, якія можна лёгка ператварыць у зразумелыя сімвалы з дапамогай аднаго з анлайн сэрвісаў. А крыху павядзьмарыўшы і падабраўшы імя поля з лагінам, можна атрымаць доступ да чужой запісу, напрыклад адміна сайта.

У прадукце маецца маса разнавіднасцяў тыпаў ін'екцый, на якіх можна папрактыкавацца. Варта памятаць, што ўжыванне дадзеных навыкаў у сеткі, на рэальных сайтах можа апынуцца крымінальна каральным.

Ін'екцыі і PHP

Як правіла, менавіта PHP-код і адказвае за неабходную апрацоўку запытаў, якія прыходзяць ад карыстальніка. Таму менавіта на гэтым узроўні трэба выбудоўваць абарону ад SQL-ін'екцый у PHP.

Для пачатку варта даць некалькі простых рэкамендацый, на аснове якіх трэба гэта рабіць.

  • Дадзеныя заўсёды павінны быць апрацаваны перад памяшканнем у базу. Гэта можна рэалізаваць альбо выкарыстоўваючы ўжо наяўныя выразы, альбо арганізоўваючы запыты ўручную. Тут таксама варта ўлічваць, што лікавыя значэнні ператвараюцца да таго тыпу, які неабходны;
  • Пазбягаць ў запыце з'яўлення розных кіраўнікоў канструкцый.

Зараз трохі аб правілах складання запытаў у MySQL для абароны ад SQL-ін'екцый.

Пры складанні якіх-небудзь выразаў для запыту важна аддзяляць дадзеныя ад ключавых слоў SQL.

  • SELECT * FROM table WHERE name = Zerg.

У дадзенай канструкцыі сістэма можа падумаць, што Zerg - гэта імя якога-небудзь поля, таму трэба заключыць яго ў двукоссі.

  • SELECT * FROM table WHERE name = 'Zerg'.

Аднак, бываюць сітуацыі, калі значэнне само па сабе ўтрымлівае двукоссі.

  • SELECT * FROM table WHERE name = 'Кот-д'Івуар'.

Тут апрацаваны толькі частка кот-д, а астатняя можа быць успрынята як каманда, якой, натуральна, няма. Таму паўстане памылка. Значыць трэба такога роду дадзеныя экраніровать. Для гэтага выкарыстоўваецца зваротны слэш - \.

  • SELECT * FROM table WHERE name = 'кот-д \' ивуар '.

Усё вышэйпералічанае ставіцца да радках. Калі дзеянне адбываецца з лікам, то яму не патрэбныя ні двукоссі ні слэш. Аднак іх трэба абавязкова ў прымусовым парадку прыводзіць да неабходнага тыпе дадзеных.

Існуе рэкамендацыя, па якой імя поля павінна быць складзена ў адваротны двукоссе. Гэты сімвал знаходзіцца ў левай частцы клавіятуры, разам са знакам тыльда «~». Гэта трэба для таго, каб MySQL магла дакладна адрозніць імя поля ад свайго ключавога слова.

Дынамічная праца з дадзенымі

Вельмі часта для атрымання якіх-небудзь дадзеных з базы выкарыстоўваюцца запыты, сфармаваныя дынамічна. напрыклад:

  • SELECT * FROM table WHERE number = '$ number'.

Тут зменная $ number перадаецца ў якасці вызначэння значэння поля. Што ж будзе, калі ў яе патрапіць 'Кот-д'Івуар'? Памылка.

Пазбегнуць дадзенай непрыемнасці, вядома, можна уключыўшы «чароўныя двукоссі» у наладах. Але цяпер дадзеныя будуць экранаваны там, дзе трэба і не трэба. Да таго ж калі код пішацца ўручную, то можна выдаткаваць трохі больш часу на тое, каб стварыць устойлівую да ўзлому сістэму самому.

Для самастойнага дадання слэша можна выкарыстоўваць mysql_real_escape_string.

$ Number = mysql_real_escape_string ($ number);

$ Year = mysql_real_escape_string ($ year);

$ Query = "INSERT INTO table (number, year, class) VALUES ( '$ number', '$ year', 11)".

Хоць код і вырас у аб'ёме, усё ж, патэнцыйна ён будзе працаваць значна бяспечней.

Плейсхолдеры

Плейсхолдеры - своеасаблівыя маркеры, па якіх сістэма даведаецца што ў гэтае месца трэба падставіць спецыяльную функцыю. напрыклад:

$ Sate = $ mysqli-> prepare ( "SELECT District FROM Number WHERE Name =?");

$ Sate-> bind_param ( "s", $ number);

$ Sate-> execute ();

Дадзены ўчастак кода праводзіць падрыхтоўку шаблону запыту, затым прывязвае зменную number, і выконвае яго. Дадзены падыход дазваляе падзяліць апрацоўку запыту і яго рэалізацыю. Такім чынам, можна засцерагчыся ад выкарыстання ўкаранення шкоднаснага кода ў SQL-запыты.

Што можа зрабіць зламыснік

Абарона сістэмы - вельмі важны фактар, якім нельга грэбаваць. Вядома, прасценькі сайт-візітоўку будзе прасцей аднавіць. А калі гэта вялікі партал, сэрвіс, форум? Якія наступствы могуць быць, калі не думаць пра бяспеку?

Па-першае, хакер можа парушыць як цэласнасць базы, так і выдаліць яе цалкам. І калі адміністратар сайта або хостер не зрабілі бэкап, то прыйдзецца несалодка. Апроч усяго, зламыснік, узламаўшы адзін сайт, можа перайсці на іншыя, размешчаныя на гэтым жа серверы.

Далей ідзе крадзеж асабістых дадзеных наведвальнікаў. Як іх выкарыстаць - тут усё абмяжоўваецца толькі фантазіяй хакера. Але ў любым выпадку наступствы будуць ня надта прыемнымі. Тым больш калі змяшчалася фінансавая інфармацыя.

Таксама зламыснік можа зліць базу сабе, а затым вымагаць грошы за яе вяртанне.

Дэзінфармацыя карыстальнікаў ад імя адміністратара сайта, тварам ім не з'яўляюцца, таксама можа несці негатыўныя наступствы, бо магчымыя факты махлярства.

заключэнне

Уся інфармацыя ў дадзеным артыкуле прадастаўлена выключна ў азнаямленчых мэтах. Выкарыстоўваць яе трэба толькі для тэставання ўласных праектаў пры выяўленні ўразлівасцяў і іх ліквідацыі.

Для больш паглыбленага вывучэння методыкі таго, як правесці SQL-ін'екцыю, трэба пачаць уласна з даследавання магчымасцяў і асаблівасцяў мовы SQL. Як складаюцца запыты, ключавыя словы, тыпы дадзеных і прымяненне усяго гэтага.

Таксама не абысціся без разумення працы функцый PHP і элементаў HTML. Асноўнымі уразлівымі кропкамі для выкарыстання ін'екцый - адрасная радок, пошук і розныя поля. Вывучэнне функцый PHP, спосаб іх рэалізацыі і магчымасці дазволяць зразумець, як можна пазбегнуць памылак.

Наяўнасць мноства гатовых праграмных інструментаў дазваляюць правесці глыбокі аналіз сайта на вядомыя ўразлівасці. Адзін з найбольш папулярных прадуктаў - kali linux. Гэта вобраз аперацыйнай сістэмы на базе Linux, які змяшчае ў сабе вялікая колькасць утыліт і праграм, здольных правесці рознабаковы аналіз сайта на трываласць.

Для чаго трэба ведаць, як ўзламаць сайт? Усё вельмі проста - гэта трэба для таго, каб мець уяўленне аб патэнцыйна уразлівых месцах свайго праекта або сайта. Асабліва калі гэта які-небудзь інтэрнэт-крама з магчымасцю аплаты анлайн, дзе плацежныя дадзеныя карыстальніка могуць быць скампраметаваныя зламыснікам.

Для прафесійнага даследаванні існуюць службы інфармацыйнай бяспекі змогуць праверыць сайт па розных крытэрах і глыбіні. Пачынаючы ад простай HTML-ін'екцыі і да сацыяльнай інжынерыі і фішынгу.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 be.unansea.com. Theme powered by WordPress.