20145204《网络对抗》逆向及bof基础实践
20145204《网络对抗》逆向及bof基础实践
实践目的说明
实践的对象是一个名为pwn1的linux可执行文件。
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。
实践一是直接修改程序机器指令,改变程序执行流程。
实践二的目标是利用foo函数中的Bof漏洞,触发getshell代码运行。
实践三的目标是构造shellcode,实现缓冲区溢出攻击。
实践一
知识要求:
1.反汇编指令:objdump;
2.十六进制编辑工具(wxhexeditor);
3.vi下显示模式转化为16进制指令:%!xxd;
4.Call指令执行后,EIP寄存器,指令跳转的偏移计算方法:EIP(after)=EIP(befor)+x(未知数)。
按照老师给出的步骤call指令的目标地址由d7ffffff变为c3ffffff。
以下是实验结果:

实践二
如下图所示:
我们需要构造数据填充缓冲区直到覆盖ebp和返回地址的数据。

1、刚开始构造的时候,字符串长度不够,看图中ebp覆盖了两个字节的数据36(6的ascii码),eip没有变化。如下图

2、增加长度,使得eip值改变为:0x373737(7的ascii)码。

3、确定返回地址被覆盖的位置。eip的值为36353433,即为3456这四个数字的位置。

4、在确定内存地址的格式后,构造输入字符串。得到最终结果如下:

实践三
知识要求:
shellcode:指溢出后执行的能开启系统shell的代码。但是在缓冲区溢出攻击时,也可以将整个触发缓冲区溢出攻击过程的代码统称为shellcode,因此可以将shellcode分为以下4个部分:
1、核心shellcode代码,包含了攻击者要执行的所有代码。
2、触发shellcode的溢出地址。
3、填充物,填充未使用的缓冲区,一般使用nop指令填充——0x90表示。
4、结束符号0,对于符号串shellcode需要用0结尾,避免溢出时字符串异常。
5、linux下有两种构造shellcode的方法:retaddr+nop+shellcode;nop+shellcode+retaddr。
实践过程:
按照要求设置基本环境后开始(其中shellcode直接用的老师代码):
尝试第一种构造shellcode方法:retaddr+nop+shellcode
1、在一个终端中构造shellcode,并在终端中注入这段攻击(其中“\x4\x3\x2\x1”处是即将要填的shellcode起始地址),如下图所示:

2、打开另一个终端,查看./pwn进程的ID号,并进行gdb调试,如下图所示,可以看到ret地址是0x080484ae(ret后就会跳到即将要覆盖的返回地址的位置处):


3、开始在0x080484ae处设置断点,并不断向前查看地址知道找到shellcode起始地址,最终找到shellcode起始地址为0xffffd2e0(0xffffd2dc+4)。

4、将构造的shellcode中“\x4\x3\x2\x1”改为“0xffffd2e0”,结果不成功。

尝试第二种构造方法:anything+retaddr+nops+shellcode。
1、如下图“\x4\x3\x2\x1”处是即将要覆盖的shellcode返回地址为:0xffffd300。

2、构造shellcode:perl -e 'print "A" x 32;print "\x00\xd3\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\xe0\xd2\xff\xff\x00"' > input_shellcode
最终成功。如下图:

参考资料
20145204《网络对抗》逆向及bof基础实践的更多相关文章
- 网络对抗实验一 逆向及Bof基础实践
网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...
- 20145308 《网络对抗》 逆向及BOF基础实践 学习总结
20145308 <网络对抗> 逆向及BOF基础实践 学习总结 实践目的 通过两种方法,实现程序能够运行原本并不会被运行的代码 实践原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串 ...
- 20145206邹京儒《网络对抗》逆向及Bof基础实践
20145206邹京儒<网络对抗>逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:ma ...
- 20145216《网络对抗》逆向及BOF基础实践
20145216<网络对抗>逆向及BOF基础实践 1 逆向及Bof基础实践说明 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函 ...
- 20145327 《网络对抗》逆向及BOF基础实践
20145327 <网络对抗>逆向及BOF基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...
- 20145208蔡野 《网络对抗》逆向及BOF基础实践
20145208蔡野 <网络对抗>逆向及BOF基础实践 逆向及Bof基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函 ...
- 《网络对抗》——逆向及Bof基础实践
<网络对抗>--逆向及Bof基础实践 原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 手工修改可执行文件,改变程序执行流程,直接跳转到g ...
- 20145302张薇 《网络对抗技术》逆向及BOF基础实践
20145302张薇 <网络对抗技术>逆向及BOF基础实践 实验内容 实践对象:名为20145302的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单 ...
- 20145303 刘俊谦《网络对抗》逆向及BOF基础实践
20145303 刘俊谦<网络对抗>逆向及BOF基础实践 1 逆向及Bof基础实践说明 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...
随机推荐
- 【紫书】Undraw the Trees UVA - 10562 递归,字符串
题意:给你画了一颗树,你要把它的前序输出. 题解:读进到二维数组.边解析边输出. 坑:少打了个-1. #define _CRT_SECURE_NO_WARNINGS #include<cstri ...
- kubernetes实战(十一):k8s使用openLDAP统一认证
1.基本概念 为了方便管理和集成jenkins,k8s.harbor.jenkins均使用openLDAP统一认证. 2.部署openLDAP 此处将openLDAP部署在k8s上,openLDAP可 ...
- startuml 2.6注册
参考:http://bbs.chinapyg.com/thread-79022-1-1.html 各平台版本均适用,本文更改的为Mac版本. 1,打开对应 mac版本的安装包位置,在对应目录/App ...
- 深入浅出 TCP/IP 协议栈
写的不错:http://www.cnblogs.com/onepixel/p/7092302.html#3899256
- Linux(CentOS)安装Mysql数据库
1.需要mysql-linux安装包 本次使用mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz进行安装 2.将此安装包上传至linux服务器 上传路径为:/usr ...
- vue学习七之Axios
JQuery时代,我们使用ajax向后台提交数据请求,Vue时代,Axios提供了前端对后台数据请求的各种方式. 什么是Axios Axios是基于Promise的Http客户端,可以在浏览器和nod ...
- 高性能mysql 4 ,5章
第4章 1:查询优化,多表连接时只取需要的列,要对select * 保持怀疑. 2:如果发现访问的数据行数很大,而生成的结果中数据行很少,那么可以尝试更复杂的修改 a: 使用覆盖索引,b: 更改架构, ...
- Scala系统学习(一):Scala概述
Scala是可扩展语言的缩写,是一种混合功能编程语言. 它由Martin Odersky创建. Scala顺利整合面向对象和函数式语言的功能. Scala被编译后在Java虚拟机上运行. 许多现有公司 ...
- PAT 1003 Emergency[图论]
1003 Emergency (25)(25 分) As an emergency rescue team leader of a city, you are given a special map ...
- GridView 点滴
绑定数据时.在后台给GridView添加事件 protected void grd_RowDataBound(object sender, GridViewRowEventArgs e) { //当前 ...