Smb
確定我具有讀取和/或寫入權限的 SMB 共享
對於一系列目標 (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