HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Песочница
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 25.06.2017, 19:14
crlf
Постоянный
Регистрация: 18.03.2016
Сообщений: 663
Провел на форуме:
169212

Репутация: 441


По умолчанию

Можно использовать time based варианты и обойтись без or, там вывод вообще не нужен.

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

Либо, нужно каким-то образом попытаться достроить запрос. Как вариант, считать вслепую, таким образом:

Код:
SELECT INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO LIKE '%xxx%' LIMIT 1
 
Ответить с цитированием

  #12  
Старый 27.06.2017, 19:11
KAPTOHHbIu
Новичок
Регистрация: 22.06.2017
Сообщений: 13
Провел на форуме:
3832

Репутация: 0
По умолчанию

2crlf, спасибо, time based работает! Даже не знал что такое возможно.

Вы, как всегда, по делу советуете) Побольше бы таких людей!

Появился кое-какой прогресс во взломе.

Вместе с новыми успехами появились и новые проблемы, требующие решения.

Подробности расскажу позже, когда появится время.

Сейчас вынужден заняться другими делами.
 
Ответить с цитированием

  #13  
Старый 05.08.2017, 23:38
KAPTOHHbIu
Новичок
Регистрация: 22.06.2017
Сообщений: 13
Провел на форуме:
3832

Репутация: 0
По умолчанию

После длительного перерыва вернулся ко взлому.

Достиг следующих успехов:


1.
Методом blind-инъекции + брутфорса нащупал в базе данных названия четырех таблиц. Внутри этих таблиц нащупал 23 названия столбцов.

2.С помощью того же блайнда наловчился двоичным перебором ASCII кодов, вытаскивать данные из БД. То есть любые данные из любого столбца любой таблицы, названия которых мне известны.

3.Наконец-то обошел злосчастную проблему с ключом сессии. Нашел еще одну уязвимую переменную в другом скрипте. Инъекция в данную переменную позволяет получать php и скуль-ошибки. А это уже делает иньекцию не такой слепой, как до сих пор.

Я даже почерпнул из одного мануала запрос, благодаря которому можно получать данные из БД прямо внутри текста ошибок!

Например отправляю:

Код:
var=99 or (select count(*) from (select 1 union select 2 union select 3)x group by concat(mid((select useremail from user where id=99), 1, 63), FLOOR(RAND(0)*2)))
Получаю:

Код:
nknown err:Duplicate entry 'Vasya_Pupkin1990@mail.ru1' for key 'group_key'
Теперь о том, что не получается:


Брутфорсом я нащупал едва ли сотую часть БД. И мне по зарез нужны названия других таблиц/столбцов. Но я никак не могу извлечь их напрямую из information_schema.

Когда, описанным выше способом, я пытаюсь вытащить из базы данные:

Код:
... select table_name from information_schema.tables limit 1 ...
то получаю ошибку

Код:
... error in your SQL syntax ... near '' at line 1
Долго не мог понять откуда растут ноги у проблемы. Но проведя пару десятков других запросов, выяснил странный факт. Дело в том, что я не могу использовать в инъекциях символ точки [.]

Проблема даже не в том, что точка фильтруется. Просто символ точки, почему-то, срабатывает как комментарий. Причем комментарий с довольно странными свойствами.

Допустим в исходном виде без инъекции var=99


Запрос: var=99 -- abra cadabra comment(скрипт выполнится корректно)

Запрос: var=99 abra cadabra comment(приводит к ошибке)

Код:
... error in your SQL syntax ... near 'abra cadabra comment' at line 1
Запрос: var=99 .abra cadabra comment(приводит к другой ошибке)

Код:
host config can not be empty!
Ошибка другая, возможно не MySQL, а движковая. Набор PHP-ошибок следующих за ней тоже отличается.

Более того запросы вида:

var=99 -- .abra cadabra comment

приведет к такой же ошибке. То есть точка (.) каким-то образом работает даже в закомментированном виде уже после двух дефисов (--) !

Что еще более удивительно, по заголовкам функций в apache-ошибках можно обнаружить, что в одну из функций попало значение нашей строковой переменной varдополненное еще двумя символами, а именно '99 -- .abra cadabra comment.7'

Кстати происхождение числа 7 мне известно. Это номер игрового сервера, который был передан в том же самом HTTP-запросе, однако в совсем другой переменной, никаким модификациям не подвергавшейся.

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

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

var=99 -- ..abra cadabra comment

Запрос был обработан и выполнен без ошибок!



var=99 ..abra cadabra comment


Привел так же привел к корректной обработке без ошибок.

То же самое верно для запросов с любым количеством точек от 2-х штук. Независимо от наличия или отсутствия комментариев SQL. Самое главное чтобы за самой первой точкой, следовала еще одна, причем вплотную. При этом все, что следует за двойной точкой будет в SQL-запросе отсечено, как если бы точки были однострочным комментарием.

var=99 . .abra cadabra comment

Если между точками вставить пробел или любой другой символ ошибка снова появится.

Резюмируя проблему:

Если одинарную точку, либо точку с другими символами после нее, поставить ДО инъекции, получим вышеуказанную ошибку "host config can not be empty!". Работа скрипта будет прервана так же до выполнения инъекции.

Если одинарную точку, либо точку с другими символами после нее, поставить ПОСЛЕ инъекции, то сперва будет выполнена инъекция. Если инъекция привела к SQL-ошибке, получим SQL-ошибку. Если инъекция выполнена без SQL-ошибок - получим "host config can not be empty!"


Если одинарную точку, либо точку с другими символами после нее, поставить ВНУТРИ инъекции (например при обращении к information_schema.tables), то вся инъекция после точки будет отсечена. Соответственно мы получим SQL-ошибку "... error in your SQL syntax ... near '...огрызок нашей инъекции до точки' at line 1"


