shellcode注入实践

编写shellcode

  • 这一部分在我上一篇日志里面已经详细讲过了,这里直接把验证合适的shellcode拿过来。
  • \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\

    准备工作,设置环境

    构造要注入的payload

  • Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr。因为retaddr在缓冲区的位置是固定的,shellcode要不在它前面,要不在它后面。简单说缓冲区小就把shellcode放后边,缓冲区大就把shellcode放前边。
  • 实践证明nop+shellcode+retaddr对于pwn1不是成功的payload,但我们依然决定往这个坑里跳一下。手动微笑。

    payload结构为nop+shellcode+retaddr

    1.编写payload

  • 特别提醒:最后一个字符千万不能是\x0a。\x0a相当于回车键,若回车了下面的操作就做不了了。

    2.打开一个新终端(终端2),将payload注入到pwn1中(此处有天坑!!!一定要仔细!!!)
  • 敲好(cat input_shellcode;cat) | ./pwn1后这里有三种状态,这三种状态中只有一种才能让接下来的实验顺利进行。


  • 答案就是第一种。我做实验的时候被这里坑住了很久,一切都正常但到后面查看寄存器的时候上翻了几十行就是找不到shellcode,问题就出在这里,大家在这里千万不要手滑多敲回车(到下面提示的地方再敲),要不然都得重新来过。
  • 保持终端2中程序的运行状态。

    3.终端1中查询pwn1进程的UID

    4.gdb调试,进入对应UID端口

    5.反汇编,设置断点

  • 注意:continue执行的时候,在终端2敲一下回车,终端1中的continue暂停在断点处。

    6.往上查询找到shellcode,同时找到要覆盖的地址

  • 要覆盖的地址(返回地址)是0xffffd300

    7.更改payload,测试,不成功

  • 0xffffd300替换0x01020304

    payload结构为retaddr+nop+shellcode

  • 重新构造payload
  • 成功

    return-to-libc实验

    配置32位linux环境

  • sudo apt-get update
  • sudo apt-get install lib32z1 libc6-dev-i386
  • sudo apt-get install lib32readline-gplv2-dev

    添加新用户

  • 因为我们最后的是要通过看“是否取得root权限”来判断成功与否的,所以攻击对象不能是root用户,要创建一个新用户。

    设置实验背景

  • 进入32位环境,关闭地址随机化,设置zsh程序代替/bin/bash

    在/tmp文件夹下编写漏洞程序retlib

  • 在root用户下编译,关闭栈保护机制。设置SET-UID

    在/tmp文件夹下编写getenvaddr和exploit

  • getenvaddr用来读取环境变量
  • exploit用来攻击
  • 同样是在root用户下编译

    获取地址并修改exploit

  • 获取BIN_SH地址
  • 进入gdb设置断点,调试运行获取system和exit地址
  • 将上述三个地址修改入exploit.c文件
  • 删除之前生成的exploit和badfile(我的exploit因为有权限无法命令行删除,索性直接在places下面的图形化界面tmp文件夹里手动删除)

    攻击,成功

  • 先运行exploit再运行retlib即可获得root权限,成功!

