автоматизация слива через blind sql-inj

sql-injВыкладываю пару скриптов автоматизации слива данных из слепой скули.

Первый скрипт долгий т.к. однопоточный, зато точный т.е. стопудов однозначно вычислит символ до которого дошел. Второй многопоточный, иногда немного недовычисляет при частых обрывах сети, однако допустим для вычисления текста файла функцией MySQL LOAD_FILE в самый раз т.к. гораздо быстрее обработает длинный текст, а не досчитанные символы можно самому догадатся или же пробежатся по ним первым скриптом.

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

Что такое SQL-inj, в том числе и слепая скуля, как с ними быть и многое другое, на мой взгляд лучше всего описано в этом FAQ на rdot’е.

однопоточный точный

скачать скрипт

принцип работы

Как вы понимаете, если у вас слепая инъекция, то никаких прямых выводов на страницу не может быть. Вы задаете какой-либо предикат, а проще говоря, условие, например

128>ASCII(MID(LOAD_FILE('/etc/passwd'),1,1))

и в соответсвии с этим условием у вас отобразится, например, либо новость под номером 10, либо 9. Приведу пример полного запроса:

http://site.com/?id=IF(128>ASCII(MID(LOAD_FILE('/etc/passwd'),1,1)),10,9) --

ну или так:

http://site.com/?id=10 AND 128>ASCII(MID(LOAD_FILE('/etc/passwd'),1,1)) --

В первом примере, если 128 больше ASCII-кода первого символа файла /etc/passwd, то выведется страница с новостью 10, в противном случае, выведется 9. Второй случай практически идентичен первому, заисключением того, что если не больше ASCII-кода, то выведется неизвестно какая страница (для каждого сайта индивидуально, надо просто попробывать запрос http://site.com/?id= ), скорее всего это будет редирект на главную.

Вообще существует достаточно много всяких способов раксрутки слепых скулей, не только по странице, которую мы получаем на выводе. Короче читаем FAQ, ссылка на которую указана выше.

Так вот скрипт, берет допустим первый символ и формирует такой запрос:

128>=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))

если условие верно т.е. открылась страница с новостью 10, значит 128>=ASCII>=0, тогда скрипт делает запрос

64>=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))верно

32>=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))неверно

тогда следующий запрос, будет отталкиватся от кода 48 (48=32+32/2)

48>=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))верно

тогда вычитаем 8 (на прошлом ходе прибавляли 16, на каждом шаге делем на 2)

40>=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))неверно

44>=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))верно

42>=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))верно

41>=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))неверно

42=ASCII(MID(LOAD_FILE('/etc/passwd'),0,1))верно

таким образом мы за 9 шагов однозначно определили символ.

Далее скрипт берет следующий символ и начинает все заново.

128>=ASCII(MID(LOAD_FILE('/etc/passwd'),1,1))

Я не читал, все статьи по blind SQL-inj, поэтому если кто-то придумал такой перебор раньше меня, а так наверняка оно и есть, не обижайтесь, что здесь нет ссылки на вышу статью и укажите ее в комментариях.

Все разгаданные символы скрипт записывает в файл и выводит на экран консоли.

конфигурация

Она располагается в начале скрипте и представляет из себя инициализацию глобальных переменных.

#config
$request="/article.php?id=44+AND+##NUM####SIGN##ASCII%28MID%28##REPLACE##,##I##,1%29%29"
$outfile="outfile"
$priznak="eta_kartinka_est_tolko_v_statie_s_nomerom_44.jpg"
$func="LOAD_FILE%28"+"0x2f6574632f706173737764"+"%29" #/etc/passwd
$site="www.site.com"
$start=1
#config

$request – сам запрос, с метками:

  • ##NUM## – число с которым сравнивается ASCII-код
  • ##SIGN## – место, куда будет подставляться знак (>,=)
  • ##REPLACE## – сама функция, задающаяся в переменной $func
  • ##I## – номер символа

Задаем эту переменную в соответствии с нашим запросом, при этом правильно расставляем метки.

$outfile - файл куда будет все выводится.
$priznak – часть страницы, отличающая страницу с верным выводом от неверной. Т.е. при таком виде запроса

http://site.com/?id=10 AND 128>ASCII(MID(LOAD_FILE('/etc/passwd'),1,1)) --

или

http://site.com/?id=IF(128>ASCII(MID(LOAD_FILE('/etc/passwd'),1,1)),10,9) --

эта часть текста HTML должна присутствовать только в новости с индексом 10.

$func – функция, которую мы вызываем. Это может быть LOAD_FILE(), VERSION(), USER() итд, комбинации из них, короче все на что хватит фантазии.

$site – сайт, где располагается SQL-inj.

$start – номер символа, с которого начинать.

многопоточный приблизительно точный

скачать скрипт

Принцип работы нечем не отличается, заисключением того, что скрипт вычисляет не последовательно символ за символом, а сразу паралельно несколько символов, количество которых равно количеству потоков заданных в конфигурации.

Конфигурация, такая же, добавился лишь один параметр $th_count. Он определяет количество потоков.

Чем же плох многопоточный вариант? При стабильном соединении с интернетом не чем т.е. он вычислит все символы как надо и быстро. Если же соединение часто обрывается, как например на 3G-модемах, то некоторые потоки будут умерать оставляя свой символ недовычисленным. Для примера, при нестабильном соединении (скорость скачет от 1КБ/с до 300КБ/с, соединение обрывается каждые 3-5 минут) из 10 символов 1 будет недовычислен.

8 Comments to “автоматизация слива через blind sql-inj”

  1. eutha пишет:

    Класс!

    ps: the links are dead. :-)

  2. Bo0oM пишет:

    Boolean точно такой же написал. Я имею ввиду сам алгоритм, только на perl’e

    • lukmus пишет:

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

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

  3. Борщ пишет:

    Можно статью с рдота сюда копипастнуть? У меня он не открывается(

  4. Constantine пишет:

    Перезалей скрипты пожалуйста

Leave a Reply to Bo0oM

(обязательно)

(обязательно)