缓冲区溢出漏洞调试与分析

本文详细介绍了如何利用war-ftpd 1.65的缓冲区溢出漏洞进行调试分析,通过发送特定长度的用户名触发溢出,控制EIP寄存器执行shellcode,最终实现执行计算器功能。实验涉及Immunity Debugger、shellcode构造、JMP ESP指令定位等技术,旨在理解缓冲区溢出原理及防范措施。
摘要由CSDN通过智能技术生成

预备知识

war-ftpd 1.65存在缓冲区溢出漏洞,当登录时用户名过长时就会发生缓冲区溢出,程序进而崩溃。本实验正是利用这一点使用调试工具cdb找出溢出时相应寄存器记录的地址,通过利用shellcode构造用户名字符串,使得war-ftpd程序接收此用户名时发生溢出进而执行shellcode,达到攻击目的。

实验目的

1)掌握缓冲区溢出原理;
2)掌握常用的缓冲区溢出方法;
3)理解缓冲区溢出的危害性;
4)掌握防范和避免缓冲区溢出攻击的方法。

实验环境

在这里插入图片描述
操作系统:Windows XP(sp3)
溢出对象:war-ftpd 1.65
调试工具:Ollydbg、Immunity Debugger、Windbg、CDB(四种调试工具任你选择)
编程语言:Python
软件地址:桌面
shellcode请在实验机内下载使用:http://tools.hetianlab.com/tools/shellcode.rar

实验步骤一

首先向war-ftpd发送1000字节的用户名,且字符串是不重复的,触发war-ftpd溢出漏洞,致使其崩溃。此时查看cdb调试器信息,EIP寄存器的信息即为溢出时RET中的地址,而此地址已被用户名字符串中的某4个字节覆盖。因此只需定位EIP的内容在1000字节字符串中的位置即可。
考虑将RET位置内容指向的指令为“JMP ESP”,而“JMP ESP”指令地址为(0x7ffa4512),因此将其替换到先前定位到的1000字节覆盖RET的位置,程序崩溃时就会执行JMP ESP指令了。接下来找到ESP内容在1000字节字符串中的位置,将其位置替换为shellcode,这样构造的登录用户名能达到溢出执行shellcode的攻击效果。
本实验选用的shellcode执行后的功能是在系统运行计算器。
1.在桌面war-ftpd文件夹启动war-ftpd程序,利用上述四种调试器之一(功能相同,看个人习惯,本次实验我采用了Immunity Debugger)将其挂起:
在这里插入图片描述
利用Immunity Debugger调试器将其挂起:
在这里插入图片描述
选中附加进程选项,找到var-ftpd这个进程,并将其挂起。
在这里插入图片描述
在这里插入图片描述
2.溢出时我们首先要确认junkcode()的大小,即在多大的字节小程序会产生溢出。
我们使用Immunity Debugger的mona插件来生成1000个字节:
在这里插入图片描述
!mona pattern_create 1000命令执行后会在这个目下C:\Program Files\Immunity Inc\Immunity Debugger生成pattern.txt,里面存放了1000 bytes的junkcode。
现在我利用python编写一个Socket程序将这些字节赋值给username段,发送给var-ftpd使之溢出。

#在这里我用python写了一个简单的程序,当然您也可以使用自己所熟悉的语言。#
#coding:utf-8
import socket
#生成的1000个字节
pattern = 'Aa0Aa1Aa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值