修改返回函数 return 0

下面的程序的运行流程为main()函数调用了Magic()函数,通常执行完Magic()函数后会调用return 0 的地址,

但是在执行Magic()函数中时,数组下标指向了Printf()函数的内存地址,然后数组下标越界在内存中修改了retrun 0 的地址。就输出了Printf()函数中("Hello World \n ");


#include "stdafx.h"
#include <windows.h> void Printf()
{
printf("Hello World \n ");
system("pause");
}
void Magic()
{
int nNum[5] = { 0 };
nNum[8] = (int)Printf;
}
int main()
{
Magic();
return 0;
}

运行结果:

Hello World
请按任意键继续. . .

绕过密码-strcpy覆盖周边内存地址

下面的程序是一个简单的密码判断程序,程序运行的流程为将输入的密码字符串输入到char型的szPassWord[12]数组中。

然后使用strcmp()函数对比szBuffer与szPassWord的值,比对宏定义PASSWORD字符串是否跟szPassWord的值是不是相等,如果是不相等返回值在内存中显示为01,如果相等返回值为00。

再将strcmp函数的值赋值给nFlag,如果nFlag是0,在if里取反执行,显示出下面的内容。

Hello world(Flg=0)

在流程上,这样是没有问题的。所以为了演示strcpy()造成的安全性问题。系统内置函数strcmp()函数赋值给nFlag后,使用strcpy()函数将szPassWord[12]的内容拷贝到char型szBuffer[8]中,而此时szBuffer数组在内存中的地址距离nFlag变量开辟的int型4个内存空间非常近。

当szPassWord[12]的值使用strcpy()拷贝到szBuffer[8]后产生溢出,

szBuffer[8]所开辟的内存空间不足,strcpy()函数会改变szBuffer[8]内存周边的值。

只要控制输入的密码为16位,那么在strcpy()将szPassWord[12]拷贝给将szBuffer[8],将szBuffer[]的值后面的'\0'结束符控制在修改nFlag的内存空间第一个字节内(int型占用4个内存空间),就可以实现将strcmp()函数将szBuffer[]与szPassWord[]对比结果的返回值无论是否是00时,都用char型字符串后面'\0'覆盖到nFlag的值中,实现绕过密码的目的;

#include "stdafx.h"
#include <windows.h> #define PASSWORD "15pb" int _tmain(int argc, _TCHAR* argv[])
{ int nFlag = 0;
char szBuffer[8] = { 0 };
char szPassWord[12] = { 0 };
while (true)
{
printf(" please input PassWord:");
scanf("%s",szPassWord);
//如果szPassWord数组中的值与字符串对比
nFlag = strcmp(PASSWORD, szPassWord);
//将strcpy将szPassWord拷贝到szBuffer数组中;
//在应用层看起来没有什么问题,但是在内存中nFlag的四个字节地址离szBuffer非常的接近,输入了17个字符后,strcpy后面的'\0'更改了nflag的值;
strcpy(szBuffer, szPassWord);
if (!nFlag)
{
printf("Hello world(Flg=%d)",nFlag);
system("pause"); exit(0);
}
} return 0;
}

运行结果:

please input PassWord:0000000000
please input PassWord:000000000000000000
please input PassWord:000000000000000000
please input PassWord:00000000000000000
please input PassWord:0000000000000000
Hello world(Flg=0)

【漏洞分析】两个例子-数组溢出修改返回函数与strcpy覆盖周边内存地址的更多相关文章

  1. HTTP基础(分析两个例子)

    两个例子(一个get,一个post)(一个是访问页面,一个是提交修改后的博文): preferences.aspx:(header)(文件) 1.     Remote Address:42.121. ...

  2. 两个int数组对比,返回差异数据

    public static int[] DataDifference(int[] more, int[] few) { //差异Id var sbuNoItapSessionId = new int[ ...

  3. CVE-2015-7547漏洞分析从原因到利用到补丁(非常适合小白)【转】

    本文转载自:http://blog.csdn.net/u012406115/article/details/72232535 一.         漏洞概述 CVE漏洞链接:http://www.cv ...

  4. YTU 2580: 改错题----修改revert函数

    2580: 改错题----修改revert函数 时间限制: 1 Sec  内存限制: 128 MB 提交: 194  解决: 82 题目描述 修改revert函数,实现输入N个数,顺序倒置后输出 #i ...

  5. Linux漏洞分析入门笔记-CVE_2018_6323_整型溢出

    操作系统   Ubuntu 16.04 /32 位 调试器     IDA pro 7.0 漏洞软件   binutils-2.29.1 0x00: 漏洞描述 1.什么是整数溢出: 在计算机中,整数分 ...

  6. CVE-2009-0927-Adobe Reader缓冲区溢出漏洞分析

    0x00概述: 此漏洞的成因是由于Adobe Reader在处理PDF文档中所包含的JavaScript脚本时的Collab对象的getlcon()方式不正确处理输入的参数,而产生的缓冲区溢出,成功利 ...

  7. UEditor编辑器两个版本任意文件上传漏洞分析

    0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...

  8. [转]UEditor编辑器两个版本任意文件上传漏洞分析

    0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...

  9. CVE-2010-2883:基于样本分析 PDF SING表字符溢出漏洞

    0x01 前言 CVE-2010-2883 漏洞的成因是由于 CoolType.dll 这个动态链接库在解析 SING 表中的 uniqueName 这个项时没有对长度进行限制,导致使用 strcat ...

随机推荐

  1. JavaScript 隐式类型转换

    JavaScript 隐式类型转换 原文:https://blog.csdn.net/itcast_cn/article/details/82887895 · 1.1 隐式转换介绍 · 1.2 隐式转 ...

  2. linux上搭建nginx

    安装包:(按顺序执行过去即可,重复无所谓)c++编译环境 yum install gcc-c++ 安装pcre yum -y install pcre-devel 安装openssl yum -y i ...

  3. 【Gym 100015B】Ball Painting(DP染色)

    题 There are 2N white balls on a table in two rows, making a nice 2-by-N rectangle. Jon has a big pai ...

  4. 【题解】 bzoj3036: 绿豆蛙的归宿 (期望dp)

    题面戳我 Solution 反向建图跑拓扑排序,顺便处理\(dp\) 假设某条边是\(u \rightarrow v (dis)\) ,那么转移方程就是\(dp[v]+=(dp[u]+dis)/in[ ...

  5. 设置outlook 2013 默认的ost路径

    How To Change Default Data File (.OST) Location in Office 2013 To set the default location of an out ...

  6. SharePoint 2013 event id 8321 错误

    SharePoint 2013里会报8321的错误: A certificate validation operation took 15011.1412 milliseconds and has e ...

  7. 将一个字符串中的空格替换成“%20”(C、Python)

    将一个字符串中的空格替换成“%20” C语言: /* ----------------------------------- 通过函数调用,传地址来操作字符串 1.先计算出替换后的字符串的长度 2.从 ...

  8. docker的网络模式

    记性不好,回顾一下.按照惯例,直接看官文. Docker's networking subsystem is pluggable, using drivers. Several drivers exi ...

  9. 洛谷P3768 简单的数学题

    解: 神奇的一批......参观yyb巨神的博客. 大致思路就是第一步枚举gcd,发现后面有个限制是gcd=1,用反演,得到的F(x)是两个等差数列求积. 然后发现有个地方我们除法的除数是乘积,于是换 ...

  10. HTML中的相对路径与绝对路径(转)

    原文地址:http://www.cnblogs.com/heyonggang/archive/2013/03/01/2938984.html 在HTML里只要涉及文件的地方(如超级链接.图片等)就会涉 ...