КомпјутериПрограмирање

Што е SQL инјекција?

Бројот на страници и страници на интернет постојано расте. За развој се преземени од страна на сите кои можат. И почетниците веб-програмери често користат небезбеден и стар код. И ова создава многу дупки за натрапниците и хакерите. Тогаш тие исто така го користат. Една од најкарактеристичните пропусти е SQL инјектирањето.

Малку теорија

Многу луѓе знаат дека повеќето од сајтовите и услугите на мрежата користат SQL за чување на базата на податоци. Ова е структуриран јазик за пребарување, кој ви овозможува да управувате и да управувате со продавници на податоци. Постојат многу различни верзии на системи за управување со бази на податоци - Oracle, MySQL, Postgre. Без оглед на името и видот, тие подеднакво ги користат барањата за податоци. Тука се наоѓа потенцијалната ранливост. Ако развивачот не може правилно и безбедно да го обработи барањето, напаѓачот може да го искористи тоа и да примени специјални тактики за да добие пристап до базата на податоци, а оттаму до раководството на целата страница.

За да избегнете такви ситуации, треба интелигентно да го оптимизирате кодот и внимателно да ги следите кои прашања се обработуваат на кој начин.

SQL инјекција тест

За да се утврди присуството на ранливост во мрежата, постојат многу готови автоматизирани софтверски системи. Но, можете едноставно да го извршите едноставниот тест. За да го направите ова, одете на едно од сајтовите под истрага и обидете се да предизвикате грешка во базата на податоци во лентата за адреси. На пример, скрипта на некој сајт не може да ги обработува барањата и не ги исече.

На пример, постои some_site / index.php? Id = 25

Најлесен начин е да се стави по 25 цитати и да се испрати барање. Ако не се појави грешка, тогаш сите барања се филтрирани на страницата и се обработуваат правилно, или излезот е оневозможен во поставките. Ако страницата се рестартира со проблеми, тогаш постои ранливост за SQL инјекција.

Откако ќе се пронајде, можете да се обидете да се ослободите од него.

За спроведување на оваа ранливост, треба да знаете малку за SQL командите за пребарување. Една од нив е УНИЈА. Таа комбинира неколку резултати за пребарување во една. Значи, можете да го пресметате бројот на полиња во табелата. Примерот на првото барање изгледа вака:

  • Some_site / index.php? Id = 25 UNION SELECT 1.

Во повеќето случаи, таков запис треба да предизвика грешка. Ова значи дека бројот на полиња не е еднаков на 1. Така, изборот на опции од 1 и повеќе, можете да го поставите нивниот точен број:

  • Some_site / index.php? Id = 25 UNION SELECT 1,2,3,4,5,6.

Тоа е, кога грешката престанува да се појавува, тоа значи дека се претпоставува бројот на полиња.

Исто така, постои алтернативно решение за овој проблем. На пример, кога бројот на полиња е голем - 30, 60 или 100. Ова е командата GROUP BY. Ги групира резултатите од барањето според некоја карактеристика, на пример id:

  • Some_site / index.php? Id = 25 ГРУПА ОД 5.

Ако грешките не се примени, тогаш има повеќе полиња од 5. Така, замена на варијанти од прилично широк опсег, можно е да се пресмета колку од нив всушност се.

Овој пример на инјектирање на SQL е за почетници кои сакаат да се обидат да ги тестираат своите сајтови. Важно е да се запамети дека за неовластен пристап до некој друг постои статија од Кривичниот законик.

Главните видови на инјекции

Имплементацијата на слабостите преку инјектирање на SQL може да се направи на неколку начини. Следни се најпопуларните техники:

  • UNION пребарување SQL инјекција. Едноставен пример за овој тип е веќе разгледан погоре. Се спроведува поради грешка при проверка на дојдовните податоци, што не е филтрирано на кој било начин.

  • SQL инјекција базирана на грешка. Како што сугерира името, овој тип исто така користи грешки, испраќајќи изрази кои се синтаксички неточни. Потоа, заглавените одговорите се пресретнати, анализирајќи кои, подоцна можете да ја извршите SQL инјекцијата.

  • Складирани пребарувања SQL инјекција. Оваа ранливост се одредува со извршување на последователни барања. Се карактеризира со приврзаност на крајот од знакот ";". Овој пристап често се применува за пристап до имплементацијата на податоците за читање и пишување или за управување со функциите на оперативниот систем, ако тоа го дозволуваат привилегиите.

