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基础实践的更多相关文章

  1. 网络对抗实验一 逆向及Bof基础实践

    网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...

  2. 20145308 《网络对抗》 逆向及BOF基础实践 学习总结

    20145308 <网络对抗> 逆向及BOF基础实践 学习总结 实践目的 通过两种方法,实现程序能够运行原本并不会被运行的代码 实践原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串 ...

  3. 20145206邹京儒《网络对抗》逆向及Bof基础实践

    20145206邹京儒<网络对抗>逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:ma ...

  4. 20145216《网络对抗》逆向及BOF基础实践

    20145216<网络对抗>逆向及BOF基础实践 1 逆向及Bof基础实践说明 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函 ...

  5. 20145327 《网络对抗》逆向及BOF基础实践

    20145327 <网络对抗>逆向及BOF基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...

  6. 20145208蔡野 《网络对抗》逆向及BOF基础实践

    20145208蔡野 <网络对抗>逆向及BOF基础实践 逆向及Bof基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函 ...

  7. 《网络对抗》——逆向及Bof基础实践

    <网络对抗>--逆向及Bof基础实践 原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 手工修改可执行文件,改变程序执行流程,直接跳转到g ...

  8. 20145302张薇 《网络对抗技术》逆向及BOF基础实践

    20145302张薇 <网络对抗技术>逆向及BOF基础实践 实验内容 实践对象:名为20145302的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单 ...

  9. 20145303 刘俊谦《网络对抗》逆向及BOF基础实践

    20145303 刘俊谦<网络对抗>逆向及BOF基础实践 1 逆向及Bof基础实践说明 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...

随机推荐

  1. 通过微信服务号推送Zabbix告警

    近期看到一篇通过微信实现Zabbix告警的文章,但实践时发现,无法成功发送消息. 分析原因,应该是微信公众平台加强了登录验证,在登录时会需要管理员进行扫描二维码操作才能成功登陆后台: 而之前文章中的A ...

  2. Tautology---poj3295(枚举判断是否为永真式)

    题目链接:http://poj.org/problem?id=3295 题意:判断是否是永真式,其中 p q r s t 表示逻辑变量其值为0或者1: 枚举所有逻辑变量的值,然后判断是否出现false ...

  3. android(七)Looper Handler分析

    一.总结 Looper有一个MessageQueue,用于封装消息循环.   Handler封装了消息投递,消息处理等的辅助类 二.分析 1.从Looper的用法开始分析 class LooperTh ...

  4. Failed to load project at 'xxx.xcodeproj', incompatible project version。

    Failed to load project at 'xxx.xcodeproj', incompatible project version. 更新最新的xcode,xcode高版本可以打开低版本的 ...

  5. 苹果copy等其他的英文改成中文

    程序plist有个参数localization native development region改成china

  6. transition使用

  7. IO操作文件的复制与删除

    import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IO ...

  8. Mac SVN版本从1.9降到1.8

    假设系统已安装brew,在终端执行下列命令: brew update brew install subversion18 echo 'export PATH="/usr/local/opt/ ...

  9. [LeetCode] 561. Array Partition I_Easy tag: Sort

    Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1 ...

  10. SQL备份数据库代码

    SQL备份数据库代码 #region 服务每天备份一次数据库 /// <summary> /// 服务每天备份一次数据库 /// </summary> public void ...