作业地址: http://csapp.cs.cmu.edu/3e/labs.html

AttackLab共5道题,Phase1~Phase3是缓冲区溢出(Buffer Overflow)攻击,Phase4~Phase5是返回导向(ROP:Return Oriented Programming)攻击。

各题解题思路:

Phase1:

任务: 通过缓冲区溢出来修改函数getbuf的返回地址,使得getbuf返回之后跳转到函数touch1执行。

第一题,说详细一点。

在程序ctarget内部,在函数getbuf内,会通过函数gets来输入一串字符,但当前栈帧并不会检验传入字符串的长度。

在程序实际执行过程中,执行到getbuf对应的指令序列时,输入的字符串对应的二进制数据会被压入栈帧内,由于函数

内部并不会检验输入字符串的长度,字符串的大小就有可能会超出当前栈帧的容量大小,从而导致栈溢出,也就是缓冲

区溢出。超出当前栈帧的那部分数据会覆盖掉栈内存中高位地址上原先的数据。

函数getbuf在程序ctarget内的调用关系是:stable_launch  ->  launch  ->  test  -> getbuf

函数test的反汇编代码:

函数getbuf的反汇编代码:

注:retq指令相当于popq %rip; jmp %rip。

1)在test内执行指令 callq 0x4017a8 <getbuf>指令相当于 pushq %rip; jmp 0x4017a8;

即将callq 0x4017a8 <getbuf>指令的下一条指令的地址(也就是函数getbuf的返回地址)压入栈内,并跳转到函数getbuf的首地址

开始执行指令。

2)在getbuf内调用Gets函数时,会将输入的字符串数据压入栈内,如果字符串长度过长(超过getbuf栈帧容量的大小0x28,也就是40Bytes),

则会造成缓冲区溢出。Phase1要做的就是通过缓冲区溢出来覆盖getbuf的返回地址,并将这个返回地址改为touch1的首地址。

这样getbuf返回之后就会跳转到touch1执行。

具体操作步骤如下:

1.准备好要往栈内压入的十六进制数据。

比如0x12345678, 则以 12 34 56 78的形式存入文本文件(开头的0x不需要)。

函数touch1首地址:0x00000000004017c0

然后构造文本文件in.txt: 前40个字节的数据随意填充。第41~48字节的数据是以小端形式填入的函数touch1的首地址。

2.使用程序hex2raw将第1步做成的文本文件中的十六进制数据转换成对应的字符,如下

3.将第2步得到的文本文件的字符数据作为ctarget程序的输入,运行ctarget程序。

(由于使用的自学版本,无法连接CMU的用来评分的服务器,所以运行ctarget时,要加上选项-q,即选择不连接服务器)

Phase2:

任务:getbuf函数调用结束后,跳转到touch2执行,同时将Cookie值(Cookie.txt文件内的数据,我这个是0x59b997fa)作为

一个无符号整型(占4字节)参数传入touch2。

思路:将getbuf的返回地址修改为一段自制指令的首地址,这段自制指令结束后跳转到touch2执行;

做法:

touch2首地址:0x00000000004017ec

//getbuf返回地址修改为下面这段指令存放位置的首地址push 0x4017ec            //将touch2地址压入栈内
movq 0x59b997fa, %rdi;   //%rdi寄存器用来存放函数的第一个参数ret;                     //相当于popq %rip; jmp %rip。此时,$rip = 0x4017ec

使用gcc和objdump 来获取这段汇编指令对应的二进制数据:

1)将上述汇编指令内容写入文件test.s;

2)使用gcc编译test.s文件:

gcc -c test.s        得到可执行文件test.o

3)  使用objdump参看可执行文件test.o对应的二进制指令数据

objdump -d test.o

4)使用gdb查看getbuf函数栈帧的最低地址:0x5561dca0


可将自制指令放在getbuf的栈帧空间内。

最后构造in2.txt内容:

Phase3:

。。。。。。暂时先写到这吧。有时间再续上吧。

