我们先ssh连接上之前已经使用qemu搭建好的arm环境。

本系列实验用到的工具包括:
gdb-调试器
gef-gdb插件
gcc-gnu编译器套件
as-汇编器
ld-链接器
strace-跟踪系统调用
objdump-检查反汇编中的空字节
objcopy-从ELF二进制文件中提取初始shellcode
在开始写shellcode之前,需要知道一些基础的准则,比如:
- shellcode应该紧凑并且没有空字节
原因:我们正在编写shellcode,我们将使用它来利用缓冲区溢出等内存损坏漏洞。 由于使用了C函数’strcpy’,会发生一些缓冲区溢出。 它的工作是复制数据,直到收到空字节。 我们使用溢出来控制程序流,如果strcpy命中空字节,它将停止复制我们的shellcode,我们的漏洞将不起作用。 - 尽量避免库调用和绝对内存地址
理由:为了使shellcode尽可能通用,我们不能依赖于需要特定依赖关系的库调用和依赖于特定环境的绝对内存地址
写shellcode包括如下几个步骤:
- 知道你想要使用的系统调用是什么
- 配置系统调用号和所选系统调用函数所需的参数
- 消除shellcode中的null-byte
- 将shellcode转为16进制字符串
理解系统函数
在深入研究我们的第一个shellcode之前,让我们编写一个输出字符串的简单ARM汇编程序。 第一步是查找我们想要使用的系统调用,在我们的例子中是是“write”。 可以在Linux手册页中查找此系统调用的原型:

本文详细介绍ARM环境下Shellcode的开发流程,涵盖调试器、编译器等工具使用,规避null-byte技巧,以及如何实现系统调用如write和execve。通过实际案例,展示如何编写紧凑、通用的Shellcode。
最低0.47元/天 解锁文章
434

被折叠的 条评论
为什么被折叠?



