【转】strcpy溢出的攻击示例
在学习c/c++的时候,就讲到了一些C类型的字符串函数不是安全的,比如strcpy没有检查长度会溢出,推荐使用strncpy,笔试面试也经常问到。同时经常浏览安全相关的新闻,缓冲区溢出攻击是很常见的一种。那缓冲区溢出为什么可以攻击。今天通过strcpy进行简单的演示。
如下是guess_pwd.cpp代码
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
if (argc != 2)
{
printf("Invalid params\n");
exit(1);
}
bool check_result = false;
char pass[10];
memset(pass,0,10);
strcpy(pass, argv[1]);
if (0 == strcmp("xuzeshui", pass))
{
check_result = true;
}
if (check_result)
{
printf("Check password succ!\n");
}
else
{
printf("Check password failed!\n");
}
return 0;
}
上面的代码使用g++编译 g++ -o guess_pwd guess_pwd.cpp 生成可执行文件。当我们运行下面的输入。
./guess_pwd 0123456789012345
我们期望的是提示”Check password failed!”,结果却提示了”Check password succ!”。说明尽管我们不知道密码是多少,但通过缓冲区溢出,绕过了密码的安全检验逻辑。
上述check_result和pass两个变量由于是局部变量,故申请的时候是在栈上分配。由于栈是从高地址往低地址,所以从地址由低到高,check_result分配在pass后面,当进行strcpy操作的时候,因为没有检测输入长度,所以pass溢出了,会覆盖后面的内存区域。由于check_result在pass后面,所以当溢出足够的时候,check_result被改写了。
PS:check_result是否是仅挨着pass分配那不得而知,这个取决于编译器的优化,但是溢出就面临数据被异常改写的风险。
转载自听风江湖
本文链接地址: strcpy溢出的攻击示例
【转】strcpy溢出的攻击示例的更多相关文章
- OpenSSL Heartbleed “心脏滴血”漏洞简单攻击示例
OpenSSL Heartbleed漏洞的公开和流行让许多人兴奋了一把,也让另一些人惊慌了一把. 单纯从攻击的角度讲,我已知道的,网上公开的扫描工具有: 1. Nmap脚本ssl-heartblee ...
- OpenSSL Heartbleed "心脏滴血"漏洞简单攻击示例
转自:http://www.lijiejie.com/openssl-heartbleed-attack/ OpenSSL Heartbleed漏洞的公开和流行让许多人兴奋了一把,也让另一些人惊慌了一 ...
- XSS攻击原理、示例和防范措施
XSS攻击 XSS(Cross-Site Scripting,跨站脚本)攻击历史悠久,是危害范围非常广的攻击方式. Cross-Site Stripting的缩写本应该是CSS,但是为了避免和Casc ...
- 智能合约安全事故回顾(2)-BEC溢出攻击
讲溢出攻击之前,先给大家讲个故事:2014年的时候,美国的宾夕法尼亚州的某个小镇上发生了一个乌龙事件,征兵系统对一万多名1893年到1897出生的男子发去信函,要求他们注册参军,否则面临罚款和监禁.收 ...
- MSF MS11-050/10-087/Adobe攻击实践及内存保护技术
MSF MS11-050/10-087/Adobe攻击实践及内存保护技术 内存攻击指的是攻击者利用软件安全漏洞,构造恶意输入导致软件在处理输入数据时出现非预期错误,将输入数据写入内存中的某些特定敏感位 ...
- 改善C++ 程序的150个建议学习之建议7:时刻提防内存溢出
作为一个程序员,对内存溢出问题肯定不陌生,它已经是软件开发历史上存在了近40年的大难题.在内存空间中,当要表示的数据超出了计算机为该数据分配的空 间范围时,就产生了溢出,而溢出的多余数据则可以作为指令 ...
- 【CSAPP笔记】9. 汇编语言——缓冲区溢出
x86-64 Linux 内存结构 先来看看一个程序在内存中是如何组织的.Linux 为每个进程维持了一段单独的虚拟地址空间.(进程是计算机科学中很深刻.很成功的一个概念.当我们在运行一个程序时,会得 ...
- 20145319 return-to-libc攻击实验
20145319 Return-to-libc攻击实验 一 实验内容 return-to-libc实验是一个基于缓冲区溢出攻击实验的基础上的一种攻击实验 缓冲区溢出攻击相关知识: 原理:通过一段包含s ...
- 灰帽黑客 基本的Linux漏洞攻击
有两个重要的寄存器负责处理堆栈:基址指针(EBP)和栈指针(ESP),EBP指向当前进程的当前栈帧的底部,ESP则总是指向栈顶 当调用函数的时候,会导致程序流跳转.在汇编代码调用函数时,将发生以下三件 ...
随机推荐
- python 安装 管理包 pip
2.7的坑里出不来了,现在已经换到3.4了,不存在下列问题. win7下安装pip http://blog.chinaunix.net/uid-24984661-id-4202194.html ...
- solr的collection,shard,replica,core概念
一.collection 1.由多个cores组成一个逻辑索引叫做一个collection.一个collection本质上是一个可以跨越多个核的索引,同时包含冗余索引. 2.collection由不同 ...
- 深入浅出ES6(九):学习Babel和Broccoli,马上就用ES6
作者 Jason Orendorff github主页 https://github.com/jorendorff 现在,我们将向你分步展示如何做到的这一切.上面提及的工具被称为转译器,你可以将它 ...
- 十佳AngularJS框架
您是否还在烦恼如何没有困难地创建一个创新型的Web应用程序?那么一定不要错过这个集合!在本文中,小编为大家收集了十个非常棒的AngularJS框架.AngularJS框架拥有大量有用的工具和组件,可以 ...
- Log4J入门教程(二) 参数讲解
继续接着Log4J入门教程(一)中的例子进行讲解,其中log4j.properties中的内容为 Log4j的三个重要组件—— Loggers, Appenders, Layouts ,这三个组 ...
- linux驱动模型<输入子系统>
在linux中提供一种输入子系统的驱动模型,其主要是实现在input.c中. 在输入子系统这套模型中,他把驱动分层分类.首先分为上下两层,上层为input.c .下层为驱动的实现,下层分为两部分,一部 ...
- 在eclipse中调试web项目的时候如何把web项目分配给配置好的服务器
举个例子,我今天在做spring和struts2整合的例子 新建项目blk 1.配置好web.xml,struts.xml,applicationContext.xml,写好jsp页面 2.把stru ...
- 人脸识别算法准确率最终超过了人类 The Face Recognition Algorithm That Finally Outperforms Humans
Everybody has had the experience of not recognising someone they know—changes in pose, illumination ...
- 蓝牙接收苹果手机通知 ANCS协议分析
蓝牙接收苹果手机通知 ANCS协议分析 转载,请注明出处:http://www.cnblogs.com/alexcai/p/4321514.html 综述 现在有许多蓝牙手表.手环都能接收苹果ipho ...
- Java面试汇总
转自:http://zy19982004.iteye.com/blog/1846537#comments 一.All 最近找工作,遇到的笔试面试题,归纳如下,供大家参考. 二.J2SE 容器 Hash ...