Thứ Sáu, 19 Tháng Tám, 2022
Trang chủWindows ClientsSử dụng PsExec chạy lệnh CMD từ xa

Sử dụng PsExec chạy lệnh CMD từ xa

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.34).

Để sử dụng công cụ PsExec, chỉ cần lưu trữ nó vào thư mục bất kỳ trên máy tính của bạn (thuận tiện nhất là khi sao chép nó vào thư mục thực thi mặc định C:\Windows\System32) và chạy nó từ CMD hoặc bảng điều khiển PowerShell.

Cách hoạt động của PsExec?

Trong các tệp của PsExec, có một tệp thực thi PSEXESVC,đây là tệp dịch vụ của Windows. Khi thiết lập kết nối với máy tính từ xa, PsExec sẽ sao chép tệp này vào thư mục admin ẩn Admin$ của máy tính từ xa (C:\Windows\System32\psexesvc.exe). Để PsExec kết nối được với máy tính từ xa, dịch vụ LanmanServer và LanmanWorkstation phải đang chạy trên máy tính này. Cổng SMB (TCP/445) và cổng UDP/137 phải được mở trên tường lửa trên máy tính nguồn và máy tính đích.

Sau đó, PsExec sẽ cài đặt và chạy dịch vụ PSEXESVC bằng cách sử dụng các hàm API của Windows để quản lý dịch vụ. Sau khi chạy PSEXESVC, kết nối được thiết lập để truyền dữ liệu giữa dịch vụ này và quy trình PsExec trên máy tính của bạn. Khi công việc hoàn thành, PsExec dừng dịch vụ và tự động xóa nó khỏi máy tính từ xa.

Dùng PsExec để chạy lệnh trên máy tính từ xa

Cú pháp của PsExec như sau:

psexec \\RemotePCName [-u username[-p password]] command [arguments]

Nếu bạn không chỉ định tên người dùng và mật khẩu, thì quy trình Remote sẽ bắt đầu trên máy tính từ xa dưới thông tin đăng nhập hiện tại của bạn.

Hãy nhớ rằng mật khẩu sẽ được gửi tới hệ thống từ xa ở dạng một văn bản thuần túy.

Khi bạn khởi động PsExec lần đầu tiên, bạn cần chấp nhận Sysinternals License Agreement

psexec run command on remote computer

Ví dụ: chúng tôi muốn xóa bộ nhớ cache DNS trên máy tính từ xa có tên Blogcntt_PC. Chạy lệnh sau:

psexec \\Blogcntt_PC ipconfig /flushdns

Lệnh sẽ chạy trên máy tính Blogcntt_PC dưới thông tin đăng nhập của bạn. Sau khi lệnh ipconfig kết thúc, tất cả kết quả sẽ được chuyển đến máy tính của bạn và mã lỗi cũng sẽ được trả về. Nếu lệnh thành công, bạn sẽ thấy mã 0.

Để khởi động lại máy tính từ xa, hãy chạy lệnh sau:
psexec \\Blogcntt_PC "cmd.exe" "/c shutdown /f /r/ /t 60"
Nếu bạn cần chạy từng lệnh một, tốt hơn nên chạy PsExec ở chế độ tương tác trên máy tính từ xa. Để thực hiện việc này, hãy chạy lệnh:
psexec \\Blogcntt_PC cmd

Bây giờ tất cả các lệnh mà bạn đã nhập trong dấu nhắc lệnh trên máy tính cục bộ của bạn, sẽ được thực thi trên máy tính Blogcntt_PC từ xa.

Để kết nối với một máy tính từ xa bằng một tài khoản cụ thể và chạy ở chế đô tương tác, hãy dùng lệnh sau:
psexec.exe \\Blogcntt_PC -u user -p password cmd.exe

Bạn cũng có thể sử dụng PsExec để chạy các lệnh PowerShell từ xa. Ví dụ: lệnh sau sẽ trả về cho bạn kích thước của thư mục C:\PS trên máy tính từ xa:

psexec \\Blogcntt_PC powershell -ExecutionPolicy RemoteSigned -command "'{0:N2}' -f ((gci C:\PS | measure Length -Sum).Sum/1MB)"

Bạn có thể sử dụng tham số -c để chỉ định tên của tệp local mà bạn muốn sao chép vào máy tính từ xa và thực thi nó ở đó. Ví dụ:

psexec \\Blogcntt_PC -c c:\ps\myapp.exe
Bạn có thể sử dụng PsExec để cài đặt phần mềm từ xa.

Ví dụ: bạn có tệp trình cài đặt của một chương trình nhất định (ví dụ: setup.msi). Để sao chép tệp msi vào một máy tính từ xa và cài đặt nó, hãy sử dụng lệnh sau:

psexec.exe \\Blogcntt_PC -c setup.msi –i –s "msiexec.exe /i setup.msi"

Theo mặc định, PsExec không cho phép khởi động chương trình GUI trên màn hình của người dùng từ xa. PsExec thực thi các lệnh ở chế độ ẩn (bạn sẽ không thấy bất kỳ cửa sổ hoặc hộp thoại nào trên máy tính từ xa nơi các lệnh được thực thi). Tuy nhiên, bạn có thể thay đổi điều này bằng tùy chọn -i.

Ví dụ: lệnh PsExec sau sẽ mở notepad.exe trên máy tính từ xa và hiển thị trên màn hình của người dùng cục bộ trên máy đó:

psexec -i \\Blogcntt_PC notepad

PsExec sẽ đợi quá trình chạy trên máy tính từ xa hoàn tất. Nếu người dùng từ xa không đóng cửa sổ notepad trên màn hình của họ, thì quy trình PsExec của bạn sẽ đợi vô thời hạn. Để ngăn PsExec đợi quá trình từ xa kết thúc, hãy sử dụng -d:

psexec -i -d \\Blogcntt_PC notepad

Thông tin đầy đủ về tất cả các tham số của PsExec có thể được lấy bằng cách chỉ cần nhập lệnh psexec trong dòng lệnh mà không có tham số.

Để kết thúc phiên PsExec từ xa, hãy nhập exit và nhấn Enter.

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.

psexec cmd remote

Chạy lệnh trên nhiều máy tính từ xa với PsExec

PsExec cho phép bạn chạy lệnh đồng thời trên nhiều máy tính từ xa. Để thực hiện việc này, bạn có thể chỉ định tên máy tính được phân tách bằng dấu phẩy: psexec PC1,PC2 “ipconfig /all” hoặc lưu chúng trong tệp văn bản, sau đó chỉ định đường dẫn đến tệp này: psexec @c:\ps\danh_sach_pc.txt ipconfig. Nếu thay vì tên máy tính, bạn đặt dấu hoa thị (psexec *), thì lệnh sẽ được thực thi trên tất cả các máy tính trong miền của bạn (bạn chỉ có thể sử dụng thủ thuật này trên máy tính đã tham gia miền).

Ví dụ: lệnh sau sẽ sao chép tệp run.bat của bạn vào tất cả các máy tính được liệt kê trong tệp văn bản c:\ps\danh_sach_pc.txt, và thực thi lô này (đối số –h được sử dụng để chạy với quyền Administrator):

PsExec.exe @c:\ps\danh_sach_pc.txt -h -u .administrator -p $upper0P@$ -c "c:\ps\run.bat"

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.
psexec remote computer

Đả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:

  1. Đả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;
  2. 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);
  3. 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;
  4. Thử tạm thời tắt Tường lửa của Windows trên máy tính từ xa.
Bài viết liên quan

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây

Bài viết nổi bật

Ý kiến gần đây