本篇是sploitfun的学习调试笔记,持续更新。未完待续
Classic Stack Based Buffer Overflow
漏洞程序为:
1 |
|
编译:
1 | gcc -g -fno-stack-protector -z execstack -o vuln vuln.c |
关掉了所有的保护:
作为第一个程序,遇到了只有调试才会遇到的坑。。。
1 | gdb-peda$ disassemble main |
- 看到有数据对齐,在结尾时通过ecx恢复esp,而ecx是从栈上恢复的,于是在ecx所在的栈地址处写上正确地址加4.
- 另一个坑是此处数据是通过argv传入,它保存在栈上,于是不同长度的数据会导致栈帧地址发生变化.
考虑到这两点,利用代码为。。。没写出来,太烦了。此处利用的是strcpy()
,\x00
是坏字符,需要避免,这里用的是作者到shellcode,可以说是非常简洁了:
1 | print disasm("\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80") |
Integer Overflow
漏洞程序为:
1 |
|
依然使用没有任何保护的编译方式,查看反汇编代码:
1 | gdb-peda$ disas flow |
使用远程调试:
1 | socat tcp-l:9999,fork exec:./vul |
利用代码如下:
1 | 0xbfffeee0 retAddr = |