"Взлом" способ удаленной оболочки в 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 внутри другого, говоря, что он должен вытолкнуть весь вывод в ваш файловый дескриптор. Трюк сделан! Двусторонняя связь.