Shellcode: выполнить 2 вызова execve()
Я пытаюсь написать шеллкод в сборке. Мне нужно выполнить /usr/bin/killall
команда И /usr/bin/wget
команда. У меня обе команды отлично работают в шеллкоде с execve()
Системный вызов. Но теперь я хочу объединить эти 2, но это невозможно, потому что программа завершается, когда первый execve()
вызов выполнен. (из справочных страниц execve()
: execve()
не возвращается в случае успеха).
Как я могу выполнить 2 execve()
звонки? Или есть другой способ вызвать оба /usr/bin/killall
а также /usr/bin/wget
из того же шелл-кода?
Привет и спасибо заранее!
2 ответа
Когда вы используете семейство функций exec, вызываемая вами программа подставляется в текущий процесс. Поэтому, когда выполняется первый execve-вызов, весь образ вашего процесса исчезает, и, таким образом, второй вызов никогда не выполняется. Чтобы обойти это, вы должны форкнуть другой процесс перед вызовом execve.
Прежде всего, невозможно выполнить два execve()
один за другим. Просто потому, что по определению execve()
call перезапишет память исходного процесса новым, и вы никогда не сможете снова вернуться к исходному процессу.
Второй вариант, который вы предлагаете (слияние /usr/bin/killall
а также /usr/bin/wget
в шеллкод) вполне возможно, если killall
Команда не убивает процесс, выполняющий сам шеллкод. Если это так, мне действительно нужно больше информации о том, почему это поведение необходимо, потому что оно кажется мне немного абсурдным (но я, конечно, скучаю по контексту, в котором вы запускаете свой шелл-код).