Привет ребят. Ща покопаемся в неочевидных вещах, залезем так сказать под капот.
ㅤ
Знаешь же такую команду:
git log
Тут всё просто, она выводит историю коммитов. И что примечательно, в конце будет пагинация (pager). Смотри картинку 1.
А теперь пойдем неочевидной дорожкой и выполним:
sudo mv /usr/bin/less /usr/bin/less.bak
Ну и снова запустим
git log: Смотри картинку 2.Хуяк и нет больше пагинации. Сразу вывалилась простыня. О чем это говорит? А говорит это о том, что
git использует внешнюю утилиту less при выводе истории коммитов, причем делает это по умолчанию.Но если
less накрылся пиздой, git сразу вывалит простыню без пагинации. Забавно! Давай подключим strace и подтвердим этот факт, запускаем:strace -f -e execve git log
И видим картину маслом: Смотри картинку 3
Ага, запускается
less, а теперь снова перемещаем less и смотрим выхлоп strace: Смотри картинку 4Вот и прекрасно, словили ошибку
error: cannot run less: No such file or directory. Но ожидаемый результат все равно получили.Если выполнить команду
echo $PAGER, то увидим, какая утилита будет использоваться для пагинации. По умолчанию less, но раз есть переменная, её можно переопределить. Давай попробуем это сделать.apt install lolcat
export PAGER="lolcat"
git log
Иииии ебать копать: Смотри картинку 5.
Кстати не только
git завязан на переменную $PAGER, такое же поведение ты можешь увидеть у утилит: man, systemctl, journalctl и т.п. Всё что работает с пагинацией, использует переменную $PAGER.Ну и на закуску:
export PAGER="vim -"
man ls
Команда
man ls будет выполнена в vim. То есть получается что любая программа, доверяющая $PAGER, фактически запускает произвольную команду пользователя.А это уже еще один вектор атаки из арсенала пентестеров, о котором никто не рассказывает. Так что бери на вооружение, глядишь сгодится при прохождении очередного HackBox’а.
🛠 #security #linux
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog




