20155318 Exp1 PC平台逆向破解(5)M

实践目标

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

  • 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

  • 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode

实践内容

  • 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
  • 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
  • 注入一个自己制作的shellcode并运行这段shellcode。

实践思路

  • 运行原本不可访问的代码片段
  • 强行修改程序执行流
  • 以及注入运行任意代码。

汇编知识

机器指令

指令 机器码 功能
NOP 90 空指令,继续执行NOP后面的一条指令
JNE 75 条件转移指令,不等则跳转
JE 74 条件转移指令,相等则跳转
JMP / 无条件转移指令,short(机器码:EB)段内直接近转移Jmp;near(机器码:E9)段内间接转移Jmp;word(机器码:FF)段间直接(远)转移Jmp;far(机器码:EA)
CMP 39 比较指令,相当于减法指令,对操作数之间运算比较,不保存结果

常用汇编指令

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

实践

一、修改机器指令改变程序执行流程

  • objdump -d xxx对文件进行反汇编
  • getShell和foo地址相差(91-7d)=0x21,因此欲call 8048491 <foo>修改为call 804847d <getShell>,需要将d7修改为c3(d7-21)
  • 修改过程:vi打开编辑文件(此时为二进制格式);:%! xxd将文件转换为十六进制编辑模式;/找到修改位置,i进入编辑模式,:%! xxd -r转回二进制模式,:wq保存退出
  • 再次进行反汇编的结果如下:
  • 和之前程序运行结果的对比:

二、利用Bof漏洞攻击

  • 该可执行文件正常运行是调用函数foo,这个函数有Buffer overflow漏洞,攻击目标是触发函数getshell
  • gdb调试,命令r运行,命令info r查看各寄存器的值,主要关注eip寄存器的值
  • 分别输入11……4455555555和11……4412345678看eip寄存器的值,对比可知占用返回地址的压栈数据为4321
  • 将这些数换成getshell的内存地址(\x7d\x84\x04\x08\x0a),通过perl生成在ASCII界面所无法输入的16进制值,用(cat input; cat) | ./xxx来进入程序,运行结果如下:

三、注入Shellcode并执行

  • 准备工作:若堆栈内存区设置为不可执行。这样即使是注入的shellcode到堆栈上,也执行不了。使用execstack -s XXX设置堆栈可执行,通过execstack -q XXX查看堆栈是否可执行。使用more /proc/sys/kernel/randomize_va_space命令查看是否开启地址随机化(让OS每次都用不同的地址加载应用),有以下三种情况

    • 0表示关闭进程地址空间随机化。
    • 1表示将mmap的基址,stack和vdso页面随机化。
    • 2表示在1的基础上增加栈(heap)的随机化。
  • 使用echo "0" > /proc/sys/kernel/randomize_va_space命令关闭进程地址空间随机化,并再次使用more /proc/sys/kernel/randomize_va_space验证。
  • Linux下有两种基本构造攻击buf的方法
    • retaddr+nop+shellcode
    • nop+shellcode+retaddr
  • 因为retaddr在缓冲区的位置是固定的,shellcode要不在它前面,要不在它后面,缓冲区小就把shellcode放后边,缓冲区大就把shellcode放前边,使用nops+shellcode+retaddr,nop一为是了填充,二是作为“着陆区/滑行区”,若猜的返回地址只要落在任何一个nop上,自然会滑到我们的shellcode
  • 构造一个shellcode,输入攻击命令(cat input_shellcode;cat) | ./XXX,并找到pwn3_20155318的进程号
  • 进行gdb调试,通过设置断点,来查看注入buf的内存地址
  • 结构为:anything+retaddr+nops+shellcode。看到01020304就是返回地址的位置。地址是 0xffffd3a0
  • 修改input_shellcode为\xa0\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\x80\xd3\xff\xff\x00,如图所示,再次攻击后成功!

实验总结

  • 什么是漏洞?漏洞有什么危害?
  • 漏洞就是正常功能的硬件、软件或者策略中的缺陷。黑客利用漏洞来破坏计算机安全,达到其他对正常使用者不利的目的。
  • 实验收获与感想
  • 本次实验回顾了Linux指令、汇编、反汇编的知识、利用gdb调试,学习了BOF的原理和防御,通过修改机器指令改变程序执行流程、构造payload进行bof攻击的方法,学习了网络对抗的基本知识。感觉这门课还挺有趣的(微笑)

20155318 Exp1 PC平台逆向破解(5)M的更多相关文章

  1. 20155324《网络对抗》Exp1 PC平台逆向破解(5)M

    20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...

  2. 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...

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

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

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

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

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

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

  6. Exp1 PC平台逆向破解 20165235 祁瑛

    Exp1 PC平台逆向破解 20165235 祁瑛 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...

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

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

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

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

  9. 2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

    2018-2019-2 20165236郭金涛<网络对抗>Exp1 PC平台逆向破解 一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌 ...

随机推荐

  1. Vue -- vue-cli(vue脚手架) npm run build打包优化

    这段时间公司新项目立项,开发组选用 Vue2.0 进行开发.当然也就一并用到 vue cli 进行自动化构建.结果在基础版本开发完成后,用 npm run build 命令打包上线时,发现以下几个问题 ...

  2. Kafka 处理器客户端介绍

    [编者按]本文作者为 Bill Bejeck,主要介绍如何有效利用新的 Apache Kafka 客户端来满足数据处理需求.文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文. 如果你 ...

  3. Web服务架构风格之REST

    REST(Representational State Transfer)是一种Web服务的架构,其目的是创建具有良好扩展性的分布式系统.它的约束包含: 使用C/S模型.client和server之间 ...

  4. Oracle EBS FTP显示无法与某IP 连接

    首先 用root用户登录 如果可以登录 那么应该是权限的问题 这里选择 方法二:修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示: ## Allow root to ...

  5. phpmyadmin 下载、安装、配置

    phpmyadmin 下载.安装.配置 phpmyadmin 下载.安装.配置 地址:https://www.phpmyadmin.net/ 点击右上角下载按钮 下载得到phpMyAdmin-4.7. ...

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

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

  7. vc MFC 通过IDispatch调用默认成员函数

    CComPtr<IDispatch> spDisp(IDispatch *); if(!spDisp) return; DISPPARAMS dispParam={0}; //没有参数 V ...

  8. SDN第4次上机作业

    作业链接 1.建立以下拓扑,并连接上ODL控制器. ODL拓扑界面截图: 安装odl参考链接 2.利用ODL下发流表,使得h3在10s内ping不通h1,10s后恢复. 验证性连通性截图: 将hard ...

  9. Java多线程学习笔记之二缓存

    1.高速缓存 由来:处理器处理能力原因大于主内存(DRAM)访问速率,为了弥补这个差距,引入了高速缓存. 高速缓存是一种存取速率远比主内存大而容量远比主内存小的存储部件,每一个处理器都有其高速缓存.在 ...

  10. selenium3 浏览器驱动下载及验证

    下载浏览器驱动 当selenium升级到3.0之后,对不同的浏览器驱动进行了规范.如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动. 各浏览器下载地址: Firefox浏 ...