Một độc giả đã liên hệ với chúng tôi hỏi một câu hỏi đơn giản: làm thế nào bạn có thể liệt kê các tài khoản quản trị viên cục bộ trên máy tính điều khiển xa?. Kịch bản là độc giả có nhiề
Trang 1Quản lý mạng Windows bằng Script - Phần 11: Các thủ thuật kịch
bản khác
Trong phần trước của loạt bài này chúng ta đã biết hai thủ thuật cho kịch bản điều khiển xa Trong phần trước chúng ta đã xem thêm hai mẹo kịch bản nữa Mẹo đầu tiên, thủ thuật kịch bản điều khiển xa từ một độc giả, mẹo thứ hai, một ví dụ thế giới thực được dùng để thể hiện cách sử dụng the Windows Management Instrumentation Command-line (WMIC)
Thủ thuật 1: Thủ thuật “runas” nhưng với sự mã hóa
Thủ thuật kịch bản đầu tiên được đệ trình bởi độc giả Steven Beard đến từ Anh Steve đưa ra một cách hoàn toàn khác để gọi lệnh “runas” từ bên trong kịch bản và điều này có thể hữu dụng trong các môi trường hoạt động kinh doanh như thế nào Hãy lắng nghe những gì mà Steve đã nói:
Tôi đã sử dụng vb script trong nhiều năm qua để quản trị miền Windows của tôi nhưng chưa bao giờ hiểu hết về WMI mà chỉ là những gì tôi thực sự cần thiết Mặc dù phần cuối cùng của các bạn quan tâm đến hàm runas là rất tốt, nhưng tôi sử dụng nó theo nhiều cách khác nhau, bạn có thể xem dưới đây:
Trang 2Set WshShell = CreateObject("Wscript.Shell")
Set WshEnv = WshShell.Environment("PRocess")
WshShell.Run "runas.exe /user:" & "domain\user" & " " & Chr(34) & "cscript c:\PCQuery.vbs" & Chr(34)
Wscript.Sleep 800
WshShell.AppActivate WshEnv("SystemRoot") & "\system32\runas.exe" Wscript.Sleep 200
WshShell.SendKeys "PASSWORD" & "~"
Wscript.Sleep 500
Set WshShell = Nothing
Set WshEn = Nothing
Một cách cơ bản, tôi giấu tất cả các kịch bản cần đến quyền quản trị trong kịch bản ở trên bằng sử dụng runas, sau đó đợi và sử dụng sendkeys để gửi mật khẩu
Đây là vấn đề tương tự kịch bản được chuyển đến bạn bằng một độc giả khác Các mật khẩu gửi không được mã hóa xuyên mạng, đó là lý do tại sao tôi viết email này
Tôi sử dụng script encoder (cơ bản chạy kịch bản thông qua bộ mã hóa và các
Trang 3bảng băm bằng nhiều thuật toán mã hóa), sau đó kết thúc với một file vbe thay
vì vbs
Tôi đảm bảo nó vẫn có thể bị crack nhưng vẫn tốt hơn là không mã hóa
Thủ thuật 2: Truy vấn cho quản trị viên cục bộ bằng WMIC
Thủ thuật thứ hai này sẽ được dựa trên vấn đề cuộc sống thực Một độc giả đã liên hệ với chúng tôi hỏi một câu hỏi đơn giản: làm thế nào bạn có thể liệt kê các tài khoản quản trị viên cục bộ trên máy tính điều khiển xa? Kịch bản là độc giả có nhiều máy trạm Windows XP, các máy là phần khởi đầu của một nhóm,
và người dùng có quyền quản trị cục bộ trên các máy tính đó (nghĩa là các tài khoản cục bộ của họ là thành viên của nhóm quản trị cục bộ trên các máy tính này) Cuối cùng mạng cũng đã được di trú đến một miền Active Directory và người dùng được trao các tài khoản mới với tư cách là thành viên nhóm toàn cục Domain Users Sau đó, một ngày quản trị viên được thông báo rằng người dùng dường như có nhiều đặc quyền hơn những gì mà anh ta đã gán và anh ta
đã phát hiện ra rằng các tài khoản quản trị cục bộ cũ đã không được phát hiện
từ máy trạm của anh ta, anh ta đã đăng nhập bằng một tài khoản quản trị cục bộ
đó khi tài khoản domain user không cho anh ta có được đủ quyền điều khiển
Trang 4trên máy trạm Quản trị viên nhận ra điều này có thể là một vấn đề nghiêm trọng khi (a) nó can thiệp vào chính sách bảo mật của công ty và (b) cho phép người dùng đăng nhập vào các máy trạm của họ như các quản trị viên, nghĩa là
họ có thể xử lý đơn giản trên máy trạm của họ khi quản trị cục bộ có thể thực hiện gần như bất cứ cái gì trên các máy của họ, tuy nhiên điều này có thể dẫn đến chi phí hỗ trợ cao hơn
Bây giờ để làm cho nó phức tạp hơn chút ít, nhóm quản trị cục bộ
Administrators đính kèm trên máy trạm được đặt lại tên thành một tên nào đó
và tài khoản người dùng Administrator cục bộ đính kèm cũng được đặt lại tên Kiểm tra máy trạm thứ hai đã phát hiện ra rằng nhóm cục bộ quản trị viên đính kèm và tài khoản người dùng cục bộ cũng đều được đặt lại tên trên máy tính này, tuy nhiên chúng được đặt lại tên khác với máy trạm đầu tiên! Thực sự là một sự phức tạp gây đau đầu! Việc giải quyết điều này giống như nó đòi hỏi phải đăng nhập vào các máy trạm và đào bới tìm kiếm tất cả người dùng và các nhóm cục bộ trên mỗi máy tính để xác định tài khoản người dùng cục bộ nào là quản trị cục bộ trên máy đó, hoặc tìm các khác để xác định thông tin này Có thể là một kịch bản?
Bạn có thể giải quyết bằng kịch bản nhưng thay vì làm điều đó, bạn hãy thử
Trang 5thực hiện một cái gì đó khác và sử dụng Windows Management
Instrumentation Command-line (WMIC) xem sao WMIC cơ bản là một công
cụ (một trình thông dịch lệnh) cho phép truy vấn thông tin WMI trực tiếp từ dòng lệnh thay vì phải thực hiện nó bên trong một kịch bản WMIC có thể được sử dụng theo hai cách: tương tác (đưa ra một lệnh tại một thời điểm nào
đó ở cửa sổ lệnh) hoặc trong các file
Sử dụng WMIC tương tác
Ví dụ, hãy cho rằng nhóm quản trị cục bộ đính kèm và tài khoản người dùng cục bộ không được đặt lại tên trên hệ thống Nếu đây là một trường hợp thì bạn
có thể sử dụng WMIC tương tác để hiển thị danh sách các thành viên của nhóm quản trị cục bộ bằng cách mở cửa sổ lệnh và đánh vào đó lệnh sau:
C:\Documents and Settings\myself>wmic path win32_groupuser where
(groupcomponent="win32_group.name=\"administrators\",domain=\"%comput ername%\"")
GroupComponent??????????????????? ????????PartComponent
win32_group.domain="XP191",name="administrators"?
\\XP191\root\cimv2:Win32_UserAccount.Domain="XP191",Name="Administ
Trang 6rator"
win32_group.domain="XP191",name="administrators"?
\\XP191\root\cimv2:Win32_UserAccount.Domain="XP191",Name="sjones"??
??
win32_group.domain="XP191",name="administrators"?
\\XP191\root\cimv2:Win32_UserAccount.Domain="XP191",Name="gsmith"?
??????
win32_group.domain="XP191",name="administrators"?
\\XP191\root\cimv2:Win32_Group.Domain="TEST",Name="Domain
Admins"
Xem cột thứ hai, chúng ta có thể thấy nhóm quản trị cục bộ trên máy tính này
có 3 tài khoản người dùng cùng với nó: quản trị viên, sjones và gsmith Thêm vào đó, nhóm quản trị miền toàn cục là một thành viên của nhóm quản trị cục
bộ trên hệ thống này
Bây giờ nhóm quản trị cục bộ đính kèm trên hệ thống được đổi tên thành gì? Chạy lệnh trên bạn sẽ có kết quả dưới đây:
C:\Documents and Settings\myself>wmic path win32_groupuser where
(groupcomponent="win32_group.name=\"administrators\",domain=\"%comput
Trang 7ername%\"")
No Instance(s) Available
Tại sao lệnh bị hỏng? Rõ ràng bởi vì tên của nhóm tồn tại đã truy vấn bởi mã cứng trong lệnh Nhưng nếu nhóm quản trị cục bộ đính kèm được đặt lại tên thì bạn có thể xác định tên mới của nó như thế nào? Câu trả lời đơn giản là nhóm này có thể được đặt tên là gì thì nó vẫn giống nhóm cũ ở bề ngoài Hay nó theo cách khác, nó là bộ nhận dạnh bảo mật (SID) không thay đổi và vẫn là S-1-5-32-544 (bạn có thể xem thêm tại đây để có thêm danh sách về các SID)
Vậy chúng ta có thể xác định tên của nhóm là gì nếu biết SID của nó? Chúng ta
có thể sử dụng lại WMIC một lần nữa, giống như dưới đây:
C:\Documents and Settings\myself>wmic group where (sid = "S-1-5-32-544" and localaccount = true) get name
Name
JustAnotherGroup
Vậy nhóm quản trị đính kèm trên hệ thống này được đặt lại tên thành
JustAnotherGroup!
Trang 8Dù thế nào đi chăng nữa bây giờ chúng ta cũng biết được tên của nhóm này, chúng ta có thể sử dụng WMIC để truy vấn các thành viên của nó:
C:\Documents and Settings\myself>wmic path win32_groupuser where
(groupcomponent="win32_group.name=\"justanothergroup\",domain=\"%com putername%\"")
GroupComponent PartComponent
win32_group.domain="XP191",name="justanothergroup"
\\XP191\root\cimv2:Win32_UserAccount.Domain="XP191",Name="JustAnot herUser"
win32_group.domain="XP191",name="justanothergroup"
\\XP191\root\cimv2:Win32_UserAccount.Domain="XP191",Name="sjones" win32_group.domain="XP191",name="justanothergroup"
\\XP191\root\cimv2:Win32_UserAccount.Domain="XP191",Name="gsmith" win32_group.domain="XP191",name="justanothergroup"
\\XP191\root\cimv2:Win32_Group.Domain="TEST",Name="Domain
Admins"
Và chúng ta có thể xem từ đầu ra lệnh có 3 quản trị cục bộ trên máy tính này: sjones, gsmith và JustAnotherUser Rõ ràng nhóm toàn cục quản trị miền là một thành viên của JustAnotherGroup
Trang 9Sử dụng WMIC trong các file Batch
Ngược lại nếu chúng ta không muốn đăng nhập vào máy trạm và chạy các lệnh WMIC trên, thì chúng ta phải làm như thế nào? WMIC có thể được chạy trên các máy tính điều khiển xa bằng cách sử dụng khóa chuyển đổi /node:””, khóa được cung cấp để bạn có thể kích hoạt Remote Administration trên các máy tính mục tiêu (bạn có thể thực hiện bằng cách sử dụng Group Policy như đã được giải thích trong phần 6) Vậy thừa nhận rằng bạn đã thực hiện điều đó, hãy mở cửa sổ lệnh trên máy chủ trung tâm của chúng ta (bộ điều khiển miền)
và đưa ra hai lệnh tương tự WMIC, nhưng lúc này máy trạm điều khiển xa có tên là XP191 Đầu tiên chúng ta lấy tên của nhóm quản trị cục bộ đính kèm trên máy tính điều khiển xa
C:\Documents and Settings\Administrator>wmic /node:"xp191" group where (sid = "S-1-5-32-544" and localaccount = true) get name
Name
JustAnotherGroup
Bây giờ chúng ta sử dụng kết quả này để lấy danh sách các thành viên của nhóm:
Trang 10C:\Documents and Settings\Administrator>wmic /node:"xp191" path
win32_groupuser where (groupcomponent =
"win32_group.name=\"justanothergroup\",domain=\"xp191\"")
GroupComponent?????????????????????????????PartComponent
win32_group.domain="xp191",name="justanothergroup"?
\\XP191\root\cimv2:Win32_UserAccount.Domain="XP191",Name="JustAnot herAccount"
win32_group.domain="xp191",name="justanothergroup"?
\\XP191\root\cimv2:Win32_UserAccount.Domain="XP191",Name="sjones" win32_group.domain="xp191",name="justanothergroup"?
\\XP191\root\cimv2:Win32_UserAccount.Domain="XP191",Name="gsmith" win32_group.domain="xp191",name="justanothergroup"?
\\XP191\root\cimv2:Win32_Group.Domain="TEST",Name="Domain
Admins"
Kết quả giốnh như những gì chúng ta mong đợi Từ điểm này, bạn hoàn toàn
dễ dàng viết một file đơn giản để truy vấn tất cả các máy trạm trên mạng và lưu kết quả trong một file văn bản để có thể phân tích về sau
Kết luận
Trang 11WMIC quả thực có nhiều thú vị, tuy nhiên đôi khi cũng khó hiểu Chúng ta sẽ nghiên cứu về sử dụng nó trong các phần tiếp theo