expolit指的是漏洞利用的过程,一般一一段代码的形式出现。exploit的核心功能是淹没函数的返回地址,获取进程的控制权限
关于shellcode前边已经做过相关的介绍,那么shellcode和exploit二者之间有什么联系呢?其实二者在本质上是没有任何联系的但是二者又息息相关,我们知道exploit的核心功能就是提权(getshell),而shellcode就是我们在提权之后要执行的命令,但是exploit只管提权不管提权之后要干什么,而shellcode则只管提权之后的命令执行不管是否提权,所以说这二者互不相干又息息相关。

我们所说的跳板技术其实是一种动态定位shellcode的方法,当然与之相对应的还有静态定位shellcode 的方法,前边在对shellcode进行介绍的时候,也并没有对shellcode的定位进行介绍,这里就对这两种方法简单的进行介绍:

静态定位shellcode

以缓冲区溢出为例:我们所说的静态定位方法就是在动态调试程序的时候,计算出函数在执行过程中的返回地址,然后利用缓冲区溢出的原理将原来的函数返回地址覆盖成为另一个地址,而这个地址就是shellcode存放的地址。这个过程就是静态定位shellcode的方法。这种方法便于理解但是有一个不可避免的弊端:在每次程序重新装载的时候,缓冲区的起始地址和函数的返回地址都可能会发生变换,因此,在这种静态定位shellcode的方法中,很容易导致函数返回地址的覆盖错误,导致程序跳向未知数据的地方导致程序运行出错
静态定位shellcode的过程如下图所示:

***题外话:***需要注意的是,shellcode的开发,不同于普通意义上的开发,shellcode的开发,需要在不断地动态调试的过程中去改进,不管是代码的体量还是代码插入的位置,都需要经过一番思量,而且在不同编译器的优化下动态调试的过程也不尽相同,因此,shellcode的学习和开发需要在查阅资料和自己动手调试的基础上共同进行才能对整个过程以及原理更清晰的掌握

跳板技术

之所以会使用到跳板技术是因为在静态定位shellcode 的过程中,我们需要将函数的返回地址覆盖成为shellcode的地址,但是(还是以缓冲区溢出为例),我们的shellcode是填充在缓冲区内部(或者其他数据空间里边),而且我们在填充shellcode的时候,该地址是被硬编码了的,在下一次程序重新装载之后,我们的缓冲区的地址就会发生变化,也就是我们常说的“帧移位”,这个时候再按照之前的硬编码数据进行地址覆盖的时候,就会造成程序EIP 指向其他数据导致程序无法正常运行(程序奔溃),为了解决这个问题,提出了跳板技术进行shellcode的动态定位。
要实现shellcode的动态定位,也就是说不管什么时候我们都能找到一个不变的量,以此为依据才能进一步找到shellcode的位置。

这里介绍一种情况下的跳板寻找:以jmp esp为跳板,具体实现过程如下:
1:将函数返回地址处的指令修改为jmp esp的地址(也就是将函数的返回地址重定向)(一般情况下,ESP 寄存器中的地址总是指向系统栈中且不会被溢出的数据破坏。函数返回时,ESP 所指的位置恰好是我们所淹没的返回地址的下一个位置),当然也可以修改为其他指令,这就需要在shellcode的开发过程中自己去调试获得这个不变的量或者是变化有规律的量
2:跳转指令jmp esp执行之后,开始将之后的地址空间覆盖为shellcode,这样再jmp esp指令执行过后,就会跳到shellcode的空间。如下图所示

那么现在还有一个问题需要解决,那就是用来重定向返回地址的地址从何而来也就是说jmp esp这个指令的地址从哪来,这个其实相对比较好解决,在程序装载的时候会加载一些模块到内存空间去,我们可以在内存空间里边直接搜索这个指令的机器码 0xFFE4就可以了,可以自己编写程序实现,也可以通过OD来动态调试的过程中找到相应指令的地址,但是需要注意的一点是,这个跳转指令在一定程度上需要有通用性才比较使用,当我们采用跳板的方式来定位shellcode的时候就希望能够在极大程度上减轻压力,因此通用性也是一个需要考虑的因素,在不同的操作系统和不同的版本里边,一个模块(主要指常见的动态链接库)里边指令的地址是不一样的,所以选择的时候也要多加注意。

这样跳板的地址找到之后,就可以进行动态定位shellcode了,定位到shellcode之后就可以开始为所欲为了(当然前提是插入有效能够实现功能的shellcode代码)

当然除此之外还有其他的情况发生 比如说,在一些判断条件比较严格的漏洞里边,我们用跳板来定位shellcode 很难做到,但是静态定位的方法又不准确那这个时候我们使用什么方法呢?
下边介绍两种思路,
第一种就是增加我们“靶子”的面积,所谓“靶子”是指shellcode所处的内存区域,我们可疑淹没一大片的内存区域,将前边的内存区域都覆盖为nop指令,而把真正的shellcode放在后边,这样,只要返回地址在nop指令的区域里,就可以执行我们的shellcode指令,如下图所示:

