20145222黄亚奇 《网络对抗技术》 MAL_逆向与Bof基础
学习目的
- 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用:
- 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行、却本不应该执行的代码部分首地址(这需要我们有一定的权限修改可执行文件)
- 通过缓冲区溢出:输入数据,使其超出缓冲区大小,并覆盖住返回地址(新的返回地址为另一部分我们希望执行、却本不应该执行的代码部分首地址)
基础知识
- objdump -d test :反汇编test
- more : more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能
- nop : 空操作指令,执行指令使程序计数器PC加1,占用一个机器周期
- ebp esp : 寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(低址地)
- bp : 16位 ebp :32位 rbp :64位
- info r :info registers , 查看寄存器的情况
- 缓冲区溢出攻击:是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,当覆盖到堆栈中的返回地址时,将会引起程序错误或运行其他程序
- call : call指令的机器代码表示为4字节(IA32的ATT格式),0x80 ** ** **,后3个字节为跳转到的指令地址到目前下一条指令的地址的偏移量,即 :
后3个字节的值 + eip(目前所运行的call指令的下一条指令的地址) = 新eip(要跳转到的指令的地址)
方法一:直接修改机器指令
可执行文件pwnl作用:输入什么字符串就返现相同的字符串.

修改机器指令后,希望能够运行可执行文件里的另一部分代码(getshell)

具体步骤:
1. `vi 20145221`,用vim编辑器查看可执行文件20145221;
2. `%! xxd`,进入vi编辑模式后,发现乱码,键入前述指令查看其16进制表示;
3. `/e8 d7`,查询需要改动的机器码的位置,锁定后,按i进入文本编辑模式,将其改为e8 c3
4. `%! xxd -r`,退出16进制模式(注意:此处如果直接以16进制形式保存退出,运行该文件会报错)
5. `:wq!`,保存并退出。
测试可执行代码成功跳转运行getshell

执行指令:./20145222,结果如下:

方法二:通过构造输入参数,造成BOF攻击,改变程序执行流
BOF漏洞
经试发现,当输入达到28字节产生溢出Segmentation fault。

目的:让程序调用完foo函数后走向getshell函数。
GDB调试,确认用什么值来覆盖返回地址
gdb 20145222,进入调试,并输入一串可让其溢出的字符;info r,查看溢出时寄存器状态如下:


此时“1234”覆盖了其新的eip,所以我们只需要将getshell的内存地址替换这4个字符,就可以达到程序向getshell函数转移的目的。
3. 构造一串特殊的输入,由于getShell的内存地址是0x0804847d,而其对应的ASCII没有字符,所以我们通过一个简单的perl脚本语言来构造输入值。
4. perl -e 'print "12345678123456781234567812345678\x7d\x84\x04\x08\x0a"' > input
注意:kali系统采用的是大端法,所以构造内存地址时注意顺序,末尾的\0a表示回车换行。
(cat input; cat) | ./20145221,将input文件作为输入,结果如下:

20145222黄亚奇 《网络对抗技术》 MAL_逆向与Bof基础的更多相关文章
- 20145321《网络对抗技术》逆向与Bof基础
20145321<网络对抗技术>逆向与Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ...
- 20145337《网络对抗技术》逆向及BOF基础
20145337<网络对抗技术>逆向及BOF基础 实践目标 操作可执行文件pwn1,通过学习两种方法,使main函数直接执行getshall,越过foo函数. 实践内容 手工修改可执行文件 ...
- 20145302张薇 《网络对抗技术》逆向及BOF基础实践
20145302张薇 <网络对抗技术>逆向及BOF基础实践 实验内容 实践对象:名为20145302的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单 ...
- 20145328 《网络对抗技术》逆向及Bof基础实践
20145328 <网络对抗技术>逆向及Bof基础实践 实践内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回 ...
- 20145210姚思羽《网络对抗技术》逆向及Bof基础实践
20145210姚思羽<网络对抗技术>逆向及Bof基础实践 实践目标 1.本次实践的对象是一个名为pwn1的linux可执行文件. 2.该程序正常执行流程是:main调用foo函数,foo ...
- 20145339顿珠达杰 《网络对抗技术》 逆向与Bof基础
目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有一定 ...
- 20144306《网络对抗》MAL_逆向与Bof基础
实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShe ...
- 20145329 《网络对抗技术》 逆向及Bof基础实验
1.实验内容 本次实践的对象是一个名为20145329的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串.该程序同时包含另一个代码片段,ge ...
- 20145311 王亦徐《网络对抗技术》 逆向及BOF进阶实践
20145311<网络对抗技术>逆向及BOF进阶实践 学习目的 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈 ...
- 网络对抗实验一 逆向及Bof基础实践
网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...
随机推荐
- Redis 3 在CentOS 6.5上安装笔记,含启动脚本
Redis的强大就不多说了,直接上菜. 第1步:下载.编译.安装 cd /opt wget http://download.redis.io/releases/redis-3.0.5.tar.gz . ...
- 读汤姆大叔《深入理解javascript系列》笔记一编写高质量代码
感觉大叔的博文真的是很不错 我打算严格要求自己 按照大叔说的,这样我就会更有规范,更有思想的去工作 去写代码(一入代码深似海) 1,尽可能的少用全局变量(污染全局空间,也会和别人的代码 发生冲突造 ...
- hdu 4576(概率dp+滚动数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 思路:由于每次从某一位置到达另一位置的概率为0.5,因此我们用dp[i][j]表示第i次操作落在 ...
- python3----练习题(三级菜单)
三级菜单程序. 运行程序输出第一级菜单. 选择一级菜单某项,输出二级菜单,同理输出三级菜单. 退出时返回上一级菜单 menu = { '北京市': { '东城区': { 'aa', 'bb', }, ...
- excel添加复选框和去掉复选框
添加复选框 我测试的excel版本是最新版2016,所有版本都是找开发者工具里面包含很多工具呢,大家可以慢慢测试 excel的右上角 点击文件-->选项-->自定义功能区-->添加开 ...
- Jmeter BeanShell 引用变量报错jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Parse error at line 14, column 181 : Error or number too big for integer
如果你通过CSV Data Set Config或者_StringFromFile函数来参数化你的请求,需要特别注意当参数为纯数字时,jmeter会默认将其识别成int型数据,说明jmeter并不是默 ...
- 回溯法——n后问题
问题描述: 在n*n的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n*n格的棋盘上放置n个皇后,任何2个皇后不放在同一行 ...
- 【BZOJ1449/2895】[JSOI2009]球队收益/球队预算 最小费用最大流
[BZOJ2895]球队预算 Description 在一个篮球联赛里,有n支球队,球队的支出是和他们的胜负场次有关系的,具体来说,第i支球队的赛季总支出是Ci*x^2+Di*y^2,Di<=C ...
- style="display:{{searchInput==='' ? 'none':'block'}} "
当用户没有有效输入时,是否显示提交按钮 style="display:{{searchInput==='' ? 'none':'block'}} "
- React-学习总结
概念知识:1.JSX是什么 JSX其实是JavaScript的扩展,React为了代码的可读性更方便地创建虚拟DOM等原因,加入了一些类似XML的语法的扩展. 2.编译器——jsxTransforme ...