传送门

温馨提示:在此之前,我曾撰写过一篇关于反向shell的文章。在这篇文章中,我将会引用到此前这篇文章中的部分内容,所以我建议各位同学在阅读本文之前先查阅一下那篇文章[文章传送门],以节省各位的宝贵时间。

前言

在这篇文章中,我将会针对一种新型的堆栈环境来进行安全分析。除此之外,我还会告诉大家如何自己构建一个payload来绕过ASLR(随机分配地址空间技术),整个过程与我在此前那篇文章中所描述的方法有一些略微的变化。

注:在我进行测试Windows 7系统环境中,DEP(数据执行保护)功能已经被禁用了。DEP是一套软硬件技术,它不仅能够防止存储在栈内存中的操作码得到直接执行,而且它还能够在内存上执行额外的安全检查以帮助防止恶意代码在目标系统中运行。

了解Windows架构下的堆栈环境

相较于Linux而言,Windows的堆栈架构则稍有不同。除了堆栈空间的架构有区别之外,Windows的调用规则也与Linux平台不一样。我待会儿会跟大家解释这些不同之处对我们意味着什么,但是在此之前,我们要先了解一下不同环境下的堆栈架构,以及各个方法之间相互调用的规则。

需要注意的是,被调用的方法(method)需要负责清除堆栈空间中所有与之相关的数据。这时我们就要明确区分出函数的主调用者和被调用者了,这一点非常的重要,因为这些函数会将数据写入我们的堆栈。

在Linux平台下,我们是以调用者的身份进行操作的,而这就意味着某个方法需要通过调用其他的方法来将正确的操作指令压入栈中,当其他的方法返回了相应的值之后,系统才会通过调用此前压入栈中的命令来清除堆栈中相关的数据。但是我们可以看到,Windows平台则是以一种被调用者的模式运行的。这也就意味着,被调用的方法将要负责清理堆栈中的相关数据。所以,Windows平台下的堆栈示意图与我们之前那张Linux环境下的堆栈结构图片大致相似,但是仍然有一些细微的区别。

Linux的堆栈结构如下图所示:

Windows的堆栈结构如下图所示:

从这张图片中我们可以看到,EIP寄存器之后还有一些数据,而ESP寄存器之后还有一些队列数据。而在ESP寄存器之前的数据就是负责清除数据的操作码,这些操作码的插入位置需要根据不同系统架构的调用规则来进行区分。我之所以要给大家介绍这些内容,是因为这些知识对于我们之后编写漏洞利用代码来说是非常重要的。所以在我们继续讲解之前,我要帮各位同学填补这部分的知识空缺。

实际上,从我们的角度来看,Windows的堆栈架构与Linux的堆栈架构有着惊人地相似之处。从广义的角度来讲,两者而唯一的区别就是Windows堆栈有ASLR。所以,这就是我们这篇文章中的主角,我们将会尝试使用这篇文章中所要介绍的漏洞利用方法来尝试绕过ASLR。接下来,让我们开始吧!

构建恶意输入

与之前RedHat8的漏洞利用过程非常相似,但我们这次只需把注意力放在一个缓冲区溢出漏洞的身上。虽然该缓冲区的具体长度要稍后才能确定,但是我们现在至少要获取到足够的信息以了解该缓冲区的实际架构。

首先,我们要解决如何绕过ASLR的问题。为此,我们要使用一个简单的机制(jmp esp),这样我们就可以跳转到ESP寄存器指向的地址。这也就意味着,我们在不知道ESP寄存器指向地址的情况下实现了相对跳转。这是一个好消息,因为就算我们的堆栈帧会存储在堆栈空间的随机位置上,但总是会有一个指针指向栈底,我们可以通过一个简单的操作码去访问这个指针地址。

所以,只要我们能够找到“jump esp”指令,我们就可以将其放入堆栈的EIP寄存器中。请记住,在这种情况下, EIP寄存器所指向的任何代码都将得到执行。剩下的就是那部分负责清除数据的代码了。实际上,我并不清楚这些代码是何时被压入栈中的。但是接下来,我们要确保的就是我们的payload会在这部分代码执行完毕之后正确运行。

