标签:函数 实验 2021 2022 20192430 缓冲区 shellcode 反汇编 注入
一、实验内容
实验对象:Linux可执行文件pwn20192430
程序正常运行:main函数调用foo函数,打印输入的字符串
实验目标:令main函数调用shellcode函数,实现Linux终端操作
有以下三种方法
1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
2.通过缓冲区溢出将返回值覆盖触发shellcode函数
3.注入一个新的shellcode并运行
二、实验过程
方法1
-
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
-
将文件重命名为pwn20192430,并进行运行,运行结果如下:
-
反汇编结果中核心代码如下
- main函数调用foo,对应机器指令为“ e8 d7ffffff”,想要修改调用关系,在4b0处将d7修改为c3即shellcode的地址即可
- 修改之后再次反汇编可以看出调用已经从foo变成了shellcode
方法2
-
通过缓冲区溢出将返回值覆盖触发shellcode函数
-
初步找出缓冲区边际,确定注入位置(35为5的ascii码)
- 精准定位缓冲区边际
- getShell的内存地址,通过反汇编时可以看到为0804847d
- 构造输入字符串
- xxd查看input文件是否达到预期
- 将input的数据当作管道作为程序的输入
- 可以看到成功注入
方法3
-
注入一个新的shellcode并运行
-
通过一系列准备设置将实验变为理想化环境便于进行
- 构造payload
- 注入buf
- 打开第二个终端调试该程序寻找注入地址
- 反汇编foo函数寻找注入点
- 逐步寻找shellcode注入位置
- 找到位置后注入shellcode
- 可以看出注入成功
三、问题及解决方案
- 问题1:shellcode注入成功但重启过后变成未成功
- 问题1解决方案:每次启动时应关闭地址随机化
- 问题2:第三种方法注入时显示段错误
- 问题2解决方案:仔细检查发现是shellcode地址错误,修改后则注入成功
四、学习感悟、思考等
本次实验通过两个方面即直接修改程序和通过缓冲区溢出实现对于程序的bof攻击,通过这次实验,对于linux的基本指令的认识更加深入,但是仍然不是很熟悉,对于缓冲区溢出有了初步认识并付诸于实践。本次实验是在较为理想的情况下实现的,实际情况会更加复杂,这也引起了我对于这门课程更大的兴趣,并在之后更加深入的学习。
最后感谢老师和同学对于实验问题的解答与帮助。
标签:函数,实验,2021,2022,20192430,缓冲区,shellcode,反汇编,注入 来源: https://www.cnblogs.com/20192430xzc/p/16058631.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。