20145316许心远《网络对抗》第一次实验拓展:shellcode注入+return-to-libc的更多相关文章

  1. 20145316许心远《网络对抗》EXP7网络欺诈技术防范

    20145316许心远<网络对抗>EXP7网络欺诈技术防范 实验后回答问题 通常在什么场景下容易受到DNS spoof攻击 公共共享网络里,同一网段可以ping通的网络非常容易被攻击 在日 ...

  2. 20145316许心远《网络对抗》Exp6信息搜集与漏洞扫描

    20145316许心远<网络对抗>Exp6信息搜集与漏洞扫描 实验后回答问题 哪些组织负责DNS.IP的管理? 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.D ...

  3. 20145316许心远《网络对抗》MSF基础应用

    20145316许心远<网络对抗>MSF基础应用 实验后回答问题 用自己的话解释什么是exploit,payload,encode. exploit:顾名思义就是攻击嘛,因为是个动词,所以 ...

  4. 20145316许心远《Java学习笔记(第8版)》课程总结

    20145316许心远<Java学习笔记(第8版)>课程总结 每周读书笔记链接汇总 ▪ 第一周读书笔记 ▪ 第二周读书笔记 ▪ 第三周读书笔记 ▪ 第四周读书笔记 ▪ 第五周读书笔记 ▪ ...

  5. 20145316许心远《Java学习笔记》第三周总结

    20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...

  6. 网络对抗第一次实验——PC平台逆向破解(5)M

    网络对抗第一次实验--PC平台逆向破解(5)M 实践一 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 操作步骤: 获取实验用文件pwn1,复制,复制出来的文件改名为20155 ...

  7. 20145316许心远《Java程序设计》第4周学习总结

    20145316许心远<Java程序设计>第4周学习总结 教材学习内容总结 6.继承与多态 1.继承共同行为 * 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需 ...

  8. 20145203盖泽双《网络对抗技术》拓展:注入:shellcode及return-into-libc攻击

    20145203盖泽双<网络对抗技术>拓展:注入:shellcode及return-into-libc攻击 一.注入:shellcode 1.编写一段用于获取Shellcode的C语言代码 ...

  9. 20145307陈俊达《网络对抗》shellcode注入&return to libc

    20145307陈俊达<网络对抗>shellcode注入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将 ...

随机推荐

  1. Windows Server 2008 R2之五操作主控的管理

    一.概述 操作主控(FSMO)也称作操作主机(OM),它是指在AD中一个或多个特殊的DC,用来执行某些特殊的功能(资源标识符SID分配.架构修改.PDC选择等). 1.操作主控的分类 基于森林的操作主 ...

  2. 如何使QLineEdit禁止编辑

    在写程序的时候喜欢使用QLineEdit,用来显示打开文件的路径.但是很不喜欢被编辑.那么要怎么设置不可编辑呢. (1)调用lineEdit->setEnabled(False) #不可编辑了 ...

  3. Bagging和Boosting的概念与区别

    随机森林属于集成学习(ensemble learning)中的bagging算法,在集成算法中主要分为bagging算法与boosting算法, Bagging算法(套袋发) bagging的算法过程 ...

  4. Swift 使用 LLDB 调试命令

    swift 和 oc 的语法不一样: Xcode 调试技巧之 Swift 篇 打印和赋值,观察数值变量和view对象属性 p指令可打印其对象类型.内存地址以及该对象的值等具体信息, po指令则是打印其 ...

  5. C#中DataSet、DataTable、DataReader的区别

    简单说就是:     DataSet:数据集.一般包含多个DataTable,用的时候,dataset["表名"]得到DataTable         DataTable:数据表 ...

  6. grpc protobuf

    1.ProtoBuffer是google的一款非常高效的数据传输格式框架 2.一个方法仅能接受一个参数 3.对于定义的message,每个值都有一个唯一的number类型的数字,根据官方文档的解释:它 ...

  7. 8 jmeter之集合点

    集合点:集合点用以同步虚拟用户,以便恰好在同一时刻执行任务.在测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中可以通过在提交数据操作前面加入集合点,这样当虚拟用户 ...

  8. HTML5-CSS3-JavaScript(4)

    CSS3中 变形与动画相关属性 CSS3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的功能.CSS3的变形功能可以对HTML组件执行位移.旋转. ...

  9. 万恶之源 - Python数据类型二

    列表 列表的介绍  列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. 比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各 ...

  10. (转)Kangle配置文件

    kangle配置文件 (重定向自Kangle配置文件) 目录 [隐藏] 1配置文件介绍 2重新加载配置文件 3config 3.1request和response(配置访问控制) 3.2listen( ...