Почему не хватает привелегий для setreuid?, belmondo, 17-Сен-17, 12:53 [смотреть все]написал небольшой кодик асм: section .text global _start _start: xor eax, eax mov al, 0x71 xor ebx, ebx xor ecx, ecx xor esi, esi xor edi, edi syscall mov al, 0x3c syscall который дропает ошибку: $sudo nasm -static -f elf64 exit.asm && sudo ld exit.o -o exit && sudo ./exit; strace ./exit [sudo] пароль для belmondo: execve("./exit", ["./exit"], [/* 61 vars */]) = 0 setreuid(0, 0) = -1 EPERM (Operation not permitted) strace: [ Process PID=7703 runs in x32 mode. ] syscall_18446744072635809596(0, 0, 0, 0, 0, 0) = -1 (errno 38) --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xffffffffffffffda} --- +++ killed by SIGSEGV (core dumped) +++ Ошибка сегментирования (сделан дамп памяти) Но код с такой же сутью на плюсах ее не дропает: #include <unistd.h> #include <iostream> using namespace std;int main() { cout << setreuid(0,0) << endl; return 0; } $ g++ -o check check.cpp && sudo ./check 0 В чем может быть проблема?
|
- Почему не хватает привелегий для setreuid?, pavlinux, 04:08 , 18-Сен-17 (1)
> В чем может быть проблема?от юзера пустил. > ...; strace ./exit . > Но код с такой же сутью на плюсах ее не дропает: ессесенно > sudo ./check .
$ su -c 'strace ./exit' Пароль: execve("./srs", ["./srs"], [/* 49 vars */]) = 0 setreuid(0, 0) = 0 _exit(0) = ? +++ exited with 0 +++
- Почему не хватает привелегий для setreuid?, ACCA, 04:47 , 20-Сен-17 (2)
> +++ killed by SIGSEGV (core dumped) +++ > Ошибка сегментирования (сделан дамп памяти) > Но код с такой же сутью на плюсах ее не дропает: Ты тут два вопроса задал. Про привилегии вопрос странный - обычному юзеру не положено ставить setreuid=0. Про SIGSEGV - залёт по EPERM прислал тебе в ответку rax = -1. Ты подправил только al и сделал следующий syscall к функции №18446744072635809596 из 32-разрядного ABI. О*евшее ядро послало тебя курить дамп. "Код с такой же сутью на плюсах" не ленится заполнять все регистры, потому и не слетает. А так даже вернёт код ошибки: section .text global _start _start: xor eax, eax mov al, 0x71 xor ebx, ebx xor ecx, ecx xor esi, esi xor edi, edi syscall xchg eax, edi mov al, 0x3c syscall
$ strace ./exit execve("./exit", ["./exit"], [/* 53 vars */]) = 0 setreuid(0, 0) = -1 EPERM (Operation not permitted) _exit(4294967295) = ? +++ exited with 255 +++
- Почему не хватает привелегий для setreuid?, pavlinux, 04:32 , 22-Сен-17 (3)
Читал - знакомых букав не встретил? > Ты подправил только al и сделал следующий syscall к функции №18446744072635809596 До этого было "xor eax, eax", так шта AH = 0x00 > из 32-разрядного ABI. О*евшее ядро послало тебя курить дамп. Process PID=7703 runs in x32 mode. Изучай про Long Mode и в нём Compatibility Mode https://www.codeproject.com/Articles/45788/The-Real-Protecte...
- Почему не хватает привелегий для setreuid?, ACCA, 19:48 , 28-Сен-17 (4)
> Читал - знакомых букав не встретил? >> Ты подправил только al и сделал следующий syscall к функции №18446744072635809596 > До этого было "xor eax, eax", так шта AH = 0x00 Щаз. Там теперь 0xFF от кода возврата = -1.
- Почему не хватает привелегий для setreuid?, pavlinux, 01:52 , 29-Сен-17 (5)
>> Читал - знакомых букав не встретил? >>> Ты подправил только al и сделал следующий syscall к функции №18446744072635809596 >> До этого было "xor eax, eax", так шта AH = 0x00 > Щаз. Там теперь 0xFF от кода возврата = -1.Когда теперь? Причем теперь? Я про стостояние после [mov al, 0x71] У тя было написано: "Ты подправил только al..." xor eax, eax mov al, 0x71
это одножуйственно с (кроме дрочения запиську и дерганья стека и флагов) xor eax, eax mov al, 0x71 mov ah,0x00
- Почему не хватает привелегий для setreuid?, ACCA, 06:04 , 30-Сен-17 (6)
> Когда теперь? Причем теперь? Я про стостояние после [mov al, 0x71] > У тя было написано: "Ты подправил только al..." Хорошо, я расскажу медленно. О mov al,0x3c перед syscall с SIGSEGV. Он подправил только al, не учитывая, что в rax не 0, как было сразу после xor, а -1 после предыдущего syscall с залётом.
|