kernelpop 是一个用于在以下操作系统上执行自动化内核漏洞枚举和利用的框架:
Linux
Mac
它被设计为与 python 版本无关,意味着它应该同时适用于 python2 和 python3。

$ git clone https://github.com/spencerdodd/kernelpop
$ cd kernelpop
$ python kernelpop.py || python3 kernelpop.py
$ git clone https://github.com/spencerdodd/kernelpop
$ cd kernelpop
$ ./create_executable.sh
$ ./kernelpop
pyinstaller(步骤因构建系统而异)$ pyinstaller kernelpop.py --onefile$ cp dist/kernelpop .两种二进制构建步骤都应在项目根目录下创建一个名为 kernelpop 的二进制文件。
user@debian:~/Desktop/kernelpop$ python3 kernelpop.py
##########################
# welcome to kernelpop #
# #
# let's pop some kernels #
##########################
[*] 从底层操作系统获取发行版版本和发行版信息 (linuxdebian7)
[*] 从 'uname -a' 获取内核版本信息
[+] 内核(Linux debian 3.2.0-4-686-pae #1 SMP Debian 3.2.41-2 i686 GNU/Linux)被识别为:
[base]
type: linux
distro: linuxdebian7
version: 3.2.0-4
architecture: i686
[specific]
type: linux
distro: linuxdebian7
version: 3.2.41-2
architecture: i686
[*] 将内核与已知漏洞进行匹配
[+] 发现 11 个可能的漏洞利用程序!
[[ 发行版内核与漏洞利用程序匹配 ]]
CVE20165195_32 Dirty COW 竞争条件,32位系统下的root权限提升
[[ 发行版内核版本存在漏洞 ]]
CVE20144699 Linux 3.15.4 之前版本中的可利用竞争条件
CVE20143153 `futex_requeue` 漏洞(3.14.6 之前版本)允许权限提升
CVE20162384 `snd_usbmidi_create` 中的双重释放漏洞(需要物理接触)
CVE20140196 `n_tty_write` 漏洞(3.14.4 之前版本)允许权限提升到root
CVE20132094_semtex perf_swevent_init 本地 root 漏洞利用程序(32位)
CVE20176074 `net/dccp/input.c` 中的 `dccp_rcv_state_process` 错误处理结构体,可导致本地root提权
CVE20132094_32 perf_swevent_init 本地 root 漏洞利用程序(32位)
[[ 基础 Linux 内核存在漏洞 ]]
CVE20144014 `chmod` 限制绕过,允许用户在 3.14.8 之前版本中获得root权限
CVE20177308 `net/packet/af_packet.c` 中的 `packet_set_ring` 可通过精心构造的系统调用提升权限。
CVE20171000112 ip_ufo_append_data() 内存损坏缺陷可被利用以获取root权限。
在输出中,有几个类别。以下是每个类别的含义:
[[ 发行版内核与漏洞利用程序匹配 ]]
[[ 发行版内核版本存在漏洞 ]]
[[ 基础 Linux 内核存在漏洞 ]]
python2 或 python3
pyinstaller (如果您想构建二进制文件)
运行模式:
(默认模式) python3 kernelpop.py
(漏洞利用模式) python3 kernelpop.py -e {漏洞利用程序名称}
(转储源代码) python3 kernelpop.py -e {漏洞利用程序名称} -d
(uname模式) python3 kernelpop.py -u {uname -a 输出}
(交互模式) python3 kernelpop.py -i # 旧版选项(与uname模式相同)
其他:
(沙盒路径) -p {新路径}
(可解析输出文件) --digest json
默认模式处理宿主机内核的信息,并将其与程序已知的内核漏洞利用程序进行比较。然后输出一份潜在有用的漏洞及附带漏洞利用程序的列表。
-e {漏洞利用程序名称}
漏洞利用模式动态编译并在程序内运行漏洞利用程序的源代码,同时处理标准输入/输出交互。它也能捕获因短时尝试失败而产生的中断。请使用在默认模式下首次运行 kernelpop 枚举时出现的漏洞利用程序名称。
转储源代码(选项)-d
漏洞利用模式的一个修饰符。它会将指定漏洞利用程序的源文件转储到 PLAYGROUND_PATH(默认为 /tmp)下的相应文件中。这对于在目标主机上修改漏洞利用程序源代码,或者处理需要手动交互或硬编码值的漏洞利用程序非常有用。当从二进制文件运行时,尤其有用,因为您无法访问项目源代码(即漏洞利用程序源代码)。-u {uname -a 输出}
该选项允许您将 uname -a 命令的输出直接传递给程序,使其可集成到自动化脚本中或用于其他可预见的目的。取代了交互模式。
uname 输出而需要]-i {uname -a 输出}
交互模式允许您仅通过 uname -a 命令的输出进行枚举,这使其成为一个非常有用的宿主机端枚举工具。通过启动 kernelpop 并带上 -i 标志运行,然后在系统提示时传递 uname -a 的输出。这是一个遗留功能,已被 uname 模式取代,但由于 -u 不支持 Mac 枚举,因此仍保持支持。
PLAYGROUND 路径-p {新的 PLAYGROUND_PATH 目录}
-p 选项用于设置全局变量 PLAYGROUND_PATH 的值。这是所有漏洞利用程序源文件写入和漏洞利用程序编译的位置。默认设置为 /tmp。但是,您可以使用此修饰符将其设置为任何目录,以防您在 /tmp 中没有写入权限。
--digest json
该选项允许您将 kernelpop 运行的结果转储到一个可解析的 JSON 文件中,以便后续处理。目前我只实现了 json 转储功能,但如果有人需要,我会考虑开发 XML 版本。
添加更多漏洞利用程序!(src/to_add 目录,如果有人想开始处理其中一些,请随意!)
在漏洞影响范围比较中包含补丁级别
添加一种方法来覆盖检测到的设置,以防解析错误或存在对抗性设置
谷歌搜索: CVE-XXXX-XXXX "ubuntu"
点击 canonical 链接(https://people.canonical.com/~ubuntu-security/cve/2016/CVE-XXXX-XXXX.html)
点击 usn.ubuntu.com 上的所有相关公告并解析信息
获取补丁版本,用于填充每个版本对应的漏洞影响范围
谷歌搜索: CVE-XXXX-XXXX "debian"
security-tracker.debian.org 链接(https://security-tracker.debian.org/tracker/CVE-XXXX-XXXX)
谷歌搜索: CVE-XXXX-XXXX "mitre"
CVE-2017-1000379
CVE-2017-1000373
CVE-2017-1000372
CVE-2017-1000371
CVE-2017-1000370
CVE-2017-1000367
CVE-2017-1000112
CVE-2017-7308
CVE-2017-6074
CVE-2017-5123
CVE-2016-5195
CVE-2016-2384
CVE-2016-0728
https://github.com/SecWiki/linux-kernel-exploits
http://exploit-db.com/
https://github.com/lucyoa/kernel-exploits
https://github.com/SecWiki/windows-kernel-exploits
Debian
CVE-2015-1328
CVE-2014-4699
CVE-2014-4014
CVE-2014-3153
CVE-2014-0196
CVE-2014-0038
CVE-2013-2094
CVE-2010-4347
CVE-2010-2959
CVE-2009-1185