Visitors hit counter dreamweaver

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编程深入的去学习。改天吧,这个估计得学习好几天呢。

 

posted @ 2013-04-10 21:07  Jason Damon  阅读(1118)  评论(0编辑  收藏  举报