最后一个问题就是我们shell代码的编码问题。我们的shell代码会被发送至目标主机,所以我们需要对其进行编码。由于我们的shell代码最终将会被执行,所以在执行之前肯定需要先进行解码,而解码后的代码长度肯定会增加。所以为了解决这个问题,我们要将ESP寄存器移动到堆栈空间的前段。具体如下图所示:

恶意输入中所要使用的参数

首先,我要说明的是Windows 7实际上采用的是小端存储模式。这一点对于我们构建返回地址(例如“jump esp”指令)是非常重要的。

我所要做的第一件事情就是确定缓冲区的长度,或者是我们需要覆盖EIP寄存器的长度。我们使用“./pattern_create.rb 5000”并将其发送至我们的服务器端。接下来,我们可以使用“./pattern_offset.rb PATTERN”来重写EIP寄存器。这样一来,我们就能够知道用来覆盖EIP的恶意输入长度了,即4093。

我们可以在Narly中使用命令“!nmod”来列出堆栈中所有的数据包,我们只需要关注那些与ASLR无关的数据包即可。具体如下图所示:

发生了什么事?

在尝试了几个小时之后,我发现了一些不正常的现象。其实从一开始,EIP寄存器中的数据根本就没有被覆盖。而当我尝试使用NOPs去重写EIP时,系统却提示称我的payload结构有问题。在进行了改进之后,我决定使用“jump esp”指令的地址来重写缓冲区。

在完成了改进之后,我又进行了一次测试。这一次,我又遇到了一个奇怪的问题。ESP现在指向的却是一堆垃圾数据,但是其中还包含有一小部分有效数据。

还记得吗?我曾在我们的payload代码前添加了一部分数据,并将ESP寄存器在栈内存中的地址向前推进了1000个字节,为的就是当我们执行exploit时防止其被覆盖。接下来,我们需要查看EIP寄存器所指向的内容。地址0x00d6c732中到底有什么?通过分析之后我发现,这是一个内存地址,它指向的是我的shell代码!具体的位置我在上图用红色的圈圈标出来了。

出于好奇,我在shell代码前添加了一个断点,然后再次发送我们的payload。令我惊讶的是,这一次WINgdb竟然暂停了,并且会等待我输入下一步运行指令。

我们的目的是为了绕过ASLR,而每当我启动服务器后,或者发送我的payload后,堆栈帧都会被随机分配至堆栈空间中。虽然我们能够成功地移动ESP寄存器的内存位置,而且也能够执行shell代码中的部分指令,但是系统仍然会报错。

总结

这篇文章中的漏洞利用方法和之前针对RedHat8的漏洞利用方法之间有很大的不同,因为当我尝试进行远程攻击时,这个漏洞利用方法仍然不起作用。我没有收到任何的错误提示信息,虽然通信连接建立成功了,但是我却没有接收到任何的响应数据,所以我只能假设是某个子进程挂掉了。

