binaryCVE-2020-8816: Pi-hole中的远程代码执行漏洞分析及复现


北京联盟_本文原题:CVE-2020-8816: Pi-hole中的远程代码执行漏洞分析及复现
CVE-2020-8816是Pi-hole软件中的一个远程代码执行漏洞 , Pi-hole是一个用于内容过滤的DNS服务器 , 也提供DHCP服务 。 这个软件提供一个Web界面 , 漏洞就存在于实现Web界面的源码中 , 影响版本在v4.3.2及其之前 。
环境搭建(先看下面的“踩到的坑”)
环境:virtualbox6.1 + ubuntu18.04 + pi-hole v4.3.2
相关IP:
虚拟机NAT网卡 , IP地址为:10.0.2.15
虚拟机桥接网卡 , IP地址为:192.168.0.107
主机IP地址为:192.168.0.105
1、下载Pi-hole的安装脚本 mkdir pi-hole cd pi-hole wget -O basic-install.sh https://install.pi-hole.net 2、修改脚本文件 , 下载v4.3.2版本 我一开始直接下载的v4.3.2的源码 , 但是安装过后还是发现最新版本 , 最后决定直接修改官方提供的安装脚本 。
注意要使用最新版本的安装脚本 , v4.3.2中的安装脚本虽然也可以使用 , 但是修改的内容更多 , 这里不再赘述 。
找到make_repo函数中的下述代码:
# Clone the repo and return the return code from this command git clone -q --depth 20 "${remoteRepo}" "${directory}" &> /dev/null || return $?
修改为:
# Clone the repo and return the return code from this command git clone -q --depth 20 --branch v4.3.2 "${remoteRepo}" "${directory}" &> /dev/null || return $?
系统在第一次安装时会调用make_repo函数 , 从github上下载pihole以及web interface的代码 , 这里指定下载v4.3.2版本 。
如果不是第一次安装 , 系统会调用update_repo函数 , 但是一般安装一次就能成功 , 如果需要再次安装 , 可以删除在make_repo中创建的文件夹 , 避免进入update_repo函数 。
3、执行脚本&安装成功 sudo bash basic-install.sh
因为我这里只是想要复现漏洞 , 不需要考虑软件的功能问题 , 所以基本选择默认选项就可以 。
注意这一步只选择一项 , 避免浪费时间 , 因为后面会连接这些站点下载屏蔽广告列表 。
binaryCVE-2020-8816: Pi-hole中的远程代码执行漏洞分析及复现
本文插图

安装成功 , 显示以下界面:
binaryCVE-2020-8816: Pi-hole中的远程代码执行漏洞分析及复现
本文插图

打开http://192.168.1.107/admin , 可以看到页面下方的版本号 , 正是我们需要的版本:
binaryCVE-2020-8816: Pi-hole中的远程代码执行漏洞分析及复现
本文插图

踩到的坑 1、ubuntu版本问题
这个问题我估计大多数人应该遇不到 , 因为我的virtualbox里面当时刚好新装了一个ubuntu12.04 , 是一个干净的系统 , 我就直接用了这个版本的ubuntu , 结果安装的时候发现找不到Pi-hole的一些依赖包 , 最终放弃 , 转战ubuntu18.04 。
2、SSL连接问题
错误信息:
OpenSSL SSL_connect: SSL_ERROR_SYSCALL……
省略号部分我没有记住 , 但是如果遇到同样的错误应该能认出来 。
解决办法:
执行以下命令
git config --global http.sslVerify false 3、FTL下载失败
错误信息:
[i] Downloading and Installing FTL... curl: (56) OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 [?] Downloading and Installing FTL Error: URL https://github.com/pi-hole/FTL/releases/download/v4.3.1/pihole-FTL-linux-x86_64 not found [?] FTL Engine not installed
解决办法:
这个问题是由于网络原因导致的 , 如果你能 , 下面的内容可以略过 , 但是由于个人原因 , 我的设置没有成功 , 所以需要在主机把文件下载下来 , 然后复制到正确的位置 , 并对脚本进行适当修改 。


推荐阅读