URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10180
[ Назад ]

Исходное сообщение
"Почему не хватает привелегий для 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 , 18-Сен-17 04:08 
> В чем может быть проблема?

от юзера пустил.
> ...; 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 , 20-Сен-17 04:47 
> +++ 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 , 22-Сен-17 04:32 
Читал - знакомых букав не встретил?

> Ты подправил только 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 , 28-Сен-17 19:48 
> Читал - знакомых букав не встретил?
>> Ты подправил только al и сделал следующий syscall к функции №18446744072635809596
> До этого было "xor eax, eax", так шта AH = 0x00

Щаз. Там теперь 0xFF от кода возврата = -1.


"Почему не хватает привелегий для setreuid?"
Отправлено pavlinux , 29-Сен-17 01:52 
>> Читал - знакомых букав не встретил?
>>> Ты подправил только 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 , 30-Сен-17 06:04 
> Когда теперь? Причем теперь? Я про стостояние после [mov al, 0x71]
> У тя было написано: "Ты подправил только al..."

Хорошо, я расскажу медленно. О mov al,0x3c перед syscall с SIGSEGV. Он подправил только al, не учитывая, что в rax не 0, как было сразу после xor, а -1 после предыдущего syscall с залётом.