На SQL инжектиране просто обяснение за начинаещи (част 1)

Образование проникване тестери - проникване обучение тестери от BlackDiver. Основен курс

Същността на SQL инжектиране

Вероятно сте чули шегата на интернет: "Защо всички се извлекат поуките от един и същ: Например, един урок по рисуване сови. дълго Първо половин час по-подробно изготвят бухал очи. И след това - отново - за пет минути - боя останалите сови ".

Това е още една снимка по темата е:

На SQL инжектиране просто обяснение за начинаещи (част 1)

Целта на тази статия - да дръпне окото на бухала до нормално просто обяснение на това, което е SQL-инжекция, каква е същността на това как и защо те са опасни.

За експериментите, ние ще имаме една много проста и уязвима този SQL-инжекция скрипт:

Думата SELECT в SQL-заявка показва каква информация да се извлекат. Например, можете да зададете SELECT име или да изберете име, парола. След това в първия случай ще бъде на само името е да се получи една маса, а във втория - само името и паролата си. Звездичката казва, че трябва да получите всички стойности. Т.е. SELECT * - това означава да получите всички стойности.

ОТ казва къде трябва да отида. След ОТ име на таблица трябва да бъде, т.е.. Д. записа от членове заявиха, излез от членовете на масата.

Следваща КЪДЕ. Ако учите всички езици за програмиране, тази дума е по-напомня на "Ако". И след това да се условия, тези условия може да е вярно (1) или лъжа (0). В нашия случай,

(Име = "Името $ ') и (парола =' $ парола")

Това означава, че условието ще бъде вярно, ако прехвърля името на променливата $ ще бъде равна на стойността на името на полето в таблицата и да премине променлива "$ парола е равна на стойността на полето за парола в таблицата. Ако някоя условие не е изпълнено (неправилни име и парола), след това нищо няма да се вземе на масата. .. Това означава, че изразът SELECT * FROM членове КЪДЕ име = "Името $ 'и парола =' $ парола" означава: в таблицата с членове да вземат стойностите на всички полета, ако те отговарят на условието - същият преминава потребителското име и паролата, с тези, които отговарят на в таблицата.

Това е разбираемо. Нека сега, например, името на потребителя да замени един единствен цитат:

На SQL инжектиране просто обяснение за начинаещи (част 1)

Не се получават данни, вместо ние виждаме грешка:

На SQL инжектиране просто обяснение за начинаещи (част 1)

Резултатът е отличен! Имаме списък на всички записи в таблицата.

ORDER BY и UNION - Начало Приятели SQL-инжекция

Ние вече си имаме данни, които не са били на разположение на тези, които не разполагат с валидно потребителско име и парола. Може ли нещо друго да го получа? Да, можете да получите пълно разтоварване на масата (не забравяйте, ние все още не разполагаме с парола. Освен това, ние може да получи всички данни от всички бази данни на сървъра през малка дупка!

СЪЮЗ ви дава възможност да се съчетаят SQL-заявки. В реалния живот имам проста задача, така че прости заявки към бази данни и характеристики аз не използват съюз. Но това е за SQL-инжекция е по-ценно, отколкото липсата на думата.

СЪЮЗ го прави доста гъвкав, за да се интегрират SQL-заявки с SELECT, включително и от различни бази данни. Но там е важно изискване за синтаксис: на броя на колоните в първо изберете трябва да е равна на броя на колоните във втория изберете.

ORDER BY указва за сортиране на информацията, получена от масата. Можете да укажете името на колоната, за да сортирате по, и е възможно от неговия номер. Освен това, ако колона с този номер не е налице, ще бъдат показани на грешката:

Запитване изглежда така:

На SQL инжектиране просто обяснение за начинаещи (част 1)

Правете това, докато не се съобщение за грешка.

Моля, имайте предвид, че съдържанието на определени полета UNION SELECT 1,2,3,4,5 показани. Вместо номера можете да настроите функцията.

Какво да пиша в SELECT

Има някои функции, които могат да пишат директно на Съюза:

  • БАЗА ДАННИ () - показва името на текущата база данни
  • CURRENT_USER () - показва, потребителското име и името на хоста
  • @@ DataDir - показва абсолютния път до базата данни
  • USER () - потребителско име
  • ВЕРСИЯ () - версия на базата данни

В нашия пример, полето за изход 2, 4 и 5. Това означава, че можем да използваме някоя от тези области.

Използване на база данни () в UNION SELECT

На SQL инжектиране просто обяснение за начинаещи (част 1)

Използвайте CURRENT_USER () в UNION SELECT

На SQL инжектиране просто обяснение за начинаещи (част 1)

Ние използваме @@ DataDir в UNION SELECT

На SQL инжектиране просто обяснение за начинаещи (част 1)

Първи имената на таблици, полета и разтоварване на база данни

В INFORMATION_SCHEMA база данни има таблица, озаглавена таблици. Тази таблица съдържа списък на всички таблици, които се намират във всички бази данни на този сървър. Ние можем да изберете нашата маса, гледайки в базата данни на име table_schema - "db_library" (името, което научихме с помощта на база данни ()).

Това е пълна машини съюз. Материал на него изобилстват в интернет. На моя MySQL сървърът е пълен техника СЪЮЗ не работи. Аз грешка възниква

нещо се обърка с пълна техника СЪЮЗ (може да се дължи на ограничаване на изтеглените брой записи). Falling към частично техника СЪЮЗ

В следващия раздел ние изучаваме техника частично СЪЮЗ, с негова помощ, ще получите всички данни на сървъра: имената на бази данни, имената на таблиците и полетата в тези таблици, както и съдържанието им. Докато чакате появата на втората част - жп прочетете за SQL-инжекция и технологии СЪЮЗ, препоръча още да се направи преглед на следната статия:

На SQL инжектиране просто обяснение за начинаещи (част 1)

к.с. О, да, аз забравих за LIMIT. Твърде, следващия път кажете за ролята на LIMIT в SQL-инжекция.

Genesis HS - физическо място, където се събират ентусиазирани уреди, IT, електроника, роботи и физиката на хората.

Свързани теми

Locasploit - да python3 и Баш скриптове. Locasploit - python3 е набор от скриптове и Баш за местно изброяване и следващите експлойти за кандидатстване, събрани под един.

Airgeddon - улавяне и счупи ръкостискане. Здравейте на всички! Реших, за същото като начинаещи I, за да напише статия. Търсих и не виждам да се споменава за тази програма. Той може да сте пропуснали по nevnimate.

Съхранявана процедура покана към клиента. MySQL се обадите на запомнена процедура на клиента В тази статия, добави възможността да се обадя на съхранена процедура от нашата молба клиент. За да започнете.

Как лесно да се получи данните от DataTable. Как да получите данните от DataTable в C # В предишна статия е пример за работа с база от данни и C #. Оттогава много от тях са станали особено.