Софтверски комплекси за пребарување на ранливоста на SQL

Програмите кои се достапни за SQL инјекции обично имаат две компоненти: скенирање на страницата за можни слабости и користење на нив за да добијат пристап до податоците. Постојат такви комунални услуги за скоро сите познати платформи. Нивната функционалност во голема мера ја олеснува верификацијата на страницата за можноста за хакирање на SQL инјекцијата.

Sqlmap

Многу моќен скенер кој работи со најпознатите DBMS. Поддржува различни техники за имплементирање на SQL инјекција. Има способност автоматски да го препознае типот на хашката лозинка и да го пробие преку речник. Постои, исто така, функционалноста на поставување и поставување на датотеки од серверот.

Инсталацијата во околината на Линукс се изведува со користење на следниве команди:

  • Git клон https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • Cdsqlmap-dev /,
  • ./sqlmap.py - Визард.

За Windows, постои опција со командна линија и со графички кориснички интерфејс.

JSQL инјекција

JSQL Injection е крос-платформска алатка за тестирање на употребата на SQL пропусти. Напишано во Јава, па системот мора да има инсталирано JRE. Може да се справи со барања за GET, POST, заглавие, колаче. Има пригоден графички интерфејс.

Инсталирањето на овој софтвер е како што следува:

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. Ако резултатот е позитивен, во левиот прозорец се појавува листа на достапни табели. Тие можат да бидат видени и да научат некои доверливи информации.

За да барате административни панели, користете табулаторот "Административна страница". Таа користи специјални шаблони за автоматски да бара системски записи за привилегирани корисници. Од нив, можете само да добиете хаш лозинка. Но, тоа е исто така достапно во алатките на програмата.

По наоѓање на сите слабости и инјектирање на неопходните прашања, алатката ќе ви овозможи да ја поставите вашата датотека на серверот или, обратно, да ја преземете од таму.

SQLi Dumper v.7

Оваа програма е лесна за употреба алатка за пребарување и имплементација на слабостите во SQL. Го произведува врз основа на т.н. вежби. Нивните листи може да се најдат на интернет. Dorky за SQL инјекција е посебен модел на пребарувања. Со нивна помош, можете да најдете потенцијално ранлива локација преку кој било пребарувач.

Алатки за обука

Веб-страницата itsecgames.com има специјален раководство, што на пример покажува како да се направи SQL инјекција и да се тестира. За да се користи, мора да се преземе и инсталира. Архивата содржи множество на датотеки, што е структурата на страницата. За да го инсталирате, ќе ви треба постоечкиот сет на веб сервер Apache, MySQL и PHP.

Откако ќе ја распакувате архивата во папката на веб-серверот, мора да отидете на адресата внесена при инсталирањето на овој софтверски производ. Ќе се отвори страница со регистрирање на корисник. Тука треба да ги внесете вашите податоци и да кликнете "Креирај". Со преведување на корисникот во нов прозорец, системот ќе ве потсети да изберете една од опциите за тестирање. Меѓу нив има и опишани инјекции, како и многу други задачи за тестирање.

