c语言 - 缓冲区溢出,出现指针问题



我正在尝试找出此缓冲区溢出漏洞。任何指针都会有所帮助。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
typedef struct node_t {
int x;
char y;
float z;
} node_p;
void unsafe() {
int read_char;
int other_value = 0xFFFF;
int* protector = (int *)malloc(sizeof(node_p)*33);
char buffer[24];
printf("Input string):n");
read(0, buffer, 1000);
read_char = strlen(buffer);
if (*(&protector + other_value) == 0xbadf00d) {
if (read_char > 24) {
printf("ntoo many char!n");
exit(-1);
} else {
printf("exploit accessed");
}
}
}
int main(int argc, char* argv[]){
unsafe();
return 0;
}

在向保护器添加其他值后,我想我得到了保护器的地址溢出0xBA5F015 如何处理这个问题

检查下面的代码,看看它是否有帮助。重点是badf00d是现有代码(漏洞利用)中的触发器,恶意程序是通过read调用加载的。

通常,目标是发现other_value的正确值,并对输入进行模糊处理以发现read中的漏洞。

读取输入是漏洞利用插入恶意代码的地方。 1000 字节对于只有 24 个字节的buffer分配的本地堆来说太多了。

请注意,将0xffff添加到protector会使地址远离漏洞利用触发器存在且漏洞利用想要执行的after_buffer。该漏洞希望在触发地址有一些特定的值badf00d

从这里开始的几个可能的结果: 知道值存在可以确认,当函数返回时,恶意代码将控制程序计数器。

知道值存在可以确认可以调用某些触发器来加载恶意代码。

一旦执行被badf00d重定向,堆栈上的任何代码都可以执行。

read_char=0x0c999c
other_value=0x0c9998
protector=0x0c9990
buffer=0x0c99a0
after_buffer=0x0c998f
protector+offset=0x149988
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
typedef struct node_t {
int x;
char y;
float z;
} node_p;
void unsafe() {
int read_char;
int other_value = 0xFFFF;
int* protector = (int *)malloc(sizeof(node_p)*33);
char buffer[24];
char after_buffer;
printf("   read_char=%pn", &read_char);
printf(" other_value=%pn", &other_value);
printf("   protector=%pn", &protector);
printf("      buffer=%pn", &buffer);
printf("after_buffer=%pn", &after_buffer);
printf("n");
printf("protector+offset=%pn", (&protector + other_value) );
return;
}
int main(int argc, char* argv[]){
unsafe();
return 0;
}

相关内容

  • 没有找到相关文章

最新更新