.png)
У меня есть программа-жертва (с уязвимостью переполнения буфера): она использует 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.