SQL инжекция в MySQL сървър
SecurityLab.ru във връзка с Центъра за обучение "Infosec" и онлайн магазини Softkey.ru организира конкурс за naluchshuyu статия по темата за сигурността на информацията.
SQL инжекция - уязвимост, което възниква в резултат на недостатъчни проверки, получени от даден потребител стойности в един скрипт или програма. Аз ще разгледа инжекция в базата данни MySQL. Тази база данни е един от най-често срещаните. Ако не е уговорено друго, се смята, MySQL инжекция в Скриптът на разположение.
Идентификация SQL инжекция.
Често наличието на грешка инжекция SQL може да се каже, като ясно се посочва, че е станала грешка в заявката за SQL. В същото време наличието на грешки в SQL заявка може да се съди по косвени доказателства.
Анализ на MySQL база данни чрез инжектиране.
Наличието на подробно съобщение за грешка с текста на заявката за SQL, в който е възникнала грешката ще намали трудността на експлоатация на SQL инжекция до минимум. Въпреки това, много може да се направи, дори ако съобщенията за грешки, не се показват на всички.
Ако обърнете внимание на факта, че дори и да се показва текста на грешки, все още можете да ясно се прецени дали е станала грешка или не (например, заявката се връща празен резултат).
По-специално, може да има ситуации, когато по грешка, връща код на отговор на 500, или пренасочване към главната страница, а като резултат празен сет ще бъде върната на празна страница.
За да се идентифицират тези вторични признаци трябва да направи искания HTTP, които са известни, които ще доведат до по право (но се връща празен заключение) SQL заявка, както и че ще доведе до неправилно SQL заявка. Например, когато не филтърните параметри ID
Сега, когато знаем как да се разграничат от погрешно искане от празен, започнете последователно да се извлече информация за заявката и базата данни.
Да разгледаме случая когато има наличие на инжектиране след къде. Ако ние считаме, базата данни MySQL, получаване на информация от базата данни може да бъде възможно само ако сървърът е версия 4. *, тези, които е възможно да се вмъкват в искането за обединение
1) Броят на полета между изберете и къде
Ние се опитваме, докато не получите правилната запитването:
повече, ако не е възможно да се отдели невалиден искането за връщане на празен резултат, можете да го направите:
За тази цел е достатъчно да бъде в състояние да се разделят доброто от злото поискване, и винаги е възможно, ако има наличие на SQL инжекция.
След като получим валидно заявление, броят на нула, ще бъде равен на броя на полета между изберете и къде
2) Броят на колоната с изтеглянето. Ние ще трябва да се знае в какво се случва на колоната за сметка написано на страницата.
В този случай, ако изходът е на страницата на няколко параметри, най-добре е да се намери един, който изглежда да има най-голямо количество типове данни (текст най-добре), като описание на продукта, в текста на статията и така нататък. Ние търсим за него
А до тогава, докато не видим тест дума в желаното място.
Трябва да се отбележи, че в този случай един от тези въпроси, ще се върне не-нулева стойност.
Тук можете да тичам в капан: сценария, може да има тест на не нищожен един от параметрите (например, номер) там ще трябва да използвате MySQL собственост, цифров вид може да се хвърли и да е тип данни, без грешка, и така, че ще запази своята стойност.
Същият трик ще се проведе и къде кавичките са избягали.
Сега е възможно да сортирате имена на таблици.
Правилните въпроси ще бъдат съобразени със съществуващата името на маса. Вероятно, ще бъде интересно да се провери наличието на масата за потребители, пароли и т.н. regusers и т.н.
имаме достатъчно информация, за да се направи такова искане.
В случай, тази заявка ще ни върне в хеш пароли трябва да имат права, за да изберете от база данни на MySQL база данни, която в повечето случаи лесно да декодира. Когато само един ред на заявката (например, вместо статията тялото), можете да се придвижвате между редовете
В допълнение, можете да научите много интересни неща:
5) имената на колоните в таблицата
текстови файлове чрез MySQL инжекция.
Ако потребителят, при които достъп до базата данни, има право да file_priv, можете да получите текста на произволен файл
записване на файлове в уеб директорията (PHP обвивка) на.
Опитът показва, че ако имаме правилната file_priv, директорията може да се записва за всички потребители на разположение в допълнение на мрежата (понякога, качване на директории, банери и т.н.), както и знаете името на най-малко една маса (mysql.user, например ще направи, ако имате достъп до базата данни на MySQL), можете да качите всички файлове към сървъра посредством инжектиране на подобен тип.
В същото време от таблица 1 необходимата дизайн.
Ако, в допълнение, на сайта има слаби места, което позволява да се изпълни произволен файлове на сървъра, (включително ( "/ път / $ file.php")), а след това, във всеки случай, можете да качите PHP обвивка, например, в директорията / ПТУ /, а след това да вземете файла от там с помощта на уязвимост да се включат.
poslelimit инжектиране.
Доста често е възможно SQL инжекция се случва в рамките на параметрите предавани на лимита. Това може да бъде номер на страница и т.н., и т.н.
Практиката показва, че всички по-горе може да се приложи в този случай.
MySQL правилно реагира на заявките, като например:
Изберете ... лимит 1,2 съюз изберете ....
Изберете ... лимит 1 съюз изберете ....
Ако искате да се първия под-заявка не върна празен резултат на това голяма денивелация е необходимо да се създаде изкуствено за първи молбата:
Изберете ... ограничи 99999,1 съюз изберете .... Или Изберете ... лимит 1,0 съюз изберете ....
някои "капани".
Най-чест проблем може да бъде включването на магия конфигурация кавички PHP. Този параметър низ обикновено е възможно да се избегне SQL инжектиране, и в случай на (частична) параметри, такива искания не могат да се използват кавички, а оттам и на линията.
Частично решаване на този проблем ще ни помогне да се овъгли функция, която връща низ от символни кодове. например
Единственото ограничение. В случай, ако искате да направите в outfile, както и името на файла, можете да прехвърлите на името на файла в кавички. в outfile Чар (.) връща грешка.
Изглежда, че този модул на Apache уеб сървър, което прави невъзможно да работи SQL инжекция уязвимост. Въпреки това, в някои конфигурации, PHP и този модул, атаката може да се проведе по прозрачен за този модул.
mod_security модул конфигурацията по подразбиране не се филтрират стойност се предава като бисквитка. В същото време, в някои случаи, а в някои конфигурации, PHP по подразбиране, бисквитка променливи са регистрирани автоматично.
По този начин, злонамерени променливи, напълно прозрачен за mod_security могат да бъдат изпращани като ценност бисквитка.
DOS в MySQL инжекция.
Ако няма възможност за използване на съюза в заявката, например, MySQL е версия 3. * След това, обаче, инжекцията може да се управлява, например, за да се направи сървъра на базата данни, за да изчерпи своите ресурси.
За да направите това, ние използваме функцията еталон, който се повтаря изпълнението на ИЗРАЗът определен брой пъти, посочени в броя на аргумент. Като общо израз вземем функцията, която сама по себе си изисква известно време. Например, md5 (). Тъй като линията вземе CURRENT_DATE, така че низът не съдържа кавички. БЕНЧМАРК функция могат да бъдат вложени. И така, ние се изготви искане:
се извършват 1000000 запитвания MD5 (в зависимост от капацитета на сървъра), приблизително 5 секунди 10 милиона ще бъдат извършени около 50 секунди. Вложени показател ще отнеме много време, на всеки сървър. Сега ще изпрати до няколко десетки подобни HTTP заявки в секунда, за да влязат в сървъра без колан надолу.
Други видове инжекция MySQL.
Филтър целочислени стойности на параметрите на цели числа и цитати на низови параметри понякога са недостатъчни. Понякога nezaplaniruemoy заявление функционалност може да предизвика% и _ като специални символи в рамките на заявката. Например:
mysql_query ( "изберете номер от страна на потребители, където парола като" .addslashes ($ парола). "" и потребителски като "" "" .addslashes ($ потребителски). ');
в този случай, за да се поберат на всеки потребител паролата%
В някои случаи инжектирането SCR е възможно дори в настройката, която се превръща чрез методи mod_rewrite на Apache модул, GET параметър към сценария.
Например, скриптове /news/127.html тип се преобразуват в /news/news.php?id=127 следното правило: RewriteRule ^ / новини / \ HTML $ "/news/news.php?id=$1" (*.).
Тя ще предава злонамерени скриптове стойности на параметрите. Например /news/128-1.html
Накратко за защита.
За да се защити срещу всички по-горе е достатъчно да следвате няколко прости правила.
1) за число и частични стойности преди използването им в резултат на заявката в достатъчно количество до желания тип.
Вместо това, можете да поставите за тестовата система за проследяване на SQL инжекция.
// пише в дневника на опит
2) за низови параметри, които не са използвани като, рег.израз и TD, щит кавичките.
3) линии, от които се очаква да бъдат използвани от вътрешната страна като, рег.израз, и така нататък, също така е необходимо да се извърши подбор на специални символи, използвани в тези твърдения, ако е необходимо. В противен случай е възможно да се документира използването на тези символи.
Фирма Softkey - уникална услуга за клиентите, разработчици, дилъри и партньорски партньори. В допълнение, той е един от най-добрите онлайн магазини в България, Украйна и Казахстан, който предлага на клиентите си широка гама, разнообразие от начини на плащане, оперативно (често моментално), обработка на поръчките, за проследяване на процеса на изпълнение на поръчки в личния раздел, отстъпки от магазина и производители софтуер.