Старый 24.09.2010, 15:26   #1
Pr0xor
 
Регистрация: 27.08.2010
Сообщений: 158
Репутация: 69
По умолчанию Выполнение кода посредством create_function.

http://ru.php.net/manual/en/function.create-function.php

Функция create_function, сама по себе дает возможность выполнять произвольный код на сервере
, например RCE в вордпрессе описаный здесь https://rdot.org/forum/showthread.php?t=3, основан как раз на
create_function.

По сути штатное использование create_function,
PHP код:
<?php
$code 
= <наш код>;
$dyn_func create_function(''"echo $code;");
$dyn_func('');
?>
можно сравнить с такой конструкцией
PHP код:
<?php
eval("function lambda_n() { echo system('ls'); }");
lambda_n();
?>
При этом разрабы пхп дают нам еще большую свободу действий
http://bugs.php.net/bug.php?id=48231
PHP код:
<?php
$newfunc 
create_function('''};phpinfo();//');
?>

Последний раз редактировалось Pr0xor; 24.10.2010 в 15:20..
Pr0xor вне форума   Ответить с цитированием
Старый 10.11.2010, 05:40   #2
xCedz
 
Регистрация: 05.07.2010
Сообщений: 33
Репутация: 6
По умолчанию

"create_function\s*\(.*\)"
xCedz вне форума   Ответить с цитированием
Старый 24.05.2014, 02:12   #3
profexer
 
Регистрация: 06.01.2011
Сообщений: 117
Репутация: 63
По умолчанию

Сорри за археологию, но бага до сих (с 2008 года!) не исправлена, а налетел я на нее только сейчас =)

Проблема находится в /Zend/zend_builtin_functions.c и заключается в том, что там формируется код вида
Цитата:
function LAMBDA_TEMP_FUNCNAME (%s) {%s}
где мы можем контролировать обе переменные и они никак не проверяются, после чего этот код идет на выполнение.

А значит если второй переменной передать строку, которая закроет созданную функцию после чего пойдет наш php код, то он выполнится во время создания функции. И для этого не нужно даже лишней переменной.
Код:
<?php create_function('', '};phpinfo();{'); ?>
Я кончил, спасибо за понимание =)
profexer вне форума   Ответить с цитированием
Старый 25.03.2017, 10:06   #4
c0der
 
Аватар для c0der
 
Регистрация: 22.08.2015
Сообщений: 2
Репутация: 0
По умолчанию

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

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

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

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

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

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



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