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, под именем которого программа выполняется
