Отправка двоичных данных в gets()

Отправка двоичных данных в gets()

У меня есть программа-жертва (с уязвимостью переполнения буфера): она использует gets() для записи в буфер фиксированного размера.

Предположим, я помещаю шеллкод в файл SC. Затем я запускаю

$ ./victim < SC
Input your data: 
$

Причина, по которой шелл-код, похоже, не работает, заключается в следующем: SC перенаправляется к жертве, внедряет шелл-код, вызывает создание оболочки, но созданная оболочка обнаруживает, что ее stdin закрыт, поэтому немедленно завершает работу.

Я попробовал expectсделать инъекцию, но expectпосле появления снаряда появляются бомбы.

Похоже, что единственный практичный способ — это поместить шеллкод в буфер вставки моей мыши, чтобы я мог ввести его, сохраняя клавиатуру в качестве устройства ввода. Но я понятия не имею, как поместить двоичные данные в буфер вставки.

Есть идеи, как обойти эту проблему?

решение1

Решение этой проблемы (с которой кто-то столкнулся в том же контексте) находится здесь: https://stackoverflow.com/questions/8509045/execve-bin-sh-0-0-in-a-pipe

решение2

Это можно сделать с помощью простого скрипта, в котором вы печатаете специальные символы.

Например, в Perl можно напечатать любой символ, указав его шестнадцатеричный код. Например: perl -e 'print "\x54\x0A"'печатает «T», за которым следует новая строка.

Затем вы можете скопировать напечатанный текст, даже если он не виден. Конечно, ваш терминал должен быть в режиме raw.

Связанный контент