"Взлом" способ удаленной оболочки в 5 символов
В этот уик-энд произошел CTF wargame, Secuinside CTF 2013 (http://war.secuinside.com/)
Будучи энтузиастом компьютерной безопасности, я взглянул на проблемы и на их решения после завершения CTF.
Одна из проблем заключалась в получении удаленной оболочки на сервере, учитывая, что на этом сервере запущен демон, называемый "givemeshell". То, что делает демон, - это держать сокет открытым на выбранном порту, допустим, порт 12345.
Когда сокет получает что-то, демон принимает первые 5 символов и запускает их в оболочке.
Например, если я отправлю cat file
, демон запустит команду cat f
в оболочке. Ответ не отправляется, поэтому я не могу узнать результат команды.
Цель состоит в том, чтобы прочитать файл, содержащий флаг.
Теперь кто-то дал мне это решение:
$ nc 1.2.3.4 12345
4<>a
$ nc 1.2.3.4 12345
sh<&4
sh>&4
cat flag
The flag is _FLAG_
Я тестировал это решение, и оно работает. Но, потратив несколько часов, пытаясь понять это, я все еще не могу понять, что он делает и почему он работает. Я понимаю, что это перенаправление чего-то...
Может кто-нибудь объяснить это мне? Спасибо!
Ответы
Ответ 1
4 - это дескриптор файла подключения.
0 - программа stdin, 1 - программа stdout, 2 - программа stderr, когда вы создали сокет для прослушивания подключений, который затем был назначен 3, и когда он принял ваше соединение, новый файловый дескриптор номера 4 был создан для обработки этого соединения.
4 - это идентификатор файлового дескриптора вашего подключения к бэкдору, предполагая, что вы первый подключаетесь.
Затем введите sh<&4
. Он открывает sh
и говорит, что он должен получить все входные данные непосредственно из вашего соединения.
Прямо сейчас вы уже полностью контролируете оболочку, потому что sh
взял на себя, и каждая отправляемая вами команда интерпретируется им напрямую. Но вы все еще не видите никакого выхода!
Затем вы вводите sh>&4
, чтобы открыть новый уровень sh
внутри другого, говоря, что он должен вытолкнуть весь вывод в ваш файловый дескриптор. Трюк сделан! Двусторонняя связь.