The OpenNET Project / Index page

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

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Почему не хватает привелегий для setreuid?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Разное)
Изначальное сообщение [ Отслеживать ]

"Почему не хватает привелегий для setreuid?"  +/
Сообщение от belmondo email(ok) on 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
В чем может быть проблема?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Почему не хватает привелегий для setreuid?"  +/
Сообщение от pavlinux (ok) on 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 +++


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Почему не хватает привелегий для setreuid?"  +/
Сообщение от ACCA (ok) on 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 +++


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Почему не хватает привелегий для setreuid?"  +/
Сообщение от pavlinux (ok) on 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...

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Почему не хватает привелегий для setreuid?"  +/
Сообщение от ACCA (ok) on 28-Сен-17, 19:48 
> Читал - знакомых букав не встретил?
>> Ты подправил только al и сделал следующий syscall к функции №18446744072635809596
> До этого было "xor eax, eax", так шта AH = 0x00

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

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Почему не хватает привелегий для setreuid?"  +/
Сообщение от pavlinux (ok) on 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


Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Почему не хватает привелегий для setreuid?"  +/
Сообщение от ACCA (ok) on 30-Сен-17, 06:04 
> Когда теперь? Причем теперь? Я про стостояние после [mov al, 0x71]
> У тя было написано: "Ты подправил только al..."

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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