可以看到在接受到数据后,查找strstr(Str, "Transfer-Encoding: chunked"),然后根据数据格式,查找长度字段,调用v9 = strtol((const char *)&v18, 0, 0x10u)获取长度,并未校验,如果长度字符串为-1,最终if ( (signed int)v9 > (signed int)(v16 - 1) )条件不成立,因此strncpy(&Src, v15, v9)拷贝的字节数为0xFFFFFFFF,最终导致拒绝服务。
同时还发现一个小bug。
其中for循环处理过程存在bug,能够覆盖返回地址的一个字节。当v15的数据为'\x60' * 1023 + 'A' + '\x60'时就能触发此bug