20155307刘浩《网络对抗》逆向及Bof基础

实践目标

本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会回显任何用户输入的字符串。该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。

本次实践主要是学习两种方法:

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

现实情况中的攻击目标:

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

要求:掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码

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

掌握反汇编与十六进制编程器

反汇编:objdump -d xxx
二进制转十六进制::%!xxd
掌握可执行文件的基本格式
掌握缓冲区溢出攻击的原理
当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。

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

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

  • 利用/e8d7命令查找要修改的内容,将d7修改为c3。
    利用:%!xxd -r命令将十六进制转换为二进制并存盘退出。
  • 更改程序后结果:

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

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

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

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

    只要把这四个字符替换为getShell的内存地址,输给20155305pwn1,20155305pwn1就会运行getShell。构造输入字符串来覆盖返回地址

  • 我们没法通过键盘输入\x7d\x84\x04\x08这样的16进制值,所以先生成包括这样字符串的一个文件,命令为perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input(\x0a表示回车)。
    使用(cat input; cat) | ./20155305pwn1命令,将input的输入通过管道符“|”作为pwn120155305的输入。更改程序后结果:

20155307刘浩《网络对抗》逆向及Bof基础的更多相关文章

  1. 20155307《网络对抗》Web安全基础实践

    20155307<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...

  2. 网络对抗实验一 逆向及Bof基础实践

    网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...

  3. 20145203盖泽双 《网络对抗技术》实践1—— MAL_逆向与Bof基础

    20145203盖泽双 <网络对抗技术> MAL_逆向与Bof基础 实践目标 (1)我们要通过修改程序代码,使得程序运行其自身中本不该运行的代码片段. (2)在这里,我们有一个名为2014 ...

  4. 20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

    20155201 李卓雯 <网络对抗技术>实验一 逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,f ...

  5. 20145308 《网络对抗》 逆向及BOF基础实践 学习总结

    20145308 <网络对抗> 逆向及BOF基础实践 学习总结 实践目的 通过两种方法,实现程序能够运行原本并不会被运行的代码 实践原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串 ...

  6. 20145236《网络对抗》Exp1 逆向及Bof基础

    20145236<网络对抗>Exp 1逆向及Bof基础 一.实践目标 运行原本不可访问的代码片段 强行修改程序执行流 以及注入运行任意代码. 二.基础知识及实践准备 理解EIP寄存器及其功 ...

  7. 20155305乔磊《网络对抗》逆向及Bof基础

    20155305乔磊<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ...

  8. 20155311高梓云《网络对抗》逆向及Bof基础

    20155311高梓云<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...

  9. 20155334 曹翔 《网络对抗》逆向及Bof基础

    20155334 曹翔 <网络对抗>逆向及Bof基础 实践目标: 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回 ...

随机推荐

  1. Android Authenticator使用(转)

    出处:http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/ 这篇文章个人觉得讲的非常好,比官方文档还要清晰,将 ...

  2. [翻译] 扩张卷积 (Dilated Convolution)

    英文原文: Dilated Convolution 简单来说,扩张卷积只是运用卷积到一个指定间隔的输入.按照这个定义,给定我们的输入是一个2维图片,扩张率 k=1 是通常的卷积,k=2 的意思是每个输 ...

  3. leetcode 之 Degree of an Array

    1.题目描述 Given a non-empty array of non-negative integers nums, the degree of this array is defined as ...

  4. 《SQL Server 2008从入门到精通》--20180628

    数据库基本概念:区.页.行 区:SQL Server中管理空间的基本单位.一个区大小为64KB,是八个物理上连续的页.SQL Server中每MB有16个区.一旦一个区被存储满,SQL Server将 ...

  5. Oracle使用order by排序关于null值处理

    select * from dual order by age desc nulls last select * from test order by age asc nulls first sqls ...

  6. 使用django的admin的后台管理界面

    django的admin后台管理界面是方便我们对数据库操作的  是一个在浏览器显示的  图形化界面数据库操作 我们先在django中的admin中把我们需要在图形化界面中进行操作的表导入进去: 先把m ...

  7. ZT 二叉树先序,中序,后序遍历非递归实现

    二叉树先序,中序,后序遍历非递归实现 分类: 数据结构及算法2012-04-28 14:30 8572人阅读 评论(6) 收藏 举报 structc 利用栈实现二叉树的先序,中序,后序遍历的非递归操作 ...

  8. 函数的调用 and 打印返回值 ret= mai() print(ret)

    def mai(): # mai 函数名 (yan) 形式参数 print("老板,给我一包中华") return"给你" # 返回值-- 给你ret = ma ...

  9. Django 错误之 No module named ‘MySQLdb’

    由于卸载Mysql时将很多相关依赖包都卸载了,重装mysql后启动django出现如下错误: django.core.exceptions.ImproperlyConfigured:Error loa ...

  10. hihoCoder1343 : Stable Members【BFS拓扑排序】

    题目链接:https://hihocoder.com/problemset/problem/1343 #1343 : Stable Members 时间限制:10000ms 单点时限:1000ms 内 ...