如何将我的代码注入进程空间?
这是一个相当的陈述/问题。它需要在所述进程空间中有一个“可利用”的代码区域。例如,Windows 目前正在尽可能将大多数 strcpy() 重写为 strncpy()。我说如果可能的话
因为并非所有使用 strcpy 的代码区域都可以成功转换为 strncpy。为什么?因为~@这个症结的区别如下所示;
strcpy($buffer, $copied);
或
strncpy($buffer, $copied, sizeof($copied));
这就是 strncpy 在现实世界场景中难以实施的原因。大多数strncpy 操作都必须安装一个“幻数”(sizeof() 运算符创建这个幻数)
作为编码人员,我们被教导使用硬编码值,例如严格遵守 char buffer[1024]; 是非常糟糕的编码实践。
但是 ~ 相比之下 - 使用 buffer[]=""; 或 buffer[1024]=""; 是漏洞利用的核心。但是,例如,如果我们将此代码更改为后者,我们会在系统中引入另一个漏洞...
char * buffer;
char * copied;
strcpy(buffer, copied);//overflow this right here...
或者这个:
int size = 1024;
char buffer[size];
char copied[size];
strncpy(buffer,copied, size);
这将阻止溢出,但会在 RAM 中引入一个可利用的区域,因为它的大小是可预测的并被结构化为 1024 个代码/数据块。
因此,例如,在程序的地址空间中寻找 strcpy 的原始发布者,如果存在 strcpy,将使该程序可被利用。
strcpy 比strncpy 更受程序员青睐的原因有很多。幻数、可变输入/输出数据大小……编程风格……等等……