漏洞成因
攻击过程
char *LC = calloc(0x3000,1);
strcpy(LC, "LC_ALL=C.UTF-8@");
memset(LC+15, 'C', size);
envp[envp_pos++] = LC;
简单讲,本身entry 和service是连在一起的,但是我们提前构造了0xc0的chunk 。 使entry分配到了oxc0的块上,而service的分配由于oxc0的块用完了会分割原始的chunk. 造成usr_arg和service内存上来连续,溢出user_arg后,service->name被改写,最终了攻击代码执行。
参考:https://www.ics-cert.org.cn/portal/page/122/d2512b9a175b49518f12e7ed97f4aa50.html