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. 基于 Web 的 Go 语言 IDE - Wide 1.5.2 发布!

    这个版本由热心的开源贡献者加入了韩语支持,欢迎各位 gophers 加入到 Wide 的开源开发中.另外,这个版本还改进了 Playground,使其更稳定和易用.目前黑客派社区已经支持嵌入 Wide ...

  2. 【three.js练习程序】随机生成100个方块

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. maven学习笔记--maven项目创建

    使用Maven命令和Eclipse的Maven插件,创建Maven项目 (1)maven命令生成项目         新建一个文件目录,dos进入该目录并执行下面命令: mvn archetype:c ...

  4. mysql 内存统计

    在 mysql 5.5 中实现了类似mysql5.7中performance schema 的内存统计功能. 功能 1 展示mysql层内存总大小. 2 展示mysql层内存使用分布情况. 3 展示每 ...

  5. 使用托管快照创建作为 Azure 托管磁盘存储的 VHD 的副本

    创建快照 创建 OS 或数据磁盘 VHD 的快照,以便将其用作备份或用于排查 VM 问题. 快照是 VHD 的完整只读副本. 使用 Azure 门户创建快照 登录到 Azure 门户. 首先在左上角单 ...

  6. postgresql排序分页时数据重复问题

    当同时排序又分页时,如果排序的字段X不是唯一字段,当多个记录的X字段有同一个值时顺序是随机的. 这个有可能造成分页时数据重复的问题.某一页又把上一页的数据查出来了,其实数据库只有一条记录. 解决办法: ...

  7. Centos 6.5-yum安装出现错误解决方案

    最近在用Centos 6.5 的时候出现了以下情况: 遇到这种问题试试以下方法: 1.检查是否能上网:ping www.baidu.com 如果显示没有连接的话,就说明没网,也就无法使用yum 命令安 ...

  8. git 学习汇总

    生成gitignore 文件: https://gitignore.io/ git 版本回退 git reset --hard HEAD^ 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然 ...

  9. python3: 数字日期和时间(2)

    12.基本的日期与时间转换 Q: 你需要执行简单的时间转换,比如天到秒,小时到分钟等的转换 A: 为了执行不同时间单位的转换和计算,请使用 datetime 模块. 比如,为了表示一个时间段,可以创建 ...

  10. mysql 错误2203 1061 及安装最后出现2003现象的解决办法

    错误描述 : 1.#2003-服务器没有响应MySQL无法启动 2.Can''t connect to MySQL server on ''localhost'' (10061) 3.ERROR 20 ...