今天看一个软件的更新时 取的http头信息中的Content-length+1 作为内存分配,晚上测试了下 发现可以单独的
更改http 头中的Content-length长度信息为0xffffffff。这样当长度+1时,即可导致分配0字节内存(实际上是8字节)。
后面在用InternetReadFile时即可导致堆栈溢出。(由于这个软件特殊 比较难利用) 还是蛮高兴的。。
结果:回来测试发现通过HttpQueryInfo获取长度是可以变成0xffffffff,但是取得长度之后 这个软件用了_wtol来进行格式下
HttpQueryInfoW(v6, 5u, &Buffer, &dwBufferLength, 0);
v8 = _wtol((const wchar_t *)&Buffer);
测试突然发现这个buffer里面的数值超过2147483647(0x7fffffff) 就会溢出的 ,比2147483647这个数更大的话之后导致_wtol的结果总是0x7fffffff.
0x7fffffff+1=0x80000000 啊 只会导致堆分配失败。。软件crash掉。。。。我了个去