一.初探栈溢出
1.1 在首先在文件夹里面创建一个c的程序 StackOF.c
内容如下图
#include <stdio.h>
#include <string.h>
int main()
{
puts("SO plz qive me your shellcode");
char buffer[256];
memset(buffer,0,256); #清除缓冲区数据
read(0,buffer,256); #输入
vul(buffer); #调用
return 0;
}
void vul(char *msg)
{
char buffer[64];
memcpy(buffer,msg,128);
return;
}
memset
: 内存初始化
buffer
: 缓冲一般指指针或者数组
vul
:函数的调用
strcpy
:
1 strcpy
只能复制字符串。
2 strcpy
不需要指定长度,它遇到被复制字符的串结束符"\0"才结束。
3 strcpy
不仅复制字符串内容,还会复制字符串的结束符。
1.2 在终端 输入vim StackOF.c
创建文件 使用gcc -c ./stackOF.c
完成编译。和1.3
中的编译是一个效果
1.3 gcc编译:终端输入gcc -m32 -no-pie -fno-stack-protector -z execstack -o pwnme stackOF.c
将生成一个pwnme
的组件

1.4调试 在终端输入
gdb pwnme
1.5在vul函数下断点:
breakpoint vul
或 b vul
后进入汇编的窗口如下命令

1.6运行函数
r或者run
都也以 稍等一会会 输入ni
单步进入找到函数的入栈口,和出栈口。计算栈的空间的大小。


1.7使用命令查看汇编代码的地址
i r edx
查看入栈口的初地址和结束地址 用高字节-低字节得出 76
0xffffd110
2.buffer的终止地址 =
0xffffd15c
buffer的差值为
76
二. 分析数据
注:ldd +程序
查看文件的偏移地址是否一直在发生变化
1.加一条命令关闭系统的的地址随机化命令
echo 0 > /proc/sys/kernel/randomize_va_space
2.在终端运行pwnme
文件试试

3.查看漏洞开启的缓冲策略

三.构建填充数据
思路;当客户输入字符串,当字符串超出给定的空间就发生,数据溢出。
我们可以可以构建一个数据段,让我们想要的数据安全的执行下来,libc文件
就是我们需要查找的构建数据重要的参数。
看看我偷瞄的图 嘻嘻

构建完成如下
图片.png
根据图我们可以知道,我们需要构建的一个可以填充的数据流
注;buffer=填充字节+返回地址+shellcode
四查找填充的数据的字节大小
注:首先引入libc
文件,这是c语言在编译的是候生成的一个内置文件
1.怎么找到libc文件?
注:先编译-下断点-运行-查找libc
文件的位置
2.gdb
一种编译方法


网友评论