PsExec cho phép bạn điều khiển máy tính từ xa bằng giao diện dòng lệnh (bạn không cần phải cài đặt thủ công phần mềm máy khách). Ưu điểm chính của PsExec là khả năng gọi command line trên máy tính từ xa, chạy chương trình từ xa và thực hiện bất kỳ lệnh nào (ở chế độ nền hoặc chế độ tương tác).
Tiện ích PsExec là một trong những chương trình phổ biến nhất nằm trong gói PsTools từ Sysinternals của Microsoft. Bạn có thể tải xuống trên trang này (phiên bản mới nhất hiện tại là PsExec v2.40).
Lưu ý: Kẻ xấu có thể lợi dụng PsExec để chạy các tệp độc hại, truy cập trái phép dữ liệu hoặc thu thập thông tin hệ thống của bạn. Bạn nên hạn chế PsExec chỉ chạy từ các máy tính được phép. Có nhiều cách để nâng cao bảo mật khi sử dụng PsExec, trong hướng dẫn này, tôi sẽ chỉ cho bạn cách bảo mật nó bằng tường lửa của Windows.
Yêu cầu để sử dụng PsExec
Máy tính từ xa phải đáp ứng các yêu cầu sau:
- Port TCP/445 phải được mở
- Port UDP/137 phải được mở
- Thông tin đăng nhập cửa máy tính từ xa (local hoặc domain)
- Remote Service Management (RPC) phải được mở (Điều này không bắt buộc nhưng PsExen sẽ chạy cực kỳ chậm nếu tường lửa được bật và dịch vụ này bị chặn.)
Bảo mật PsExec với Firewall của windows
Tôi khuyên bạn chỉ nên cho phép sử dụng PsExec trên các máy tính được ủy quyền, chẳng hạn như máy tính xách tay của bạn hoặc một máy trạm an toàn. Nếu không, kẻ xấu có thông tin đăng nhập có thể dễ dàng chạy các lệnh và quy trình trên các máy tính từ xa trong mạng của bạn.
Dưới đây là các bước để cho phép và bảo mật PsExec.
Bước 1: Bật Windows Firewall
Trước tiên, bạn cần bật Tường lửa của Windows. Đôi khi các tổ chức vô hiệu hóa điều này vì lý do thuận tiện. Điều này có thể gây ra nhiều rủi ro về bảo mật. Nếu bạn có nhiều máy tính cần quản lý, bạn có thể sử dụng chính sách nhóm để quản lý cài đặt tường lửa.
Đảm bảo nó được bật cho tất cả các profiles (domain, private, public).
Bước 2: Cho phép các port của PsExec trên Windows Firewall
Máy tính từ xa cần phải mở các port tcp/445 và udp/137 để sử dụng được PsExec. Dưới đây là Lệnh PowerShell để mở các port này.
Mẹo: Sử dụng tùy chọn -RemoteAddress để giới hạn kết nối chỉ từ máy tính được ủy quyền. Trong ví dụ này, tôi chỉ cho phép IP 192.168.0.69 kết nối với máy tính từ xa sử dụng dịch vụ chia sẻ tệp và máy in. Nếu một địa chỉ IP khác cố gắng kết nối với máy tính từ xa, Tường lửa sẽ chặn địa chỉ đó.
Câu lệnh mở port TCP/445.
New-NetFirewallRule -DisplayName 'TCP/445' -Profile @('Domain') -Direction Inbound -Action Allow -Protocol TCP -LocalPort @('445') -RemoteAddress 192.168.0.69
Câu lệnh mở port UDP/137.
New-NetFirewallRule -DisplayName 'UDP/137' -Profile @('Domain') -Direction Inbound -Action Allow -Protocol UDP -LocalPort @('137') -RemoteAddress 192.168.0.69
Trong giao diện GUI, bạn có thể xem cài đặt Remote IP address nằm ở tab Scope.
Bước 3: Cho phép Remote Service Management trên Firewall
Việc này là không bắt buộc nhưng PsExec sẽ chạy cực kỳ chậm khi dịch vụ này bị chặn. Tôi cũng sử dụng thêm tùy chọn -RemoteAddress để giới hạn địa chỉ IP nào có thể kết nối với máy tính từ xa.
Set-NetFirewallRule -DisplayGroup “Remote Service Management” -Enabled True -Profile domain -RemoteAddress "192.168.0.69"
Cách cài đặt PsExec
Sau đây, tôi sẽ hướng dẫn bạn cách cài đặt PsExec trên máy tính của bạn.
Bước 1: Download PsExec
PsExec nằm trong gói PsTools do Microsoft cung cấp. Bạn có thể download nó tại đây.
Bước 2: Giải nén file download
Giải nén file bạn vừa tải về (PSTools.zip) rồi copy nó vào bất kỳ vị trí nào trên ổ đĩa của bạn. Tôi sẽ đặt nó tại ổ đĩa C
Mẹo: Để thuận tiện cho quá trình sử dụng, bạn cũng có thể copy file PsExec.exe trong folder PSTools vào đường dẫn hệ thống (c:\windows\system32), điều này sẽ cho phép bạn chạy file exe mà không cần phải thay đổi thư mục từ dấu nhắc lệnh.
Bước 3: Kiểm tra PsExec
Giờ chúng ta hãy cùng kiểm tra xem PsExec đã hoạt động hay chưa.
Mở CMD và di chuyển tới thư mục PSTools, sau đó nhập psexec và nhấn enter. Bạn sẽ thấy PsExec trả về số phiên bản và cú pháp lệnh.
Bạn có thể thấy trong ảnh chụp màn hình bên dưới, tôi sử dụng lệnh "cd c:\pstools"
để di chuyển tới folder “c:\pstools” rồi chạy lệnh psexec.
Nhập psexec cũng là một cách nhanh chóng để có thể xem các cú pháp và dòng lệnh của PsExec.
Ví dụ về PsExec
PsExec có cú pháp đơn giản như sau:
psexec \\remotecomputer command [arguments]
Ví dụ 1: Chạy Command trên Remote Computer
Sử dụn lệnh sau để chạy command trên máy tính Remote
psexec \\PCRemote ipconfig
Lệnh trên sẽ chạy lệnh ipconfig trên máy tính PCRemote (PCRemote có thể nhập tên PC hoặc IP của PC cần remote)
Ví dụ 2: Chạy lệnh trên nhiều máy tính khác nhau
Để chạy PsExec trên nhiều máy tính, chỉ cần nhâp tên hoặc ip các máy tính đó, cách nhau bằng dấu phẩy.
psexec \\pc1,pc2 ipconfig
Ảnh chụp bên dưới tôi chạy lệnh ipconfig trên 2 máy tính có IP là 192.168.0.82 và 192.168.0.85.
Ví dụ 3: Sử dụng tên người dùng và mật khẩu chỉ định
Để kết nối với máy tính từ xa bằng tên người dùng và mật khẩu cụ thể, hãy sử dụng lệnh sau:
psexec \\pc1 -u user -p password ipconfig
Ví dụ 4: kết thúc các tiến trình trên Remote Computer
Để kết thúc một tiến trình nào đó đang chạy trên máy tính Remote, bạn làm như sau:
Đầu tiên bạn cần xác định số process PID của tiến trình cần kết thúc. Liệt kê danh sách các tiến trình đang chạy bằng lệnh sau:
psexec \\pc1 tasklist
Tìm số process PID của tiến trình cần kết thúc, sau đó sử dụng taskkill để kết thúc tiến trình đó.
psexec \\pc1 taskkill /pid 820 /f
Ví dụ 5: Cài đặt phần mềm
Trong ví dụ này, tôi đang cài đặt 7zip trên máy tính từ xa có tên BlogCNTTPC. File cài đặt đã được sao chép vào Remote Computer và để tại thử mục C:\setup
. Bạn cũng có thể sử dụng tùy chọn -c để sao chép tệp và thực thi tệp đó.
psexec \\BlogCNTTPC msiexec.exe /i "c:\setup\7z2201-x64.msi"
Ví dụ 6: Khởi động lại Remote Computer
Sử dụng lệnh sau để khởi động lại Remote Computer. Ở đây tôi để khởi động lại pc1 sau 60 giây.
psexec \\pc1 shutdown /r /t 60
Trên máy tính từ xa sẽ nhận được một thông báo máy tính sẽ khởi động lại sau 1 phút nữa.
Ví dụ 7: Xóa file
Câu lệnh sau sẽ xóa file Text.txt trên máy tính Remote tại folder C:\setup
.
psexec \\pc1 cmd /c del /f c:\setup\text.txt
Ví dụ 8: Khởi động lại Printer Spooler
Trong ví dụ này, tôi sẽ dừng chạy lại dịch vụ Printer Spooler trên Remote Computer:
Để dừng dịch vụ, chạy lệnh sau:
psexec \\pc1 net stop spooler
Để chạy dịch vụ, sử dụng lệnh sau:
psexec \\pc1 net start spooler
Ví dụ 9. Copy và chạy một file .Bat
Tùy chọn -c sẽ sao chép một tệp được chỉ định vào một máy tính từ xa và thực thi nó.
psexec \\pc1 -c run.bat
Ví dụ 10. Mở Command Prompt trên Remote Computer
Ví dụ này sẽ mở Command Prompt trên máy tính từ xa, sau đó bạn có thể chạy bất kỳ dòng lệnh CMD nào bạn cần.
psexec \\pc1 cmd
Bạn có thể thấy bên dưới tôi mở cmd, sau đó chạy tiếp lệnh ipconfig trên Remote Computer. Điều này có thể rất hữu ích cho các quản trị viên CNTT khi khắc phục sự cố máy tính và bạn cần một cách nhanh chóng để thực hiện các lệnh trên Remote Computer.
Ví dụ 11: Mở phần mềm
Nếu bạn muốn mở một phần mềm hoặc chương trình nào đó trên Remote Computer, hãy sử dụng tùy chọn -i. Mặc định, PsExec không khởi chạy các ứng dụng GUI trên remote host. Tuy nhiên, với sự trợ giúp của cú pháp -i, bạn có thể khởi chạy ứng dụng GUI trên màn hình remote host.
Ví dụ dưới sẽ mở ứng dụng Caculator trên remote computer.
psexec \\pc1 -i calculator
Sử dụng PsExec để chạy các quy trình như một tài khoản LOCAL SYSTEM
PsExec có một tính năng thú vị và hữu ích. Nếu bạn không chỉ định tên máy tính, thì lệnh sẽ được thực thi từ Local system authority. Bạn có thể chạy các chương trình trong tài khoản SYSTEM bằng cách sử dụng -s. Ví dụ: chạy phiên CLI:
psexec -s cmd
Sau đó, kiểm tra người dùng bạn hiện đang đăng nhập bằng lệnh whoami. Như bạn có thể thấy, bảng điều khiển được khởi động từ tài khoản NTAuthority\System.
Chạy CMD trên máy tính từ xa với tư cách là admin bằng PsExec
Khi bạn chạy cmd.exe thông qua PsExec, bạn không có cách nào để chạy quyền admin khi UAC được bật. Để chạy các lệnh với mã thông báo nâng cao của tài khoản, hãy sử dụng thêm tùy chọn –h. Tùy chọn này có nghĩa là tất cả các lệnh sẽ được thực thi ở chế độ “Run as Administrator”.
Các lỗi PsExec
Lỗi truy cập PsExec bị từ chối
Trong một số trường hợp, bạn có thể gặp lỗi sau khi cố gắng kết nối bằng PsExec:
Couldn’t access computername
The network path was not found
Make sure the default admin% share is enabled on computername.
Đảm bảo máy tính từ xa có thể truy cập qua mạng thông qua SMB (cổng TCP 445). Bạn có thể kiểm tra kết nối với máy tính từ xa bằng lệnh PowerShell sau:
Test-NetConnection -ComputerName pc99 -Port 445
Kiểm tra kết quả trả về. Nếu TcpTestSucceeded không bằng True, điều này có nghĩa là cổng này bị tường lửa chặn.
Bạn có thể mở cổng SMB trong Firewall bằng cách bật “File and Printer Sharing” bằng lệnh sau:
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes
Đảm bảo ADMIN% (Remote Admin) và Windows admin shares (C$, IPC$) được cho phép trên máy tính từ xa
net view \\pc99 /all
Nếu danh sách admin trên máy tính từ xa trống, hãy chạy lệnh sau trên máy tính đó cục bộ:
net share
Nếu không có Windows admin shares nào, bạn cần thêm vào bằng lệnh
reg add HKLM\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters /f /v AutoShareWks /t REG_DWORD /d 0
Sau đó khởi động lại máy tính của bạn.
Sửa lỗi “Could not Start PsExec service”
Trong một số trường hợp, khi kết nối với máy tính từ xa bằng PsExec, bạn có thể gặp lỗi:
Could not start PSEXESVC service on PC:
Access is denied.
Nếu bạn gặp phải lỗi như vậy, hãy thử sử dụng một trong các giải pháp sau:
- Đảm bảo rằng người dùng của bạn là thành viên của nhóm admin local trên máy tính từ xa;
- Chỉ định thông tin đăng nhập người dùng từ xa:
psexec \\PC1 -u PC1\user1 -p adminpassword -h -i cmd
(sử dụng tùy chọn –h trong lệnh PsExec của bạn); - Trong Registry key sau của máy tính từ xa
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
, thử thay đổi giá trị ‘LocalAccountTokenFilterPolicy’ thành 1. Khi UAC được bật, sẽ cho phép bạn chạy lệnh trên máy tính từ xa với quyền của admin; - Thử tạm thời tắt Tường lửa của Windows trên máy tính từ xa.
Hy vọng bài viết này cung cấp cho bạn những kiến thức hữu ích. Để lại bình luận hoặc những thắc mắc của bạn bên dưới nhé.