Вреди да се разгледа примерот на SQL инјекција тип GET / Search. Тука треба да го изберете и притиснете "Hack". Пред да се појави корисникот за пребарување стринг и имитација на одредено место со филмови. Можете да одите низ филмовите долго време. Но, има само 10. На пример, можете да се обидете да влезете во Iron Man. Ќе се појави филм, што значи дека сајтот работи и табелите во него се достапни. Сега ние треба да провериме дали скриптата филтрира специјални знаци, особено на наводната ознака. За да го направите ова, додадете '' во линијата за адреси. И, треба да го направите ова по насловот на филмот. Страницата ќе фрли грешка Грешка: Имате грешка во вашата SQL синтакса; Проверете го прирачникот што одговара на вашата верзија на MySQL сервер за вистинската синтакса што ќе се користи во близина на "%" на линијата 1, во која се вели дека ликовите сè уште се процесираат неправилно. Значи, можете да се обидете да го замени вашето барање. Но, прво мора да го пресметате бројот на полиња. За да го направите ова, користете ред со, кој се воведува по цитатот: http://testsites.com/sqli_1.php?title=Iron+Man 'редослед од 2 - & action = search.

Оваа команда едноставно ќе прикажува информации за филмот, односно бројот на полиња е поголем од 2. Двоен цртички му кажува на серверот дека останатите барања треба да бидат отфрлени. Сега треба да го решите, заменувајќи ги сите големи вредности додека не се појави грешка. На крајот, излегува дека полињата ќе бидат 7.

Сега е време да се добие нешто корисно од базата на податоци. Ќе треба малку да го промените барањето во лентата за адреси, доведувајќи ја до оваа форма: http://testsites.com/sqli_1.php?title=Iron+Man 'union select 1, database (), user (), 4, password, 6, 7 од корисници - & action = search. Како резултат на неговото извршување, ќе видите линии со хеширани лозинки кои лесно може да се претворат во разбирливи знаци користејќи една од онлајн услугите. А малку pokoldovav и подигање на името на полето со најава, можете да пристапите некој друг рекорд, на пример, админ сајт.

Постојат многу видови на инјекции во производот, на кои можете да вежбате. Вреди да се запамети дека примената на овие вештини во мрежата, на вистински сајтови може да биде кривично.

Инјектирање и PHP

Како по правило, PHP кодот е одговорен за потребната обработка на барањата кои доаѓаат од корисникот. Затоа, на ова ниво е потребно да се изгради заштита од SQL инјекциите во PHP.

За почеток, вреди да се дадат неколку едноставни препораки врз основа на кои треба да го направите тоа.

  • Податоците секогаш мора да бидат обработени пред да бидат ставени во базата на податоци. Можете да го имплементирате ова или со користење на постоечки изрази или преку рачно организирање на пребарувања. Исто така, вреди да се земе предвид дека нумерички вредности се претвораат во типот кој е потребен;
  • Избегнувајте барање за појава на разни контролни структури.

Сега малку за правилата на пребарувања во MySQL за заштита од SQL инјекции.

Кога пишувате какви било изрази за пребарување, важно е да ги одделите податоците од клучните зборови SQL.

  • Избери * од табелата КАДЕ име = Зерг.

Во овој дизајн, системот може да мисли дека Zerg е името на полето, така што треба да го приложите во наводници.

  • Избери * Од табелата КАДЕ име = 'Зерг'.

Сепак, постојат ситуации каде што самата вредност содржи цитати.

  • Избери * ОД КАДЕ КАДЕ името = 'Брегот на Слоновата Коска'.

Еве, само дел од мачката се обработува, а остатокот може да се сфати како тим, што, нормално, не. Затоа, се јавува грешка. Значи, треба да ги прикажете овие податоци. За да го направите ова, користете обратна коса црта - \.

  • Избери * Од табелата КАДЕ име = 'cat-e' Брегот на Слоновата. '

Сите од горенаведените се однесува на жиците. Ако дејството се случи со број, тогаш не треба цитати или коси црти. Меѓутоа, тие мора задолжително задолжително да доведат до потребниот тип на податоци.

Постои препорака дека името на полето треба да биде затворено во редослед. Овој симбол е на левата страна на тастатурата, заедно со тилда "~". Ова е неопходно за MySQL точно да го разликува името на полето од нејзиниот клучен збор.

Динамична работа со податоци

Многу често, за да се добијат сите податоци од базата на податоци, се користат динамички пребарувања. На пример:

  • Избери * Од табелата каде што бројот = '$ број'.

Овде, $ се пренесува како дефиниција на вредност на поле. Што ќе се случи ако cat-d'Ivoire го удри? Се случи грешка.

