VBS Script สำหรับ List Share Folder และ Permission

0
1183

สวัสดีครับ  วันก่อนได้ Script มีประโยชน์ และจำเป็นต้องใช้สำหรับฝ่ายงาน Security / Administrator คือ

VBS Script สำหรับ List Share Folder และ Permission ครับ ผมไม่ได้ตรวจสอบที่มา ว่าได้จาก Source ไหน หากทราบแหล่งคนเขียนช่วยแจ้งด้วยครับจะได้แจ้ง Credit ไว้ให้

1. ผม Save Code ด้านล่างโดยตั้งชื่อไฟล์ว่า listshare.vbs ครับ

2. จากนั้นใช้คำสั่ง cscript /nologo listshare.vbs > listshare.txt  (เพื่อให้มัน Export Value ที่ตรวจพบออกมาเป็นไฟล์ .txt ครับ)

 

จากการทดลองแล้วมันใช้ได้ดีเลยทีเดียวครับ เลยเอามาแปะฝากให้เพื่อน ๆ พี่น้อง Admin ไว้ใช้ตรวจสอบเครื่องดูครับ

 

VBS Script สำหรับ List Share Folder และ Permission

ตัวอย่างนี้ผมเจอว่า Share Drive อันนึงบนเครื่อง Server มีการเปิด Share เป็น Everyone = Full Control ด้วยครับ

อันตรายมาก ๆ หากเปิด Share แบบนี้

ตัว Script นี้ช่วยตรวจเช็คได้ครับ ลองเอาไปใช้ดู

 

ขอบคุณคนเขียน Script (ไม่ใช่ผมเขียนนะครับ)

VBS Script สำหรับ List Share Folder และ Permission

 

Copy Code ในตารางด้านล่างไปใส่ Notepad แล้ว Save เป็นไฟล์ .vbs ได้เลยครับ วิธีใช้คำสั่งดูจากด้านบน

Dim objReturnCodes : Set objReturnCodes = CreateObject(“Scripting.Dictionary”)
Const SUCCESS = 0
Const ACCESS_DENIED = 2
Const UNKNOWN_FAILURE = 8
Const PRIVILEGE_MISSING = 9
Const INVALID_PARAMETER = 21

‘ Security Descriptor Control Flags

Dim objControlFlags : Set objControlFlags = CreateObject(“Scripting.Dictionary”)
objControlFlags.Add 32768, “SelfRelative”
objControlFlags.Add 16384, “RMControlValid”
objControlFlags.Add 8192, “SystemAclProtected”
objControlFlags.Add 4096, “DiscretionaryAclProtected”
objControlFlags.Add 2048, “SystemAclAutoInherited”
objControlFlags.Add 1024, “DiscretionaryAclAutoInherited”
objControlFlags.Add 512, “SystemAclAutoInheritRequired”
objControlFlags.Add 256, “DiscretionaryAclAutoInheritRequired”
objControlFlags.Add 32, “SystemAclDefaulted”
objControlFlags.Add 16, “SystemAclPresent”
objControlFlags.Add 8, “DiscretionaryAclDefaulted”
objControlFlags.Add 4, “DiscretionaryAclPresent”
objControlFlags.Add 2, “GroupDefaulted”
objControlFlags.Add 1, “OwnerDefaulted”

‘ ACE Access Right

Dim objAccessRights : Set objAccessRights = CreateObject(“Scripting.Dictionary”)
objAccessRights.Add 2032127, “FullControl”
objAccessRights.Add 1048576, “Synchronize”
objAccessRights.Add 524288, “TakeOwnership”
objAccessRights.Add 262144, “ChangePermissions”
objAccessRights.Add 197055, “Modify”
objAccessRights.Add 131241, “ReadAndExecute”
objAccessRights.Add 131209, “Read”
objAccessRights.Add 131072, “ReadPermissions”
objAccessRights.Add 65536, “Delete”
objAccessRights.Add 278, “Write”
objAccessRights.Add 256, “WriteAttributes”
objAccessRights.Add 128, “ReadAttributes”
objAccessRights.Add 64, “DeleteSubdirectoriesAndFiles”
objAccessRights.Add 32, “ExecuteFile”
objAccessRights.Add 16, “WriteExtendedAttributes”
objAccessRights.Add 8, “ReadExtendedAttributes”
objAccessRights.Add 4, “AppendData”
objAccessRights.Add 2, “CreateFiles”
objAccessRights.Add 1, “ReadData”

‘ ACE Types

Dim objAceTypes : Set objAceTypes = CreateObject(“Scripting.Dictionary”)
objAceTypes.Add 0, “Allow”
objAceTypes.Add 1, “Deny”
objAceTypes.Add 2, “Audit”

‘ ACE Flags

