gpt4 book ai didi

c - 如何利用对 updateConfigParams() 函数的缓冲区溢出攻击来禁用该程序?

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:56 25 4
gpt4 key购买 nike

考虑以下功能

void updateConfigParams( void ) {
char buffer [512];
int i = 0;

while (( c = readFromWireless ()) != NULL)
{
buffer [ i ] = c;
i += 1;
}
writeConfigParams ( buffer );
}

如何利用对 updateConfigParams() 函数的缓冲区溢出攻击来禁用程序?

最佳答案

在例子中i是一个整数,假设它占用 4 个字节。

假设你的内存是这样的:

    0          1                  511       512    513    514    515   ...
buffer[0] | buffer[1] | ... | buffer[511] | i[0] | i[1] | i[2] | i[3] | ...

在 while 循环中,您在位置 buffer[i] 处向内存写入内容。 .

while (( c = readFromWireless ()) != 0) 
{
buffer [ i ] = c;
i += 1;
}

当您向 buffer[511] 写入内容时(第 512 次迭代)您的内存如下所示:

   0        1              511     512    513    514    515
value0 | value1 | ... | value511 | 0xff | 0x01 | 0x00 | 0x00 | ...

请注意,索引 512 和 513 表示变量 i 的值: i = 511

如果您收到超过 512 个字节,您将覆盖变量 i ,因此在第 513 次迭代中,您将写入 i[0] 的内存(索引 512)。

   0        1              511        512     513    514    515
value0 | value1 | ... | value511 | value512 | 0x01 | 0x00 | 0x00 | ...

假设value5120xff所以我们不改变任何东西。

在第 514 次迭代中,您将覆盖 i[1] 位置的内存(索引 513)。

   0        1              511        512       513      514    515
value0 | value1 | ... | value511 | value512 | value513 | 0x00 | 0x00 | ...

在第 515 次迭代中,您将编写 value514为了纪念buffer[i] .但是现在i = (value513 << 8) | value512所以你可能会尝试写入你的进程没有写入权限的内存区域。

关于c - 如何利用对 updateConfigParams() 函数的缓冲区溢出攻击来禁用该程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40525775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com