20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础

实践目标

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

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

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

    • 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。(强行修改程序执行流)

    • 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。(运行原本不可访问的代码片段)

基础知识

  • 熟悉Linux基本操作,能看懂常用指令,如管道(|),输入、输出重定向(>)等。

    • 管道命令:管道符(|)左边命令的输出就会作为管道符右边命令的输入。
    • 输入、输出重定向:LINUX默认输入是键盘,输出是显示器,可以用重定向(<、>)来改变这些设置,将输入或输出导向到指定地方。
  • 能看得懂汇编、机器指令、EIP、指令地址。

  • 会使用gdb,vi。

  • 理解Bof的原理。

实践要求

  • 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(1分)

    • NOP:即“空指令”,在执行到其时,CPU什么也不做,只是继续执行NOP后面的一条指令。
    • JNE:条件转移指令,不等于则跳转。
    • JE:条件转移指令,等于则跳转。
    • CMP:比较指令,功能上相当于减法指令,但只是对操作数之间运算比较,不保存结果。执行后,将对标志寄存器产生影响。
  • 掌握反汇编与十六进制编程器 (1分)

    • 反汇编:objdump -d xxx
    • 二进制转十六进制::%!xxd
  • 掌握可执行文件的基本格式(2分)
  • 掌握缓冲区溢出攻击的原理(1分)

    • 当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。

原程序功能

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

  • 将目标文件20145219反汇编objdump -d 20145219,阅读发现getShell函数的地址是804847d,foo函数的地址是8048491,要想使main函数调用foo函数的机器指令是e8 d7ffffff,其下条指令的地址为80484ba,要想使main函数调用getShell函数只要修改d7ffffffgetShell-80484ba对应的补码c3ffffff就行。

  • 利用vi 20145219命令打开目标文件20145219,屏幕上显示二进制乱码,利用:%!xxd命令,将二进制转换为十六进制。

  • 利用/e8d7命令查找要修改的内容,将d7修改为c3

  • 利用:%!xxd -r命令将十六进制转换为二进制并存盘退出:wq

  • 更改程序后结果:

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

  • gdb调试确认输入字符串哪几个字符会覆盖到返回地址

    • 首先输入1111111122222222333333334444444455555555,用info r命令查看溢出时寄存器状态如下,观察%eip的值,发现%eip的值是0x35353535,大致确定溢出字符为55555555

  • 再输入1111111122222222333333334444444412345678,用info r命令查看溢出时寄存器状态如下,观察%eip的值,发现%eip的值是0x34333231,确定溢出字符为1234

  • 只要把这四个字符替换为getShell的内存地址,输给pwn20145219pwn20145219就会运行getShell

  • 构造输入字符串来覆盖返回地址

    • 我们没法通过键盘输入\x7d\x84\x04\x08这样的16进制值,所以先生成包括这样字符串的一个文件,命令为perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input(\x0a表示回车)。

  • 使用16进制查看指令xxd input查看input文件的内容。

  • 使用(cat input; cat) | ./pwn20145219命令,将input的输入通过管道符“|”作为pwn20145219的输入。更改程序后结果:

参考文献

20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. JavaScript的记忆函数真的可以提升性能吗?

      1 记忆函数是什么呢? 让函数记住曾经计算过的参数对应的结果 2 那我们为什么使用记忆函数呢? 答案是 避免重复计算 3 在工作中如何使用和实现函数记忆 ? 形成闭包,在闭包中维护一个哈希数组(其 ...

  2. android基础---->音频和视频的使用

    Android 在播放音频和视频方面也是做了相当不错的支持,它提供了一套较为完整的API,使得开发者可以很轻松地编写出一个简易的音频或视频播放器.今天我们开始android中音频和视频使用的学习. 目 ...

  3. C# 计算当前时间距离今晚00:00:00还有多少分多少秒

    .net 计算当前时间距离今晚00:00:00还有多少分多少秒 string dateDiff = null;//获取当前时间 DateTime DateTime1 = DateTime.Now; / ...

  4. Mysql group_concat函数列转行,与行转列

    例一: SELECT num from user 1.使用group_concat函数得到列转行 select group_concat(num) from user 2.使用SUBSTRING_IN ...

  5. Swift - 触摸事件响应机制(UiView事件传递)

    import UIKit class FatherView: UIView { override func hitTest(point: CGPoint, withEvent event: UIEve ...

  6. Hive格式化输出数据库和表详细信息

    hive> desc database extended wx_test; OK wx_test hdfs://ns1/user/hive/warehouse/wx_test.db hadoop ...

  7. 二维坐标系极角排序的应用(POJ1696)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3170   Accepted: 2029 Descrip ...

  8. mongoexport

    导数据 数据同步 mongodb无自增id 数据断点 mongoexport — MongoDB Manual https://docs.mongodb.com/manual/reference/pr ...

  9. 一只青蛙从第一级台阶跳到第n级,每次可以跳任意级,共有多少种跳法,并写出递推式

    是斐波那契数列问题 假设f(n)是n个台阶跳的次数:(假设已经调到第n个台阶,最后一次是由哪个台阶跳上来的) f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) ...

  10. H5保养

    合成油上面写着A3B4级,可以用的.绿静发动机说明书上写着呢CI-4级或A3B4级都可以用. 你的车换机油要加多少升? 5.6标准数,先加5L后看机油尺,在中间就行, 多点少点只要不过上线就无所谓. ...