#linux #assembly #gdb #execl
Вопрос:
Изучая ROP и использование гаджетов, я наткнулся на случай, когда у меня есть надежный гаджет, который работает execl("sh", "-c", "/bin/sh")
, но _exit(0x7f)
сразу же после этого.
При тестировании этого гаджета я обнаружил, что оболочка действительно открывается и закрывается через долю секунды при _exit
вызове.
Гаджет, найденный в libc.so.6:
LEA EAX,[ESI 0xfffa8b28]=>DAT_0016bb28 ; "-c"
SUB ESP,0xc
PUSH 0x0
PUSH dword ptr [ESP param_2]
PUSH EAX=>DAT_0016bb28 ; "-c"
LEA EAX,[ESI 0xfffa8b30]=>DAT_0016bb30 ; "sh"
PUSH EAX=>DAT_0016bb30 ; "sh"
LEA EAX,[ESI 0xfffa8b2b]=>DAT_0016bb2b ; "/bin/sh"
PUSH EAX=>DAT_0016bb2b ; "/bin/sh"
CALL execl
ADD ESP,0x14
PUSH 0x7f
CALL _Exit
При использовании в gdb:
process 239607 is executing new program: /bin/dash
sh: 0: -c requires an argument
[Inferior 1 (process 239607) exited with code 02]
(gdb) r
Starting program: /bin/dash
$
При использовании в обычном исполнении без отладчика он просто останавливается.
Мой вопрос в том, является ли это обреченным гаджетом, или есть возможный способ все еще использовать его?
Комментарии:
1. Он
_Exit
никогда не вызывается, потому что был передан контрольsh
, который, в свою очередь, немедленно вышел сам по себе из-за неправильного вызова. Если вы вызываетеsh
правильно, он должен оставаться открытым. Согласно сообщению об ошибке, он работает/bin/sh -c
вместо/bin/sh -c /bin/sh
2. @thatotherguy Хм. Об этом я как-то не подумал. Так что мне просто нужно, чтобы он работал правильно, и я в порядке. Спасибо!
3. Всегда помните:
execl
заменяет текущий процесс другим. Любой код, следующий заexecl
вызовом, запускается только в том случае, если вызов каким-либо образом завершается неудачно. Поэтому, если вы можете ввестиexecl
вызов, совершенно не имеет значения, что последует за вызовом.
Ответ №1:
Как упоминал @thatotherguy в своем комментарии, по-видимому, параметр _exit was not called, and the problem was that this gadget had a simple constrain that I couldn't figure out -
2 (который я не контролировал) должен был иметь определенное значение.
Исправлено путем поиска другого гаджета. Спасибо за обучение!