缓冲区溢出实验proj1

本文详细介绍了六个缓冲区溢出实验,包括分析攻击程序、构建shellcode和payload,涉及溢出机制、shellcode插入及利用,展示了如何通过溢出影响程序执行流程以获取shell。
摘要由CSDN通过智能技术生成

任务一:

1.攻击程序分析

在这里插入图片描述
缓冲区溢出发生在此函数中的strcpy函数。根据缓冲区溢出的常见攻击方法可知,我们可以构造字符串覆盖其返回地址。查看目标程序堆栈情况如下:
在这里插入图片描述
我们查看的是foo程序,由于foo程序首先开辟buf数组空间,为256字节空间,然后则调用bar函数。
在这里插入图片描述
即将调用bar函数,我们可以通过ebp和esp看出,buf数组的起始位置应为0xbffffc4c,大小为256字节,查看内存:
在这里插入图片描述
红框部分为当前buf中的内容(未初始化)。

2.shellcode构建

使用例子程序提供的shellcode

3.Exploit中的payload构建

在熟悉了攻击程序后我们可以开始构建payload。首先我们需要找到shellcode在内存中的位置,使用find指令:
在这里插入图片描述
地址为0xbffffee9,于是我们构造payload。
Payload =shellcode + ’\x90’ (前两项共260位)+ (shellcode地址)
在这里插入图片描述
结果如下,成功获得shell:
在这里插入图片描述

任务二:

1.攻击程序分析

在这里插入图片描述
这一次的溢出代码多出了一个字符串的"大小检测"。为什么要加双引号呢,是因为他的检测并不严谨。从14行的循环条件可以看到,他其实还是允许我们溢出一个字节的。
溢出一个字节不能像实验一那样直接对返回地址进行修改,但我们可以利用ebp。根据栈的知识可以知道,在内存中,buf的下部就是ebp。溢出一个字节可以改变ebp的最低位,也就是说我们可以将ebp指向一个我们能控制的区域,也就是buf数组中。

2.shellcode构建

使用例子程序提供的shellcode

3.Exploit中的payload构建

有了以上思路我们开始构建payload,首先我们肯定是需要一个201字节的数组payload。
在这里插入图片描述
首先查看buf数组的地址范围:0xbffffcb8 - 0xbffffd80 共200字节。
此时,ebp刚刚入栈,值为:
在这里插入图片描述
我们尝试通过溢出将ebp改为0xbffffd00,这个地址是在buf当中的。
于是:
在这里插入图片描述
接下来我们需要思考如何在buf中嵌套shellcode的起始地址&#

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenLayers是一个开源的JavaScript库,用于在Web上显示交互式地图。OpenLayers提供了许多功能,包括缓冲区分析。缓冲区分析是一种地理空间分析方法,用于确定给定点、线或面周围一定距离内的区域。在OpenLayers中,可以使用Turf.js库来进行缓冲区分析。Turf.js是一个JavaScript库,用于进行地理空间分析和操作。它提供了许多功能,包括缓冲区分析、距离计算、面积计算等等。 要在OpenLayers中进行缓冲区分析,您需要使用Turf.js库。首先,您需要将OpenLayers图形转换为Turf.js图形,然后使用Turf.js库中的缓冲区分析函数来创建缓冲区。最后,您可以将Turf.js图形转换回OpenLayers图形,并将其添加到地图上。 以下是一个使用OpenLayers和Turf.js进行缓冲区分析的示例代码: ```javascript // 创建OpenLayers地图 var map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }) ], view: new ol.View({ center: ol.proj.fromLonLat([37.41,8.82]), zoom: 4 }) }); // 创建OpenLayers图形 var circle = new ol.geom.Circle(ol.proj.fromLonLat([37.41, 8.82]), 100000); // 将OpenLayers图形转换为Turf.js图形 var turfCircle = turf.circle(circle.getCenter(), circle.getRadius(), {steps: 64, units: 'meters'}); // 使用Turf.js库中的缓冲区分析函数创建缓冲区 var buffered = turf.buffer(turfCircle, 10, {units: 'meters'}); // 将Turf.js图形转换回OpenLayers图形 var bufferedCircle = new ol.geom.Polygon(buffered.geometry.coordinates); // 创建OpenLayers要素并将其添加到地图上 var feature = new ol.Feature(bufferedCircle); var vectorSource = new ol.source.Vector({ features: [feature] }); var vectorLayer = new ol.layer.Vector({ source: vectorSource }); map.addLayer(vectorLayer); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值