shellcode之简单的栈溢出实验
最近看了0day和The shellcoder's handbook,对栈溢出有了些了解。并且对书上的实验也自己做了些。自己动手才真正把看到的知识变成自己的。
今天在看handbook的时候,按照书上的代码来时间操作,发现实现不聊,百思不得其解,最后自己用ollydbg分析了下,把它改了改,顺利的跑了起来,达到了自己的目的。
很是高兴。凡事还是要多琢磨,多去研究,总会得到些意想不到的东西。
下面是我改的,是修改返回地址使程序不断的循环。首先要通过ollydbg查看函数return_input的返回地址为:0x00401098,然后就往数组里面填这个数。当然也要先计算好它们在内存中的位置,然后去确定使返回地址刚刚为0x99401098,这样就会使得程序不断的循环。对于没学过栈溢出的人,会纳闷为什么这个程序没有报错,溢出了。呵呵,但是却没有,是不是很神奇的样子,嘻嘻~ 其实我也是刚刚入门的,自己弄来玩玩而已。当然,参数i的放置的位置也很重要,开始我把它放置在数组的前面,程序也没有报错,而是正常退出了,后来用ollydbg查看了下,原来当把缓存区填满之后,下一个0x00401098也会把i的值也改变了。这是的i肯定比36大,所以正常退出了。后来把i放在数组的后面,成功了。不错不错,哈哈。
#include <stdio.h> void return_input(void){ char array[30]; int i = 0; for (i=0; i<=36; i+=4) { *(long *)&array[i] = 0x00401098; } //printf("hahahaha.\n"); } int main() { return_input(); return 0; }
对了,今天偷懒了。。。下午睡懒觉,没去上班。。所以没把linux下得socket编程深入的去学习。改天吧,这个估计得学习好几天呢。
我是一名在校大学生,热爱编程,虽然起步晚了些,但我会努力的。呵呵!
数据结构 算法