So,
Recently I have spent alot of time on Local Lockdown testing and 98 times out of a 100 they allow VBScript to be run. Very bad mistake.
With VBScript it is possible to do lots of wonderful this that a normal locked down user wouldn’t, i.e.
- Access Registry
- Execute Programs
- Get File Permissions
- Query LDAP
Here is a few cool ways I was able to leverage VBScript to get me more information that I should have had access to.
LDAP Query that Returns Excel Doc:
On Error Resume Next
Counter = 2
Worksheets("Sheet1").cells(1, 1).Value = "Username"
Worksheets("Sheet1").cells(1, 2).Value = "Group"
Const E_ADS_RPOPERTY_NOT_FOUND = &H8000500D
Set objou = GetObject("LDAP://ou=users,dc=microsoft,dc=com")
objou.Filter = Array("user")
For Each objUser in objou
Worksheets("Sheet1").cells(Counter, 1).Value = (objUser.cn)
arrMemberOf = objUser.GetEx("memberOf")
If Err.Number <> E_ADS_RPOPERTY_NOT_FOUND Then
For Each Group In arrMemberOf
Worksheets("Sheet1").cells(Counter, 1).Value = (objUser.cn)
Worksheets("Sheet1").cells(Counter, 2).Value = (vbTab & Group)
Counter = Counter + 1
Next
Else
Worksheets("Sheet1").cells(Counter, 1).Value = (objUser.cn)
Worksheets("Sheet1").cells(Counter, 2).Value = (vbTab & "attribnotset")
Counter = Counter + 1
Err.Clear
End If
Next
Check Service Permissions: (still in working progress)
On Error Resume Next
objFileName = "services.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile((objFileName))
Set objShell = CreateObject("WScript.Shell")
Set services = CreateObject("System.Collections.ArrayList")
arrComputers = Array("localhost")
For Each strComputer In arrComputers
WScript.Echo
WScript.Echo "=========================================="
WScript.Echo "Computer: " & strComputer
WScript.Echo "=========================================="
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Service")
For Each objItem In colItems
pat = ".*.exe"
strFileName = objItem.PathName
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = ".*.exe"
Set myMatches = myRegExp.Execute(strFileName)
For Each myMatch in myMatches
services.Add myMatch.Value
Next
Next
Next
For Each service in services
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = chr(34)
serfor = myRegExp.Replace(service, "")
Set oExec = objShell.Exec("cacls " & chr(34) & serfor & chr(34))
Do While Not oExec.StdOut.AtEndOfStream
str = oExec.StdOut.ReadAll
objFile.WriteLine(str)
Loop
Set oExec = nothing
Next
Reading Registry Keys:
Dim Shell, Reg
'RegKey = "HKLM\Software\test\testkey"
RegKey = UserInput( "Enter Registry Path:" )
Set Shell = CreateObject("WScript.Shell")
Reg = Shell.RegRead(RegKey)
MsgBox Reg
Running an Application With Parameters (think when no command prompt is available)
Set Shell = CreateObject("WScript.Shell")
Shell.Run("""C:\windows\system32\cmd.exe"" /c net users")
Nothing too great but handy to have when you need them 🙂