溢出漏洞原理及利用(2)

本文深入探讨了C/C++程序中的溢出漏洞原理,通过实例展示了如何利用溢出执行系统的MessageBox和植入自定义代码。作者首先解释了如何通过控制返回地址来执行系统函数,并成功弹出MessageBox。接着,作者编写了一个简单的HelloWorld Shellcode,将其转换为二进制代码,并在存在溢出漏洞的程序中成功执行。
摘要由CSDN通过智能技术生成

溢出漏洞原理及利用

本文是作者学习过程的笔记整理而来的,如有错误,还请见谅!

接上一篇

利用溢出执行系统的MessageBox

既然是函数的返回地址被淹没了,导致执行返回地址处的代码的时候出错,我们也看到返回地址处是我们在password.txt中输入的数据当成了地址,那么我们是不是可以控制这个数据,让它返回的时候返回我们自己想要执行地方.
简单测试(弹出系统MessageBox):
因为之前已经想到了要使用MessageBox,所以其实代码中早就加入了

    if (NULL == (fp = fopen("password.txt", "rb")))
    {
        MessageBoxA(NULL, "Open File Fail", "error", NULL);
        exit(0);
    }

这样是为了测试跟演示方便(不需要在加载其dll了).
好,我们先找到程序中MessageBoxA函数的地址
使用x64dbg打开源程序,ctrl+G输入表达式MessageBoxA确定,
如下,找到地址0x7666F8B0
这里写图片描述
这里写图片描述
使用010Editor以十六进制的方式打开password.txt文件,找到函数返回地址处
这里写图片描述
更改成MessageBoxA的地址(0x7666F8B0):
这里写图片描述
那么MessageBoxA还有4个参数呢,把它们放在哪里呢?
根据函数栈中的结构,我们知道参数是在返回地址的高地址处,这个源程序也把文件中的数据顺序复制到栈中了.所以我们直接在函数返回值后边”压栈”4个参数0.
这里写图片描述
保存password.txt文件,再次运行源程序测试.
这里写图片描述
弹出了对话框,测试成功.


利用溢出执行自己的代码

构造最简单的HelloWorld版本Shellcode
经过测试,我们知道利用这个函数的返回

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值