Dim objAceFlags : Set objAceFlags = CreateObject(“Scripting.Dictionary”)
objAceFlags.Add 128, “FailedAccess”
objAceFlags.Add 64, “SuccessfulAccess”
objAceFlags.Add 16, “Inherited”
objAceFlags.Add 8, “InheritOnly”
objAceFlags.Add 4, “NoPropagateInherit”
objAceFlags.Add 2, “ContainerInherit”
objAceFlags.Add 1, “ObjectInherit”

Sub ReadNTFSSecurity(objWMI, strPath)
WScript.Echo ”  Displaying NTFS Security”

Dim objSecuritySettings : Set objSecuritySettings = _
objWMI.Get(“Win32_LogicalFileSecuritySetting='” & strPath & “‘”)
Dim objSD : objSecuritySettings.GetSecurityDescriptor objSD

Dim strDomain : strDomain = objSD.Owner.Domain
If strDomain <> “” Then strDomain = strDomain & “\”
WScript.Echo ”  Owner: ” & strDomain & objSD.Owner.Name
WScript.Echo ”  Owner SID: ” & objSD.Owner.SIDString

WScript.Echo ”  Basic Control Flags Value: ” & objSD.ControlFlags
WScript.Echo ”  Control Flags:”

DisplayValues objSD.ControlFlags, objControlFlags

WScript.Echo

Dim objACE

‘ Display the DACL

WScript.Echo ”  Discretionary Access Control List:”
For Each objACE in objSD.DACL
DisplayACE objACE
Next

‘ Display the SACL (if there is one)

If Not IsNull(objSD.SACL) Then
WScript.Echo ”  System Access Control List:”
For Each objACE in objSD.SACL
DisplayACE objACE
Next
End If
End Sub

Sub ReadShareSecurity(objWMI, strName)
WScript.Echo ”  Displaying Share Security”

Dim objSecuritySettings : Set objSecuritySettings = _
objWMI.Get(“Win32_LogicalShareSecuritySetting='” & strName & “‘”)

Dim objSD : objSecuritySettings.GetSecurityDescriptor objSD

WScript.Echo ”  Basic Control Flags Value: ” & objSD.ControlFlags
WScript.Echo ”  Control Flags:”

DisplayValues objSD.ControlFlags, objControlFlags

WScript.Echo

Dim objACE

‘ Display the DACL

WScript.Echo ”  Discretionary Access Control List:”
For Each objACE in objSD.DACL
DisplayACE objACE
Next
End Sub

Sub DisplayValues(dblValues, objSecurityEnumeration)

Dim dblValue
For Each dblValue in objSecurityEnumeration
If dblValues >= dblValue Then
WScript.Echo ”      ” & objSecurityEnumeration(dblValue)
dblValues = dblValues – dblValue
End If
Next
End Sub

Sub DisplayACE(objACE)

Dim strDomain : strDomain = objAce.Trustee.Domain
If strDomain <> “” Then strDomain = strDomain & “\”
WScript.Echo ”    Trustee: ” & UCase(strDomain & objAce.Trustee.Name)
WScript.Echo ”    SID: ” & objAce.Trustee.SIDString

WScript.Echo ”    Basic Access Mask Value: ” & objACE.AccessMask

WScript.Echo ”    Access Rights: ”
DisplayValues objACE.AccessMask, objAccessRights

WScript.Echo ”    Type: ” & objAceTypes(objACE.AceType)

WScript.Echo ”    Basic ACE Flags Value: ” & objACE.AceFlags

WScript.Echo ”    ACE Flags: ”
DisplayValues objACE.AceFlags, objAceFlags
WScript.Echo
End Sub


‘ Main Code

‘ The system to execute this script against
Dim strComputer : strComputer = “.”

‘ Connect to WMI
Dim objWMI : Set objWMI = GetObject(“winmgmts:\\” & strComputer & “\root\CIMV2”)

‘ Return all of the shares (Type = 0 means File Shares only, exclude
‘ are Administrative, Printer, etc)
Dim colItems : Set colItems = _
objWMI.ExecQuery(“SELECT * FROM Win32_Share WHERE Type=’0′”, “WQL”, _
WBEM_RETURN_IMMEDIATELY + WBEM_FORWARD_ONLY)

Dim objItem
For Each objItem in colItems
WScript.Echo
WScript.Echo “Security for ” & objItem.Path & _
” (Shared as ” & objItem.Name & “)”

ReadNTFSSecurity objWMI, objItem.Path
ReadShareSecurity objWMI, objItem.Name
Next

strComputer = “.”
Set objWMIService = GetObject(“winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2”)

Set colShares = objWMIService.ExecQuery(“Select * from Win32_Share”)

For each objShare in colShares
Wscript.Echo “Allow Maximum: ” & objShare.AllowMaximum
Wscript.Echo “Caption: ” & objShare.Caption
Wscript.Echo “Maximum Allowed: ” & objShare.MaximumAllowed
Wscript.Echo “Name: ” & objShare.Name
Wscript.Echo “Path: ” & objShare.Path
Wscript.Echo “Type: ” & objShare.Type
Next