Мне нужно написать шелл-код, и есть одна часть, которая не работает:
0: b0 c9 mov $0xc9,%al
2: cd 80 int $0x80
4: 89 c3 mov %eax,%ebx
6: 89 c1 mov %eax,%ecx
8: b0 cb mov $0xcb,%al
a: cd 80 int $0x80
Это эквивалент setreuid(geteuid(),geteuid())
(по крайней мере, я на это надеюсь). Это не приводит к сбою программы и ничего не портит, проблема в том, что она не делает ничего . Например, я поставил шелл-код, который выполняет / bin / sh после этого, а / bin / sh работает нормально. Кажется, что любые системные вызовы, связанные с setuid, не имеют абсолютно никакого эффекта.
Когда я запускаю strace, он выдает:
syscall_4294957257(0, 0x8048552, 0xffffd875, 0xf7fc7000, 0xf7fc7000, 0xffffd618) = -1 (errno 38)
syscall_4294967243(0xffffffda, 0xffffffda, 0xffffd875, 0xf7fc7000, 0xf7fc7000, 0xffffd618) = -1 (errno 38)
execve("/bin//sh", NULL, NULL) = 0
Я получаю один и тот же вывод для setuid(id)
и getuid()
. Так что мне интересно, почему strace признает execve как execve, но не других. Разве не следует просто распознать setreuid
?