我试图运行这段代码来获取shell,但即使禁用了ASLR,我也会遇到分段错误.我在我的AMD Ryzen 3电脑上运行这段代码,Ubuntu 20.04 64位版本.

我正在使用以下命令编译:

gcc -O0 -fno-stack-protector -z execstack getshell.c -o getshell

文件getshell.c如下:

#include <stdio.h>

unsigned char shellcode[] = \
"\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05";
int main()
{
    int (*ret)() = (int(*)())shellcode;
    ret();
}

编辑:我找到了这段代码here

推荐答案

unsigned char __attribute__((section(".text#"))) shellcode[]

适合我(注意#)

#是一个技巧-它注释gcc发出的汇编代码的一部分.

C++相关问答推荐

C中char数组指针的问题

XV 6中的MLFQ和RR

错误:C中需要参数声明符

通过管道将一个子系统的标准输出发送到另一个子系统的标准输出

为什么复合文字(C99)的返回会生成更多的汇编代码?

空指针的运行时强制转换

为什么我一直收到分段错误?

为什么net/if.h在ifaddrs.h之前?

Setenv在c编程中的用法?

在基本OpenGL纹理四边形中的一个三角形中进行渲染

为什么memcpy进入缓冲区和指向缓冲区的指针工作相同?

S将C语言宏定义为自身的目的是什么?(在glibc标题中看到)

如何用c语言修改shadow文件hash部分(编程)?

在C中访问数组中的特定值

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

在libwget中启用Cookie会导致分段故障

将回调/基于事件的C API转换为非回调API

如果类型是新的,offsetof是否与typeof一起工作?

Ubuntu编译:C中的文件格式无法识别错误

将数组中的所有元素初始化为 struct 中的相同值