linux aslr 关闭代码,【技术分享】浅谈ASLR和Shellcode的那些事儿相关推荐

  1. c语言 去掉双引号_技术分享|浅谈C语言陷阱和缺陷

    良好的软件架构.清晰的代码结构.掌握硬件.深入理解C语言是防错的要点,人的思维和经验积累对软件可靠性有很大影响.C语言诡异且有种种陷阱和缺陷,需要程序员多年历练才能达到较为完善的地步.软件的质量是由程 ...

  2. android hook 第三方app_【MiSRC】技术分享-浅谈android hook技术

    注:本文为"小米安全中心"原创,转载请联系"小米安全中心" 前言 xposed框架 xposed,主页:http://repo.xposed.info/modu ...

  3. 技术分享 | 浅谈滴滴派单算法

    桔妹导读:说到滴滴的派单算法,大家可能感觉到既神秘又好奇,从出租车扬召到司机在滴滴平台抢单最后到平台派单,大家今天的出行体验已经发生了翻天覆地的变化,面对着每天数千万的呼叫,滴滴的派单算法一直在持续努 ...

  4. 技术分享| 浅谈IM 产品中的“缩略图”功能

    在 IM 产品中,发送图片是产品的一个基本功能,如何生成缩略图以及如何显示缩略图都是该模块的组成部分,本文就如何显示缩略图从产品设计的角度去阐述. 从产品上来确认该功能如何去设计,最稳妥的方式就是模仿 ...

  5. 技术分享 | 浅谈 MySQL 的临时表和临时文件

    作者:姚嵩 爱可生南区交付服务部经理,爱好音乐,动漫,电影,游戏,人文,美食,旅游,还有其他.虽然都很菜,但毕竟是爱好. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请 ...

  6. 技术帖 浅谈屏幕比例 16比9和4比3的小秘密

    技术帖 浅谈屏幕比例 16比9和4比3的小秘密 随着平板电视的日益普及~  16:9 已经逐渐进入普通百姓的客厅 普及一下 关于屏幕比例的知识 解释一下 各种比例之间有何区别 结合本人的一点点 视频方 ...

  7. linux 易语言窗口程序_浅谈Linux入门的基本知识

    浅谈Linux入门的基本知识 图形模式与文字模式的切换方式Linux预设提供了六个命令窗口终端机让我们来登录. 默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1.tty2 - ...

  8. 计算机网络仿真技术概述,浅谈计算机网络仿真技术及其研究

    浅谈计算机网络仿真技术及其研究 来源:用户上传 作者: 摘要:在信息化和工业化相互促进的现代化进程中,计算机网络仿真技术将逐步深入到国民经济的各个领域,并将扮演越来越重要的角色.该文正是基于此背景,对 ...

  9. 计算机硬件维护技术论文,浅谈计算机硬件维护毕业论文

    浅谈计算机硬件维护毕业论文 (20页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 毕业论文课题浅谈计算机硬件维护系别计算机科学系专业计算机 ...

最新文章

  1. 把java当爱好_(观点)如果把爱好做成职业 把职业做成事业
  2. linux序列比对程序,序列比对软件简单使用教程
  3. 全自动安装 linux光盘,CentOS 7.1全自动安装光盘制作详解
  4. Java instead of 用法_我又不是你的谁--java instanceof操作符用法揭秘
  5. vue-router 动态路由匹配
  6. java nlpir_中科院NLPIR中文分词java版
  7. win10家庭版删除文件提示没有权限最简单的方式
  8. UI界面设计中的5个实用版面排版技巧
  9. 清空linux+history_1分钟学会的Linux小技巧,大大提高你的工作效率
  10. 程序员和美工是否可共存?
  11. js调用摄像头拍照上传图片
  12. UVM组件(以APB协议为例)——UVM
  13. mini LED光学仿真
  14. Word 替换为空值时不管用怎么办 出现[只设格式]导致替换无效怎么办
  15. 《微积分》的本质笔记
  16. 计算机语言栏在哪里,电脑里的输入法不见了,去哪儿找
  17. ai如何旋转画布_ai怎么让一个图形等比旋转
  18. 简单飞机模型静态/模态分析
  19. 消防工程师 第二篇 建筑防火 6.1 安全疏散
  20. 删除mysql中的函数

热门文章

  1. 如何精通python语言_精通Python自然语言处理
  2. Git diff ^M与无效修改的消除
  3. android intent 导航,Android 通过Intent调取导航
  4. 什么是懒加载,如何实现图片或列表懒加载?
  5. 今日,发改委明确表示,要加快5G、工业互联网、大数据中心等建设!
  6. IDEA中Lombok插件
  7. python 系列 03 - 基于scrapy框架的简单爬虫
  8. 解决CentOS无法识别网卡问题
  9. 2021年全球电动驻车制动系统收入大约9422.3百万美元,预计2028年达到19330百万美元
  10. 【算法】Candy 分发糖果