您现在的位置是:主页 > news > 哪些做直播卖食品的网站/工程建设数字化管理平台
哪些做直播卖食品的网站/工程建设数字化管理平台
admin2025/6/3 20:35:04【news】
简介哪些做直播卖食品的网站,工程建设数字化管理平台,浙江网站建设的要求,哪个网站音乐做的最好的看聊天记录,前几天自己写了一篇关于strcpy()函数溢出的文章,自己在网找了个例子实践然后写出来,当时的感觉是自己能够理解,但是写出来的逻辑却是乱七八糟。今天再往下看聊天记录发现后面老师竟然给出了例子,把例子运行…
看聊天记录,前几天自己写了一篇关于strcpy()函数溢出的文章,自己在网找了个例子实践然后写出来,当时的感觉是自己能够理解,但是写出来的逻辑却是乱七八糟。今天再往下看聊天记录发现后面老师竟然给出了例子,把例子运行了一篇,哇,竟然好熟悉的味道啊!看着老师在后面做的相应的讲解,只能说有人引导的感觉真的很好!
哈哈,扯皮了,回归正题啦。
1、代码示例:
// test0221.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include "string.h"<div class="blockcode"><blockquote>char *shellcode="\x64\x65\x66\x67\x68\x69\x70\x71\x05\x10\x40\x00";
//char *shellcode="abcd"; //不断地尝试abc...可以用来测试定位,哈哈,不过这个是一种笨方法啦void fun1(int a, int b)
{
printf("fun1 run!para a=%d,b=%d\n",a,b);
}
void fun2(int a)
{printf("fun2 run! para a=%d\n",a);
}
void fun3(int a,int b,int c)
{printf("fun3 run! para a=%d,b=%d,c=%d\n",a,b,c);
}
//主函数
int main(int argc, char* argv[])
{printf("begin\n");char a[4]={0};strcpy(a,shellcode);fun1(2,3);fun2(4);fun3(4,5,6);return 0;
}



2、反汇编查看
注意观察的点:ebp的值,在每个main函数都会程序中做一系列保护栈的操作,尤其是在函数结束后(及花括号之后),开始平衡堆栈。让寄存器恢复执行前的状态。代码如下:
- 004011A1 cmp ebp,esp //比较ebp与esp的值
- 004011A3 call __chkesp (00401250) //检查堆栈函数
- 004011A8 mov esp,ebp //在程序正常平衡堆栈执行结束后,ebp是main()开始保护堆栈的值(即最开始mov ebp, esp的值)。
- 004011AA pop ebp //
- 004011AB ret //相当于pop eip
(1)、代码溢出原理:
通过strcpy()进行溢出,将我们需要跳转的地址溢出到如下位置。转存失败重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
(2)、原理复现
首先,我们看在main()函数最开始实施保护堆栈操作 push ebp之后,ESP = 0012FF80,此时ESP指向的堆栈中的内容为刚刚push进去的ebp,为 0012FFC0。由于我们shellcode的位置为ebp入栈的前面位置,即 0012FF84.正在上传…重新上传取消
接下来观察char a[4] = { 0 } 入栈的位置,刚好在上一步 ebp 入栈位置的后面,即 0012FF7C,因此当我们用strcpy( a, shellcode )函数构造shellcode溢出时,我们利用构造shellcode比 a 多8位即可实现指定位置跳转。(8位 = 0012FF84 - 0012FF7C = 无用的代码(4位)+指定地址(4位))正在上传…重新上传取消
在此,我们这里用的是构造好的shellcode。
- char *shellcode="\x64\x65\x66\x67\x68\x69\x70\x71\x05\x10\x40\x00";
接下来观察strcpy()函数溢出情况,可以发现shellcode跳转地址刚好在我们指定好的位置(即最后ret 中pop eip的值)。转存失败重新上传取消
后面的内容就是函数结束后跳转到我们指定的地址啦。