有没有一种方法可以在不使用函数指针的情况下获取shellcode中函数的返回值?
#include <stdio.h>
unsigned char code[] = "\x55\x48\x89\xe5"
"\xb8\x05\x00\x00"
"\x00\x5d\xc3";
int main(void) {
int (*p)(void) = (int(*)(void))code;
printf("%d", p());
return 0;
}
答案 0 :(得分:1)
Shellcode(请参阅Wikipedia article Shellcode和本演示文稿Introduction to Shellcode Development)是注入到应用程序中的机器代码,以便接管该应用程序并在该应用程序的过程中运行您自己的应用程序。
shellcode如何注入到应用程序中并开始运行,这取决于渗透的方式。
但是,对于测试实际shellcode的方法(与首先注入shellcode的方法相反),测试通常是通过一个简单的程序完成的,该程序允许您(1)创建要注入的shellcode程序作为字节数组,并且(2)开始执行shellcode。
最简单的方法是您发布的源代码。
您有一个无符号字符数组,其中包含要执行的机器代码。
您有一个main()
,它会创建一个指向无符号char字节数组的函数指针,然后通过该函数指针调用shellcode。
然而,在现实世界中,通常要做的是使用一种技术,通过将Shellcode注入其进程空间来接管应用程序,然后触发该Shellcode的执行。一种这样的方法是缓冲区溢出攻击。例如,请参见COEN 152 Computer Forensics Buffer Overflow Attack和Wikipedia article Buffer overflow。
另请参见
还请注意,shellcode攻击的方法将根据所攻击的操作系统而有所不同。例如,请参见本文Basics of Windows shellcode writing,其中介绍了编写用于访问Windows中系统调用的shellcode的一些复杂过程。与本文相比,提供了How to write a Linux x86 shellcode的一种方式。