Если поставить две точки подряд в любом месте, они сработают как однострочный комментарий.



Вопрос:


Как получить доступ к information_scherma?

Сделать это можно либо разобравшись в свойствах этой загадочной точки и заставить ее работать на нас. Что это за странный баг и с чем его едят?

Либо обратится к information_scherma каким-то обходным путем, не используя точек в запросе. Существует ли такой способ? Если да, то как?

Оговорюсь сразу что функция char() и HEX-строки здесь не помогут, я пробовал. Они работают со строковыми параметрами в операциях сравнения после WHERE, однако не годятся для обращения к именам таблиц в операторе FROM.


Очень надеюсь на вашу помощь)
 
Ответить с цитированием

  #14  
Старый 06.08.2017, 00:23
crlf
Постоянный
Регистрация: 18.03.2016
Сообщений: 663
Провел на форуме:
169212

Репутация: 441


По умолчанию

Цитата:
Сообщение от KAPTOHHbIu  

Как получить доступ к
information_scherma
?
Цитата:
Сообщение от KAPTOHHbIu  

Либо обратится к information_scherma каким-то обходным путем, не используя точек в запросе. Существует ли такой способ? Если да, то как?
Действовать в этом случае можно как при инъекциях в MySQL
 
Ответить с цитированием

  #15  
Старый 06.08.2017, 12:40
KAPTOHHbIu
Новичок
Регистрация: 22.06.2017
Сообщений: 13
Провел на форуме:
3832

Репутация: 0
По умолчанию

Цитата:
Сообщение от crlf  

можно проверить поведение, при внедрении точки, в других инъекциях. Как раз имеется блайнд в другом параметре.
Идея здравая, проверил. Правда я не могу ручаться, что ошибки те же самые, поскольку в другом параметре любая SQL-ошибка приводит к "500 internal Server Error"

Если точка внутри запроса - получаем ошибку 500. Если точка после запроса получаем ошибку "Ключ сессии неверный!", о которой я писал еще давно. Что отнюдь не означает отсутствие ошибки "host config can not be empty!".

Единственная разница в том, что точка до запроса работает как комментарий, даже в количестве 1 шт (две точки подряд ставить не обязательно).

Считаете, что есть шансы найти другой уязвимый параметр, в котором проблем с точкой не будет?

Цитата:
Сообщение от crlf  

Возможность чтения локальных файлов проверялась?
Если вы имеете в виду чтение с помощью команды load_file(), то я еще не до конца с ней разобрался. Она у меня все время возвращает NULL.

Возможно я неверно указываю путь до файлов. Затрудняюсь определить правильный. А может быть косячу где-то еще. По правде сказать, я почти не уделял этому времени - попробовал пару раз, а затем переключился на другие задачи. Но возможно стоит углубится в изучение данного вопроса. Буду благодарен за какой-нибудь мануал по файлам.

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

  #16  
Старый 06.08.2017, 13:09
ghost8
Участник форума
Регистрация: 29.05.2015
Сообщений: 110
Провел на форуме:
37430

Репутация: 0
По умолчанию

load_file('/etc/passwd') или load_file(0x2f6574632f706173737764)
 
Ответить с цитированием

  #17  
Старый 06.08.2017, 13:30
KAPTOHHbIu
Новичок
Регистрация: 22.06.2017
Сообщений: 13
Провел на форуме:
3832

Репутация: 0
По умолчанию

Цитата:
Сообщение от ghost8  

load_file('/etc/passwd') или load_file(0x2f6574632f706173737764)
Это я попробовал еще в самом начале.

Результат - NULL
 
Ответить с цитированием

  #18  
Старый 06.08.2017, 13:31
BabaDook
Познавший АНТИЧАТ
Регистрация: 09.05.2015
Сообщений: 1,066
Провел на форуме:
238786

Репутация: 40


По умолчанию

А чё , права есть разве? Я чему не собираюсь читать, слишком много букв . Я вот не пойму, автору делать нечего что ли, или решил цветных тролить тонко? Если так, то не тонко Нифига
 
Ответить с цитированием

  #19  
Старый 06.08.2017, 13:44
artkar
Постоянный
Регистрация: 14.11.2016
Сообщений: 350
Провел на форуме:
131082

Репутация: 6
По умолчанию

[QUOTE="crlf"]

Действовать в этом случае можно как при инъекциях в MySQL
 
Ответить с цитированием

  #20  
Старый 06.08.2017, 14:01
KAPTOHHbIu
Новичок
Регистрация: 22.06.2017
Сообщений: 13
Провел на форуме:
3832

Репутация: 0
По умолчанию

Цитата:
Сообщение от BabaDook  

А чё, права есть разве? ...решил цветных тролить тонко?
Если речь о правах пользователя БД, то на локалхосте права - GRANT ALL PRIVILEGES ON, на атакуемом сайте - не знаю. Но и там, и там результат - NULL.

А на основании чего вы решили, что я троль?

Цитата:
Сообщение от artkar  

Только не делай вручную.
Есть инструмент - SQLMap он автоматизирует многие рутинные операции.
...подправить файл common-tables.txt и пробрутить.
или блайнд-инжекцию запустить с кастомным пайлоадом и оставить на ночь
Спасибо. Когда закончу разбираться с файлами, - гляну что за зверь такой SQLMap.

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

Добавил к этому вордлисту десяток префиксов и постфиксов, тоже взятых из головы. Получилось около 10.000 слов.

Брут по данному листу, нашел четыре таблицы и два десятка столбцов внутри них.

SQLMap брутит намного эффективнее?
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.