第二种:增加“扫射面积”
我们说的增加扫射面积。其实和上边的增加“靶子面积”大同小异,不同的是,这种方法采用的是多个返回地址来覆盖真正的返回地址,以此来增加命中的几率,如下图所示:

漏洞利用exploit ——跳板技术 静待春暖花开之时,你我相见 听你说一声 好久不见相关推荐

  1. java xxe漏洞利用_【技术分享】XXE漏洞攻防之我见

    作者:激越王 预估稿费:400RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 你是否听说过xml注入攻击呢,或者对它只知其一不知其二呢? 现在让我们从xml相关基础知识开 ...

  2. 被玩坏的IE浏览器——漏洞利用方法和技巧介绍

    0x01 基本介绍 自1995年以来,Internet Explorer一直是Microsoft Windows操作系统的核心部分.尽管正式停止了对Edge浏览器的进一步开1发,但由于其持续使用的情况 ...

  3. 基于java环境漏洞利用

    基于java环境的漏洞利用获取shell 前言 二.操作步骤 1.执行监听设置参数 2.运行木马构建session 总结 前言 一般基于Java的软件开发的电脑上,做财务,大数据,税控软件,收银,OA ...

  4. redis 漏洞利用与防御

    前言 ​ Redis在大公司被大量应用,通过笔者的研究发现,目前在互联网上已经出现Redis未经授权病毒似自动攻击,攻击成功后会对内网进行扫描.控制.感染以及用来进行挖矿.勒索等恶意行为,早期网上曾经 ...

  5. Libc堆管理机制及漏洞利用技术 (一)

    0×01 Libc堆浅析 1.1 堆管理结构 struct malloc_state {mutex_t mutex; /* Serialize access. */int flags; /* Flag ...

  6. Automatic Exploit Generation:漏洞利用自动化

    漏洞利用是二进制安全的核心内容之一.当安全研究员挖掘到一个新的漏洞时,首先要做的事情就是尝试写POC和exploit.所谓POC,一般来说就是一个能够让程序崩溃的输入,且能够证明控制寄存器或者其他违反 ...

  7. linux内核提取ret2usr,Linux内核漏洞利用技术详解 Part 2

    前言 在上一篇文章中,我们不仅为读者详细介绍了如何搭建环境,还通过一个具体的例子演示了最简单的内核漏洞利用技术:ret2usr.在本文中,我们将逐步启用更多的安全防御机制,即SMEP.KPTI和SMA ...

  8. checkm基因组_checkm8漏洞利用的技术分析

    checkm基因组 Most likely you've already heard about the famous exploit checkm8, which uses an unfixable ...

  9. Libc堆管理机制及漏洞利用技术(一)

    原文地址:https://www.freebuf.com/articles/system/91527.html 原创作者:ysyy 前段时间参加了个名为RCTF的比赛,没进入决赛.正所谓知耻而后勇,作 ...

最新文章

  1. [大数据] zookeeper 安装和配置
  2. 云南“爆款”景区相继停业整顿 旅游大省为环保让路
  3. 辽宁省2021年高考成绩位次查询,辽宁2021八省联考分数、位次表(非官方),附志愿填报样表...
  4. 聊聊flink的Execution Plan Visualization
  5. 磁铁还能用来爬铁墙?简直惊呆了
  6. sql 两个表列包含_Oracle数据库扩展语言PL/SQL之运算符
  7. 结合实际场景谈一谈微服务配置
  8. 软件测试黑马程序员课后答案_软件测试教程课后答案
  9. 小程序进阶学习02--安装webstorm
  10. LINUX创建桌面运行快捷方式
  11. markdown中编写数学公式的常用 latex 语法
  12. 容器监控工具cAdvisor
  13. 迈普路由器访问控制列表配置命令_迈普路由器配置命令集合
  14. kodi树莓派_【树莓派】树莓派与XBMC及Kodi、LibreELEC插件(二)
  15. 酷q java_组件-酷Q(QQ)-CQ HTTP API(基本失效)
  16. dataset中shuffle()、repeat()、batch()用法
  17. 如何创建一张属于自己的简单的网页
  18. 筛选后系列填充_案例分享10——如何在筛选后的表格中粘贴数据(二)
  19. 基于jsp,javaweb、ssm教务管理系统
  20. linux无法识别耳机,Ubuntu 7.10中不能正常使用耳机的解决方法

热门文章

  1. 【ESP32-CAM】使用aduino-IDE的环境配置和烧录相关问题
  2. sigaction函数
  3. 深度解读绩效管理PDCA循环(含操作指南、案例应用)
  4. 微信公众平台所带来的互动式营销
  5. C语言 计算正方形周长
  6. python airflow_airflow的使用方法
  7. 无线通信与编码实验_MATLAB利用限幅和滤波操作实现OFDM系统降峰均比(PAPR)_含实现代码
  8. OpenCV实现图像转换为素描效果
  9. phpize mysql_phpize编译mysql扩展
  10. Unity2D游戏开发——制作激光武器(详细流程,附详细注释的代码)