За да се избегне оваа неволја, се разбира, можете да вклучите "магиски цитати" во поставките. Но, сега податоците ќе бидат прикажани каде што е потребно и не е потребно. Покрај тоа, ако кодот е напишан рачно, можете да потрошите малку повеќе време обидувајќи се да креирате систем отпорен на кражба себе.

За да додадете коса црта, можете да го користите mysql_real_escape_string.

$ Number = mysql_real_escape_string ($ број);

$ Година = mysql_real_escape_string ($ година);

$ Query = "INSERT INTO табела (број, година, класа) ВРЕДНОСТИ ('$ number', '$ year', 11)".

Иако кодот се зголеми во обем, сепак, потенцијално, тоа ќе работи многу побезбедно.

Земјоделците

Земјоделците се оригинални маркери, според кои системот дознава дека специјалната функција мора да биде заменета на ова место. На пример:

$ Sate = $ mysqli-> подготви ("Избери Окружниот ОД број КАДЕ Име =?");

$ Sate-> bind_param ("s", $ број);

$ Sate-> изврши ();

Овој дел од кодот го подготвува шаблонот за пребарување, потоа го поврзува променливиот број и го извршува. Овој пристап ви овозможува да ја поделите обработката на барањето и неговата имплементација. Така, можете да се заштитите од употребата на малициозен код во SQL queries.

Што може да направи напаѓачот

Заштитата на системот е многу важен фактор кој не може да се занемари. Се разбира, едноставна веб-картичка за бизнис ќе биде полесна за враќање. И ако ова е одличен портал, услуга, форум? Какви последици може да има ако не размислувате за безбедност?

Прво, хакерот може да го скрши интегритетот на базата на податоци и целосно да го отстрани. И ако администраторот или хостера не направил резервна копија, тогаш тоа нема да биде лесно. Покрај тоа, напаѓачот, хакирање во една страница, може да се префрли на други, лоцирани на истиот сервер.

Следно е кражба на личните податоци на посетителите. Како да ги користите - сè е ограничено само од имагинацијата на хакерот. Но, во секој случај, последиците нема да бидат многу пријатни. Особено ако финансиските информации се содржани.

Исто така, на напаѓачот може да се спои базата на податоци себе, а потоа изнуди пари за нејзиното враќање.

Дезинформацијата на корисниците во име на администраторот на страницата, која не е нивна, исто така може да има негативни последици, бидејќи измамата е можна.

Заклучок

Сите информации во овој напис се дадени само за информативни цели. Користете го само за тестирање на сопствените проекти кога ранливостите се откриени и фиксирани.

За подетално проучување на техниката како да се изврши SQL инјекција, треба да започнете со всушност истражување на особините и карактеристиките на јазикот на SQL. Како се направени прашања, клучни зборови, типови на податоци и примена на сето ова.

Исто така, не можете да направите без разбирање на функционирањето на функциите PHP и HTML-елементи. Главните ранливи точки за користење на инјекции се лентата за адреси, пребарувањето и разните полиња. Студијата за функциите на PHP, начинот на кој тие се имплементираат и можностите ќе ви помогнат да разберете како може да се избегнат грешките.

Присуството на многу готови софтверски алатки ви овозможува да направите длабинска анализа на страницата за познати слабости. Еден од најпопуларните производи е Кали Линукс. Тоа е слика на Linux-базиран оперативен систем кој содржи голем број на комунални услуги и програми способни за извршување на сеопфатна анализа на страницата за сила.

Зошто треба да знам како да го пробивам сајтот? Многу е едноставно - ова е потребно за да имате идеја за потенцијално ранливите места на вашиот проект или сайт. Особено ако ова е онлајн продавница со можност за плаќање преку интернет, каде што податоците за плаќањата на корисникот може да бидат компромитирани од напаѓачот.

За професионални истражувања, постојат информативни безбедносни служби кои ќе можат да ја проверат локацијата според различни критериуми и длабочина. Од едноставна HTML инјекција до социјален инженеринг и фишинг.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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