200 points
Category: Binary Exploitation
Tags : #picoCTF 2023
Binary Exploitation
linux
bash
toctou
Someone created a program to read text files; we think the program reads files with root privileges but apparently it only accepts to read files that are owned by the user running it. Additional details will be available after launching your challenge instance.
Самая большая подсказка - тег задачи toctou
, что является названием вида уязвимостей. toctou
-> Time-of-check to time-of-use
Файлом flag.txt
владеет root, программой владеет тоже root, но там стоит бит s
в правах - значит она запустится от рута - мы должны заставить её открыть flag.txt
, при этом обойдя проверку нашего настоящего uid с uid владельца файла со стороны программы через функцию getuid.
-
Подключаемся по SSH Замечаем, что проверка владения файлом со стороны программы (где getuid == uid_файла) происходит один раз, а дальше идет чтение файла
-
Создаем файл, которым мы владеем -
ttt.txt
- я написал туда123
-
Создадим символьную ссылку
my_link
и будем её бесконечно привязывать кttt.txt
, затем кflag.txt
и так по кругу следующим скриптом:
while true; do ln -sf /home/ctf-player/ttt.txt /home/ctf-player/my_link; ln -sf /home/ctf-player/flag.txt /home/ctf-player/my_link; done &
- Затем запускаем бесконечный цикл, который выполняет программу на
my_link
следующим скриптом:
while true; do ./txtreader my_link; done
- После этого в определенный момент произойдет следующее: программа проверит uid юзера на совпадение с uid владельца файла, когда
my_link
->ttt.txt
. Затемmy_link
переподвяжится наflag.txt
, а параллельно с этим программаtxtreader
выполнит чтение изmy_link
, тем самым мы получим флаг, т.к. мы обошли проверку uid, а файлflag.txt
прочитается, т.к. им владеет root, под именем которого программа выполняется