一.实验目标:

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

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

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

  三个实践内容如下:

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

    利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

    注入一个自己制作的shellcode并运行这段shellcode。

  这几种思路,基本代表现实情况中的攻击目标:

    运行原本不可访问的代码片段

    强行修改程序执行流

    以及注入运行任意代码。

二.基础指令:

  objdump -d:反汇编目标文件中包含的可执行指令。

  call+地址 是说这条指令将调用位于地址处的函数

  gdb info 查看寄存器的数值

  \x0a表示回车

  xxd:进行十六进制的输出,也可以将十六进制输出转换为原来的二进制格式。

三.直接修改机器指令

  先使用objdump指令查看反汇编代码

  call后面表示要跳转的地址,表示main函数跳转到foo函数处

  我们想要修改地址,跳转到getshell函数中,机器指令e8后的地址即可,直接修改为为c3即完成跳转地址转变

  

  运行结果如下:

  

  四.构造输入函数,进行bof攻击:

  先确认那几个字符会覆盖返回地址,这里使用一个40bit的字符串来进行探测

  

  

  通过前后对比EIP寄存器的地址,发现字符串中的1234字段覆盖了地址,那么只需要在对应的位置将其进行eip地址的覆盖修改

  同时,验证字符串11111111222222223333333344444444\x7d\x84\x04\x08的准确性

  最后,将字符串注入,完成攻击

  五.注入shellcode并执行

  首先先确认堆栈,文件堆栈可执行,关闭地址随机化,防止地址的变化

  构造payload:使用命令perl -e 'print "A" x 32;print "\x04\x03\x02\x01\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\x00\xd3\xff\xff\x00"' > input_shellcode

  用A来填满缓冲区,以确认,寻找字符串中对应的的4个字节

   输入命令  (cat input_shellcode;cat) | ./20165335 注入攻击bof

   在另外一个终端进行gdb调试,先使用 ps -ef | grep 20165335寻找进程号

   用attach 命令调用·进程

   同时,反汇编,在函数return  esp指针变化执行后的ret语句出,设置断点

   使用info r esp 查看esp寄存器的值,找出shellcode的地址(地址就在指针的后面)

   最后,将找到的4个字节的地址填充进去,完成注入,再次运行程序,实现攻击

六. 实验收获与感想

  在此次实验中,我感受到了实验原理的重要性,经过刘老师的原理讲解,使得在实验中思路清晰,知道现在自己在做什么,这样做的目的是什么,使得在过程中,清晰明了,

  也经过实验,更深刻的认识到了其中的原理以及eip寄存器,地址等在内存的实际变化,受益匪浅。

漏洞,就是能够使得恶意代码,经过各种非正常的方式注入计算机,并进行运行的计算机运行bug。

漏洞可以使得计算机按照其他人的指令,操作进行运行,可以使得恶意代码不经过各种安全方式运行程序,从而执行shellcode,破坏计算机

NOP 机器码90:NOP指令为空指令,计算机不进行任何操作

JNE 机器码75:条件转移指令,对比是否相等,不相等就跳转

JE 机器码74 :条件转移指令,对比是否相等,相等就跳转

JMP:无条件转移指令。

  段内直接短转 机器码:EB

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

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

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

CMP:比较指令,对标志寄存器产生影响

  

2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 20165335的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

    2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解 实验1-1直接修改程序机器指令,改变程序执行流程 先输入objdump -d 20165305pwn2查看反汇编代码 ...

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

    2018-2019-2 <网络对抗技术> Exp1 PC平台逆向破解 20165215 目录 知识点描述 实验步骤 (一)直接修改程序机器指令,改变程序执行流程 (二)通过构造输入参数,造 ...

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

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

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

    <网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...

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

    2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解 实验内容及步骤 第一部分:直接修改程序机器指令,改变程序执行流程 关键:通过修改call指令跳转的地址,将原本指向被 ...

随机推荐

  1. Jmeter学习系列----2 录制脚本

    虽然专业的自动化测试人员都不会选择录制脚本的方式来进行自动化脚本的编写,但是,我们作为初学者还是可以学习一下怎么利用工具来进行脚本的录制,体验一下自动化工具的效率,下面,具体讲下如何使用jmeter自 ...

  2. php获取文章的第一张图片

    今天做东西的时候遇到一个问题就是如何把文章提取出来作为文章列表呢? 因为用了Ueditor,所以提交的数据包含了html标签. 搜索了一会找到了一个方案,用php自带的函数去掉了html标签. $ar ...

  3. 删除U8中单据已经审核完成但工作流未完成的任务

    问题描述: U8工作流终审结点后面还有节点时,当终审终点完成后,系统会通知后面的节点进行审核,但单据显示已经审核完成,后面的节点无法审核,工作任务会一直挂着,无法删除. 例如下图中,节点"终 ...

  4. Python自学知识点----Day03

    cd指令说明 1).作用:切换工作目录. 2).   命令(注意空格)         含义 cd ~===cd             回到家目录 cd .                     ...

  5. iview menu组件手动收起与展开

    本文主要介绍menu组件在有子菜单时如何手动的展开与收起. 展开: 在需要展开的地方先设置openname变量如this.openname = ["设置"]; 再在$nextTic ...

  6. 人工智能--AI篇

    AI背景 在当今互联网信息高速发展的大背景下,人工智能(AI)已经开始走进了千家万户,逐渐和我们的生活接轨,那具体什么是AI呢? 什么是人工智能(AI)? 人工智能:简单理解就是由人制造出来的,有一定 ...

  7. spring boot application.properties 属性详解

    2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ...

  8. CDI feature

    CDI Java EE的上下文和依赖注入(Contexts and Dependency Injection for Java EE,CDI),CDI是即将完成的Java EE 6平台的关键组成部分, ...

  9. CSIS 1119B/C Introduction to Data Structures and Algorithms

    CSIS 1119B/C Introduction to Data Structures and Algorithms Programming Assignment TwoDue Date: 18 A ...

  10. 《Redis 使用规范》

    一:Redis 概述 - Redis 是内存级别的数据库,在一台普通电脑上,Redis 3.X 便可以读取 10 万个键值对(现在的Redis官方版本已经更新到了5.X,性能会更好). 二:关于Red ...