20155217《网络对抗》Exp01 PC平台逆向破解(5)M

实验要求

  1. 掌握NOP,JNE,JE,JMP,CMP汇编指令的机器码
  2. 掌握反汇编与十六进制编程器
  3. 能正确修改机器指令改变程序执行流程
  4. 能正确构造payload进行bof攻击

汇编相关

  1. NOP:空指令。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。机器码:90
  2. JNE:条件转移指令,与JNZ等价。ZF=0,转至标号处执行,即如果不相等则跳转。机器码:75
  3. JE:条件转移指令。如果相等则跳转,即ZF=1,转至标号处执行。机器码:74
  4. CMP:比较指令。相当于减法指令,只是对操作数之间运算进行比较,而不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
  5. JMP:无条件转移指令。
  • 段内直接短转Jmp short。机器码:EB

  • 段内直接近转移Jmp near。机器码:E9

  • 段内间接转移Jmp word。机器码:FF

  • 段间直接(远)转移Jmp far。机器码:EA

  1. 反汇编:objdump -d XX
  2. 进入十六进制编辑模式::%!xxd
  3. 查询:/
  4. 调试:gdb XXX
  5. 切回原模式:%!xxd -r

直接修改程序机器指令,改变程序执行流程

  • 下载目标文件pwn1,利用反汇编objdump -d pwn1找到foo函数和getshell函数的机器码,分别是08048491,0804747d。利用两个地址的相对偏移来改变调用地址,从而使主函数调用getshell函数。

  • vi进入文件,并按ESC后,输入:%!xxd转化为十六进制显示模式,查找要修改的内容/e8 d7。7d比91大14,因此将d7 - 14,得到新的地址c3(可用windows计算器或将十六进制转化为十进制再转为十六进制来运算)。

  • 进入修改,并退出ESC。返回原函数:%!xxd -r,保存退出:wq

  • 反汇编查看修改情况,call指令正确调用getShell,然后执行。

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

该可执行文件正常运行是调用函数foo,这个函数有Buffer overflow漏洞。而目标是触发函数getshell。
  • 输入gdb pwn20155217-2r输入测试值,info r观察eip堆栈值

  • 猜测最后八个5中某四个进入了堆栈中,为了准确,把8个5换成12345678进一步探索。

  • 发现eip堆栈值为4,即占用返回地址的压栈数据为4 3 2 1。
  • 发现溢出的字节后,只要把溢出的数据换成getshell的内存地址输入,就会运行getshell函数
  • 通过perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input生成文件输入到程序中。

    用perl来生成在ASCII界面所无法输入的16进制值。
  • (cat input; cat) | ./pwn20155217-2来进入pwn20155217-2中。

正确构造payload进行bof攻击

  • 下载execstack并修改设置。

  • 准备shellcode

  • 注入攻击后,用另一个终端调试进程ps -ef | grep 20155217-3查看进程号,gdb调试。

  • 看到01020304的地址在0xffffd26c,修改shellcode,改为0xffffd26c挨着的地址0xffffd270,进行攻击。

  • 攻击成功。

遇到的问题

  • 一开始注入攻击后,打开另一个终端用ps -ef | grep pwn20155217-3查找进程号失败。

  • 原因:注入攻击后先敲击了回车。事后明白了这就是老师提醒为什么不能以\x0a来结束 input_shellcode的原因。

20155217《网络对抗》Exp01 PC平台逆向破解(5)M的更多相关文章

  1. 20155305《网络对抗》PC平台逆向破解(二)

    20155305<网络对抗>PC平台逆向破解(二) shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 ...

  2. 20155311《网络对抗》PC平台逆向破解(二)

    20155311<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...

  3. 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验

    20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...

  4. 20145221《网络对抗》PC平台逆向破解

    20145221<网络对抗>PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户 ...

  5. 2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解

    2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解 目录 一.逆向及Bof基础实践说明 二.直接修改程序机器指令,改变程序执行流程 三.通过构造输入参数,造成BOF攻击,改变程 ...

  6. 20155307《网络对抗》PC平台逆向破解(二)

    20155307<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...

  7. 20145312 《网络对抗》PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验

    20145312 <网络对抗>PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验 注入shellcode 实验步骤 1. 准备一段Shellcode 2. ...

  8. 20145201李子璇《网络对抗》PC平台逆向破解

    20145201<网络对抗>PC平台逆向破解 准备阶段 下载安装execstack. 获取shellcode的c语言代码 设置堆栈可执行 将环境设置为:堆栈可执行.地址随机化关闭(2开启, ...

  9. 20145219《网络对抗》PC平台逆向破解

    20145219<网络对抗>PC平台逆向破解 shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 (1) ...

  10. 20145240《网络对抗》PC平台逆向破解_advanced

    PC平台逆向破解_advanced shellcode注入 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外,Shellcode一般是 ...

随机推荐

  1. Monkey Android app稳定性测试工具之Monkey使用教程

    Monkey Android app稳定性测试工具之Monkey使用教程 by:授客 QQ:1033553122 由于篇幅问题,仅提供百度网盘下载链接: Android app稳定性测试工具之Monk ...

  2. JavaScript Math对象方法

    console.log(Math.abs(123));//绝对值 console.log(Math.ceil(123.3));//向上舍入 console.log(Math.floor(123));/ ...

  3. 免费的协作和协同办公软件平台onlyoffice轻松部署

    一般说,协同和协作是不同的,协同是指文档基于一个版本,大家都是基于这个版本来添加,而且大家只能引用这个文档,却不能在上面直接添加,而且只能一个人添加,即锁住,不让其他人添加了. 而协作就不同了,大家同 ...

  4. Vue + WebPack + Typescript初学者VSCode项目 (按需加载、跨域调试、await/async)

    万事开头难,一个好的Hello World程序可以节省我们好多的学习时间,帮助我们快速入门.Hello World程序之所以是入门必读必会,就是因为其代码量少,简单易懂.但我觉得,还应该做到功能丰富, ...

  5. Android热修复之 - 收集崩溃信息上传服务器

    1.概述 大致的流程就是在用户崩溃的时候,我们获取崩溃信息.应用当前的信息和手机信息,然后把它保存到手机内存卡,再找我就直接找出来看看.后来衍生到上线后某些奇葩机型会有部分问题,所以不得不上传到服务器 ...

  6. [Objective-C] id类型和instancetype类型

    前些时间在源码里看到instancetype返回类型,一脸惊异,表示接触iOS不久没见过这东西,但发现跟id功能差不多.故查了一些资料,了解了两者之间的区别,故将资料简单翻译整理了一下,为博客充一个数 ...

  7. android编写测试类

    由于网上很多教程,我就不多说.在这里我就说说我遇到的问题. 在android studio编写单元测试类中,在androidTest包下编写了两个类,分别如下 import junit.framewo ...

  8. 如何避免SHRINKDATABASE & SHRINKFILE 产生索引碎片(转载)

    1. TRUNCATEONLY参数的使用我们在建立的Job中通常使用如下的语法DBCC SHRINKDATABASE (N'DB', 10,TruncateOnly)其中TruncateOnly的用处 ...

  9. 解决Hsqldb指针只能单向移动,不能回滚问题(.first())

    Class.forName("org.hsqldb.jdbcDriver").newInstance(); Connection con = java.sql.DriverMana ...

  10. Android分区

    1. Android 分区: 2. Android各个分区的作用: 2.1 modem分区 实现手机必需的通信功能,大家通常所的刷RADIO就是刷写modem分区,在所有适配的ROM中这部分是不动,否 ...