编写shellcode测试工具
不知不觉,shellcode已成功攻击过程中必不可少的步骤,后面的文章会继续介绍如何编写其它类型的shellcode。直到目前为止,每次完shellcode汇编代码,都需要找到之前(或者重新编写)带缓冲区溢出漏洞的代码进行测试,同时要不停地对准EIP以及esp地址。这对于测试shellcode的正确性来说,很不方便,也难以调试。为此,我们先编写shellcode测试工具,方便后面测试shellcode,所谓磨刀不误砍柴功。
shellcode测试工具sctest
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <sys/mman.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> char code[4096] __attribute__((aligned(4096))); int main(int argc, const char *argv[]) { int fd; int ret; void (*func)(void); if (argc != 2) { fprintf(stderr, "\n\tUsage: sctest <shellcode>\n\n"); return 1; } fd = open(argv[1], O_RDONLY); if (!fd) { fprintf(stderr, "Unable open file %s, err = %d(%m)\n", argv[1], errno); return 2; } ret = read(fd, code, sizeof(code)); if (ret < 0) { fprintf(stderr, "Unable read file %s, err = %d(%m)\n", argv[1], errno); return 3; } ret = mprotect(code, sizeof(code), PROT_EXEC); if (ret < 0) { fprintf(stderr, "Unable mprotect, err = %d(%m)\n", errno); return 4; } /* execute shell code */ func = (void (*)(void))code; func(); abort(); }
编译
测试以前的shellcode
2180
ivan@ivan:~/exploit/tools$ ./sctest32 ../shell2
$ echo $$
3178
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。