CSAPP AttackLab解题记录相关推荐

  1. CSAPP Lab2 实验记录 ---- Bomb Lab(Phase 1 - Phase 6详细解答 + Secret Phase彩蛋解析)

    文章目录 Lab 总结博客链接 实验前提引子 实验需要指令及准备 Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6 Phase Secret(彩蛋Phas ...

  2. XCTF mobile新手区解题记录(WP)以及一些总结和思考

    XCTF mobile新手区解题记录以及一些总结和思考 前言 题目:app3 题目:easy-apk 题目:easy-java 题目:easy-jni 题目:easy-so 题目:app1 题目:Ph ...

  3. LeetCode解题记录(409)——最长回文串

    LeetCode解题记录--最长回文串 题目描述 示例 题目理解 解题思路 题目描述 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比 ...

  4. XSS平台 XSS挑战之旅 解题记录 writeup

    XSS平台 XSS挑战之旅 解题记录 writeup level1 level2 level3 level4 level5 level6 level7 level8 level9 level10 le ...

  5. CSAPP attacklab

    CSAPP attacklab attacklab总共有5个小实验,主要是围绕CSAPP这本书的3.10节内容展开,即缓冲区溢出攻击. 缓冲区溢出攻击:调用其他过程时当前%rip会存放在运行时栈上,通 ...

  6. CSAPP Lab5实验记录 ---- Shell Lab(实验分析 + 完整代码)

    文章目录 Lab 总结博客链接 前引 Lab5 Shell Lab 1.获取相关Lab材料 2.Overview(总览) 3.Explore(实现前的摸索) 4.函数实现 + 实现代码分析 1.eva ...

  7. 一枚亲斤手对中大SYSUMSClub的puzzle的解题记录(writeup)(2021-10)(G2T1me)

    0x00 写在前面 MSC Puzzle 是由中山大学 MSClub 与中山大学 W4terDr0p 战队联合举办的趣味性解谜游戏,内容除古典密码.数字谜题等经典谜题外,还包含部分需要基础计算机知识. ...

  8. python解题教学_Python解题记录第10题

    [本文结构]题目信息:来源.地址.序号.描述 题目答案:简要分析,程序代码(测试运行通过,含注释),运行结果 霍霍磨刀:解答这道题目之前应掌握的知识基础 解析过程:题目类型,分析以及实践过程 斩获成果 ...

  9. buuctf解题记录

    buuctf解题记录 Basic 1. Linux labs Ssh连接查看目录 2.BUU LFI COURSE 1 打开环境 是一道文件包含题 进行get传参 构造payload: http:// ...

  10. CSAPP Lab2 实验记录 ---- Bomb Lab(Secret Phase彩蛋解析)

    文章目录 Lab 总结博客链接 前引 Secret Phase 1.发现彩蛋出处 2.找寻Secret Phase 入口 3.剖析Phase Defused 寻觅进入彩蛋方法 4.终到Secret P ...

最新文章

  1. 深扒:一个司机如何潜入机房偷数据…
  2. 牛客网(剑指offer) 第二十题 包含min函数的栈
  3. 关于辅酶Q10的相关常识与选购要点(转)
  4. mysql dml ddl优先级_MYSQL入门操作和常规DML、DDL、DQL使用
  5. Spring Boot 实用开发技巧————Eclipse 远程调试
  6. 【华为云技术分享】一文带你了解Web前端发展历程
  7. Excel表格生成sql语句
  8. linux启动mysql_Linux安装mysql
  9. 西安石油大学计算机类分专业,西安石油大学2019年分专业录取分数解读
  10. Spring 注解配置(2)——@Autowired
  11. FreeTextBox的使用
  12. idea护眼主题全套设置
  13. 微信会员卡实现门店信息化会员管理
  14. matplotlib简要画图
  15. 项目经历——地图定位神器
  16. 解释一下label中的写法:plt.plot(t, sig, b-, linewidth=2, label=r$\sigma(t) = \frac{1}{1 + e^{-t}}$)...
  17. 修改系统默认的音频设备
  18. 在unity中如何实现群体行为模拟步骤详解
  19. 服务器系统会提示有神兽刷新吗,我的世界神奇宝贝服务器里刷新神兽提示是那些...
  20. 机器人中的xyz坐标系和右手定则

热门文章

  1. Cannot find current proxy: Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available,and.
  2. DSPE-PEG11-Mal含有马来酰亚胺基团的PEG试剂
  3. 备份与同步(二) 如何使用云存储来实现多设备的备份与同步
  4. oracle数据库查看归档日志文件,查看oracle归档日志路径
  5. 小白Nvidia TK1 Jetpack安装/重装系统详细步骤(小车第一步)
  6. 现代软件工程讲义 7 分析和设计方法
  7. oracle order siblings by,sql中ORDER SIBLINGS BY排序的含义
  8. Mac安装Royal TSX
  9. 需要记住的的资料网址
  10. 看这里!有个奔向月薪7万的程序员专属规划!