`
huobengle
  • 浏览: 863510 次
文章分类
社区版块
存档分类
最新评论

2.栈溢出简单利用

 
阅读更多

看代码


会点C语言就能看懂吧,有个验证密码是否正确的函数

要注意的一点是要关闭编译时的GZ选项,VC6以上版本关闭GS编译选项

具体方式:vc6工程-设置-c/c++-工程选项里面去掉GZ

vsC/C++ 代码生成 缓冲区安全检查 否

生成程序输入密码,当输入的为8位但是数值比1234567大时均会通过验证,这是为什么呢?

拿到OD中看下

当输入12345678时,堆栈中如下所示


strcmp之后authenticated的值为0000001,strcpy函数用字符串12345678最后一个NULL给覆盖了这个值,所以会通过验证
当我们输入01234567时,因为比1234567小,所以strcmp会返回-1.补码为0xFFFFFFFF,OD中看下


authenticated为FFFFFF,所以还是不会通过验证的
另外问下为什么我OD中那些像strcpy什么的函数都识别不出来,CALL的都是一个模块内的地址
是不是符号的问题?


下面我们再换种方式


为了方便测试直接在程序内定义一个字符串,这样编译运行后会弹出一个引用的0xbbbbbbbb内存不能 为read错误,原因就不多说了。

我们把这个0xxbbbbbbbb改为输出正确的分支就可以,拖到OD中找到输出正确的地址,是0x00401106,替换掉就OK 。

运行下就会输出正确了,不过程序之后会崩溃掉,因为栈内EBP被覆盖为无效值,使得程序在退出时堆栈无法平衡。

分享到:
评论

相关推荐

    Advanced Windows Debugging 英文原版

    5.2.1.栈溢出 142 5.2.2.异步操作与栈顶指针 147 5.2.3.调用约定的不匹配154 5.2.4.回避策略164 5.3.小结 166 第6章.内存破坏之二—堆 167 6.1.堆简介167 6.1.1.前端分配器 168 6.1.2.后端分配器 169 6.2.堆破坏181 ...

    Java开发技术大全(500个源代码).

    overflowExample.java 演示溢出 precedence.java 演示自加运算符的优先级 primeNumber.java 输出100-200之间的所有素数 ranking.java 评定成绩等级 rankingBySwitch.java 用switch语句评定成绩等级 ...

    数据结构与算法.xmind

    简单选择排序 思想 每次选择最大的数插入到末尾中 做法 外层for循环控制次数 内层for循环找出最大的值的角标 找出最大角标后,进行交换 优化思路 同时...

    C语言实战105例源码.rar

    实例50 远程缓冲区溢出漏洞利用程序 144 实例51 简易漏洞扫描器 146 实例52 文件病毒检测程序 149 实例53 监测内存泄露与溢出 150 实例54 实现traceroute命令 152 实例55 实现ping程序功能 154 实例56 ...

    C语言实战105例源码

    实例50 远程缓冲区溢出漏洞利用程序 144 实例51 简易漏洞扫描器 146 实例52 文件病毒检测程序 149 实例53 监测内存泄露与溢出 150 实例54 实现traceroute命令 152 实例55 实现ping程序功能 154 实例56 ...

    c语言实战105例源码

    50 远程缓冲区溢出漏洞利用程序  51 简易漏洞扫描器  52 文件病毒检测程序  53 监测内存泄露与溢出  54 实现traceroute命令  55 实现ping程序功能  56 获取Linux本机IP地址  57 实现扩展内存...

    c/c++ 学习总结 初学者必备

    (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称...

    c语言编写单片机技巧

    都是利用一些简单的指令组成的,简单的指令代表 MCU 的线路可以尽量做到最佳化,而提高执行速率。另外初学者要具备单片机I/O接口的应用知识,这在于周边应用电路及各种元器件的使用,须配合自己所学的电子学及...

    C语言实战105例 含105个源代码

    实例50 远程缓冲区溢出漏洞利用程序 144 实例51 简易漏洞扫描器 146 实例52 文件病毒检测程序 149 实例53 监测内存泄露与溢出 150 实例54 实现traceroute命令 152 实例55 实现ping程序功能 154 实例56 ...

    《C语言实战105例》

    实例50 远程缓冲区溢出漏洞利用程序 144 实例51 简易漏洞扫描器 146 实例52 文件病毒检测程序 149 实例53 监测内存泄露与溢出 150 实例54 实现traceroute命令 152 实例55 实现ping程序功能 154 实例56 ...

    JAVA面试题最全集

    堆和栈的区别 20.ejb的分类及区别 21.你对现在软件业以及国内软件业的看法 22.谈谈java多线程 23.谈谈文件加密技术 24.软件开发生命周期 25.路由协议种类及特点 26.java的awt和swing组件的GUI设计的关键 27....

    操作系统(内存管理)

    不过,即使是在这样一个简单的计算机中,您也会有问题,尤其是当您不知道程序的每个部分将需要多少内存时。如果您的空间有限,而内存需求是变化的,那么您需要一些方法来满足这些需求: 确定您是否有足够的内存来...

    leetcode双人赛-LeetCode:2019年5月开始拿Java刷leetcode

    leetcode双人赛 LeetCode Some LeetCode exercises ...简单栈 2019-06-05 21_合并两个有序链表 与合并两个有序数组一样的,基本思路;居然还可以递归写 2019-05-29 24_两两交换链表中的节点 迭代/递归 201

    java 面试题 总结

    比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 ...

    超级有影响力霸气的Java面试题大全文档

    比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 19、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 ...

Global site tag (gtag.js) - Google Analytics