Smb

確定我具有讀取和/或寫入權限的 SMB 共享

  • June 6, 2017

對於一系列目標 (IP),我想確定哪些 SMB 共享我的帳戶無權訪問,它具有讀取訪問權限,以及它具有讀/寫訪問權限。

目前我正在使用 smbclient。我首先執行的命令是

smbclient -L [targetIP] -U [user] -p 445

這給了我一份股票清單。例如;

       Sharename       Type      Comment
       ---------       ----      -------
       ADMIN$          Disk      Remote Admin
       C$              Disk      Default share
       IPC$            IPC       Remote IPC
       print$          Disk      Printer Drivers
       MySecrets       Disk

然後我可以使用此命令連接到文件共享

smbclient //[target]/[name_of_share_from_list] -U [user] -p 445

這會導致 SMB 提示。從我輸入的提示中ls,如果我看到我知道我有讀取權限的文件。我猜我必須推送一個文件以查看我是否具有寫訪問權限。

這很乏味。如何自動執行此操作,以便對於給定的目標列表,我獲得所有共享的列表,以及我的帳戶對它們的訪問級別?

你已經完成了很多工作。閱讀手冊頁smbclient會為您提供-c <command>參數,該參數可用於直接而不是互動地提供一個或多個命令。

#!/bin/bash
username="DOMAIN\\USER"    # Double backslash
password="PASSWORD"        # For demonstration purposes only
hostname="TARGET_HOST"     # SMB hostname of target

cd "${TMPDIR:-/tmp}"
touch tmp_$$.tmp           # Required locally to copy to target

smbclient -L "$hostname" -g -A <( echo "username=$username"; echo "password=$password" ) 2>/dev/null |
   awk -F'|' '$1 == "Disk" {print $2}' |
   while IFS= read -r share
   do
       echo "Checking root of share '$share'"

       if smbclient "//$hostname/$share/" "$password" -U "$username" -c "dir" >/dev/null 2>&1
       then
           status=READ

           # Try uprating to read/write
           if smbclient "//$hostname/$share/" "$password" -U "$username" -c "put tmp_$$.tmp ; rm tmp_$$.tmp" >/dev/null 2>&1
           then
               status=WRITE
           fi
       else
           status=NONE
       fi

       case "$status" in
           READ) echo "Well, $username has read access" ;;
           WRITE) echo "Yes, $username has write access" ;;
           *) echo "No, $username has no access" ;;
       esac
   done

rm -f tmp_$$.tmp

引用自:https://unix.stackexchange.com/questions/367321