The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Почему не хватает привелегий для 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 +++





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру