Bài tập 1: Khám phá Môi trường PowerShell

Mục tiêu:

  • Trong bài tập này, bạn sẽ làm việc trong môi trường Windows và thực hành các phương pháp và kỹ thuật của việc khám phá thông tin và liệt kê bằng PowerShell.

Thời lượng Bài tập: 20 phút

  1. Theo mặc định, máy Windows Server 2019 được chọn, nhấp vào Ctrl+Alt+Delete.(Hình ảnh màn hình khóa Windows)
  2. Nhấp vào Password và nhấn Enter để đăng nhập với tư cách Quản trị viên.(Hình ảnh màn hình đăng nhập Windows)
  3. Nhấp vào biểu tượng Search ở góc dưới bên trái của Desktop và nhập PowerShell vào trường tìm kiếm. Từ kết quả tìm kiếm, nhấp chuột phải vào Windows PowerShell và nhấp vào Run as administrator.(Hình ảnh kết quả tìm kiếm với Windows PowerShell được chọn và menu ngữ cảnh với “Run as administrator” được đánh dấu)
  4. Cửa sổ Windows PowerShell xuất hiện, nhấp vào more và nhấn Enter. Có rất nhiều tùy chọn dòng lệnh để sử dụng. Việc đề cập tất cả những tùy chọn này nằm ngoài phạm vi của tài liệu này.(Hình ảnh cửa sổ PowerShell với thông tin help)
  5. Đầu tiên, thêm một người dùng vào máy. Để làm điều này, trước tiên chúng ta sẽ kiểm tra các tài khoản người dùng có sẵn. Nhấp vào net user và nhấn Enter. Thao tác này sẽ liệt kê các tài khoản người dùng có sẵn trong máy.
  6. Như hiển thị trong ảnh chụp màn hình, chúng ta có thể thấy các tài khoản người dùng có sẵn.(Hình ảnh cửa sổ PowerShell với danh sách người dùng)
  7. Bây giờ chúng ta sẽ thêm một người dùng mới vào máy. Nhấp vào net user user password /add và nhấn Enter (hoặc bạn có thể sử dụng bất kỳ tên nào bạn muốn). Lệnh này sẽ tạo một tài khoản người dùng.
  8. Bây giờ hãy thêm người dùng mới được tạo vào nhóm Administrators. Nhấp vào net localgroup administrators user /add và nhấn Enter. Để xác nhận rằng tài khoản người dùng mới đã được tạo, nhấp vào net user và nhấn Enter. Thu nhỏ cửa sổ PowerShell.(Hình ảnh cửa sổ PowerShell với danh sách người dùng sau khi thêm người dùng mới)
  9. Tiếp theo, kiểm tra các tùy chọn dòng lệnh cho các tiến trình. Bạn có thể sử dụng giao diện người dùng đồ họa (GUI) Task Manager, nhưng một tùy chọn tốt hơn là khởi chạy Command Prompt. Nhập cmd vào trường tìm kiếm và từ kết quả tìm kiếm, nhấp vào Command Prompt.(Hình ảnh kết quả tìm kiếm với Command Prompt được chọn)
  10. Trong dấu nhắc lệnh, nhấp vào tasklist /? và nhấn Enter. Bạn không cần khám phá tất cả các tùy chọn có sẵn.(Hình ảnh cửa sổ Command Prompt với help của tasklist)
  11. Nhập tasklist /svc | more và nhấn Enter. Điều này sẽ hiển thị các dịch vụ được khởi động bởi tiến trình. Việc theo dõi các dịch vụ đã được khởi chạy là một bước quan trọng trong phân tích bộ nhớ.(Hình ảnh cửa sổ Command Prompt với danh sách các dịch vụ đang chạy)
  12. Giả sử chúng ta muốn xem một tiến trình cụ thể. Nhập tasklist /svc | findstr svchost.exe và nhấn Enter. Sử dụng findstr để giới hạn kết quả đầu ra cho chuỗi được nhập làm đầu vào, như được hiển thị trong ảnh chụp màn hình. Điều này cho phép bạn nhanh chóng xem xét một tiến trình cụ thể và các dịch vụ mà tiến trình đó đã khởi động. Bây giờ bạn đã khám phá được dòng lệnh. Thu nhỏ cửa sổ Command Prompt.(Hình ảnh cửa sổ Command Prompt với danh sách các dịch vụ đang chạy được lọc bởi svchost.exe)
  13. Chuyển lại cửa sổ Windows PowerShell. Phóng to cửa sổ PowerShell. Bây giờ hãy bật Execution Policy. Nhập Get-ExecutionPolicy và nhấn Enter, và lưu ý kết quả đầu ra.(Hình ảnh cửa sổ PowerShell hiển thị chính sách thực thi hiện tại)
  14. Thay đổi cài đặt RemoteSigned hiện tại. Nhập Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine và nhấn Enter. Một lời nhắc cảnh báo sẽ xuất hiện, nhập Y và nhấn Enter. Bằng cách thực hiện lệnh này, bạn hiện đang ở trạng thái Unrestricted.(Hình ảnh cửa sổ PowerShell với lời nhắc cảnh báo về việc thay đổi chính sách thực thi)
  15. Nhập get-help a và nhấn Enter để xem tất cả các cmdlet bắt đầu bằng chữ “A”. Một lời nhắc cảnh báo sẽ xuất hiện, nhập Y và nhấn Enter như hiển thị trong ảnh chụp màn hình. Sau khi bạn nhấn Enter, powershell sẽ bắt đầu cập nhật. Có thể mất vài phút để cập nhật.(Hình ảnh cửa sổ PowerShell với lời nhắc cảnh báo về việc cập nhật trợ giúp)(Hình ảnh cửa sổ PowerShell hiển thị các cmdlet bắt đầu bằng chữ “A”)
  16. Bạn có thể tạo và tùy chỉnh nhiều truy vấn khác nhau – ví dụ: nhập get-service | Where-Object {$_.Status -eq “running”} | select-object -last 10 và nhấn Enter.
    • Hãy xem xét truy vấn trên:
      • get-service là một tập hợp các dịch vụ.
      • Sử dụng truy vấn (collection variable as LINQ (C#)), truy vấn là để tìm các dịch vụ đang chạy.
      • Lấy 10 mục cuối cùng trong tập hợp.
  17. Một ví dụ về lệnh get-service được hiển thị trong ảnh chụp màn hình.(Hình ảnh cửa sổ PowerShell với kết quả của lệnh get-service)
  18. Sử dụng lệnh New-LocalUser để thêm một người dùng. Đối với cú pháp của lệnh, hãy nhập Get-Help copy-item và nhấn Enter, điều này tạo ra một cấp độ trợ giúp.(Hình ảnh cửa sổ PowerShell với trợ giúp của lệnh copy-item)
  19. Cấp độ trợ giúp tiếp theo của lệnh đã chi tiết. Nhập Get-Help Copy-Item -detailed | more và nhấn Enter.(Hình ảnh cửa sổ PowerShell với trợ giúp chi tiết của lệnh copy-item)
  20. Tiếp theo, khám phá tùy chọn đầy đủ. Nhập Get-Help Copy-Item -full | more và nhấn Enter.(Hình ảnh cửa sổ PowerShell với trợ giúp đầy đủ của lệnh copy-item)
  21. Một hỗ trợ tuyệt vời khác là khả năng xem cú pháp cho một lệnh. Nhập Get-Help Copy-Item -example và nhấn Enter. Kết quả đầu ra của lệnh này được hiển thị trong ảnh chụp màn hình.(Hình ảnh cửa sổ PowerShell với các ví dụ về lệnh copy-item)
  22. Các cmdlet PowerShell có khả năng cao và tốt cho việc thực hành. Điều này kết thúc bài tập.

Bài tập 2: Tận dụng PowerShell

Mục tiêu:

  • Trong bài tập này, bạn sẽ làm việc từ dòng lệnh và khám phá PowerShell để làm quen với sức mạnh của nó.

Thời lượng Bài tập: 20 phút

  1. Theo mặc định, máy Windows Server 2019 được chọn, nhấp vào Ctrl+Alt+Delete.
    Nếu bạn đã đăng nhập, hãy bỏ qua bước 4.(Hình ảnh màn hình khóa Windows)
  2. Nhấp vào Password và nhấn Enter để đăng nhập với tư cách Quản trị viên.(Hình ảnh màn hình đăng nhập Windows)
  3. Nhấp vào biểu tượng Search ở góc dưới bên trái của Desktop và nhập PowerShell vào trường tìm kiếm. Từ kết quả tìm kiếm, nhấp chuột phải vào Windows PowerShell và nhấp vào Run as administrator.(Hình ảnh kết quả tìm kiếm với Windows PowerShell được chọn và menu ngữ cảnh với “Run as administrator” được đánh dấu)
  4. Do nhiều cuộc tấn công tận dụng PowerShell, hãy thiết lập hệ thống của bạn để sử dụng quản trị từ xa. Khi cảnh báo xuất hiện, hãy nhập winrm quickconfig và nhấn Enter.(Hình ảnh cửa sổ PowerShell với kết quả của lệnh winrm quickconfig)
  5. Hầu hết các máy tính mạng doanh nghiệp đều được cấu hình thành cài đặt miền hoặc riêng tư, điều này là có lợi.
  6. Không cần GUI, hãy sử dụng dòng lệnh cho một phương thức khác – nhập Set-NetConnectionProfile -NetworkCategory Private và nhấn Enter.(Hình ảnh cửa sổ PowerShell với lệnh Set-NetConnectionProfile)
  7. Vì đây là thiết lập, bây giờ hãy nhập các lệnh sau:
    • winrm set winrm/config/service/@auth @{Basic=”true”}
    • winrm set winrm/config/client/auth @{Basic=”true”}
    • winrm set winrm/config/service/@AllowUnencrypted=”true”
    • Set-Item WSMan:\localhost\Client\TrustedHosts -value “*”
  8. Để kiểm tra cấu hình, nhập winrm get winrm/config | more và nhấn Enter. Một ví dụ một phần được hiển thị trong ảnh chụp màn hình.(Hình ảnh cửa sổ PowerShell với kết quả của lệnh winrm get winrm/config)
  9. Trích xuất TrustedHost trực tiếp, nhập Get-Item WSMan:\localhost\Client\TrustedHosts và nhấn Enter.(Hình ảnh cửa sổ PowerShell với kết quả của lệnh Get-Item WSMan:\localhost\Client\TrustedHosts)
  10. Để xác minh xem kết nối đã sẵn sàng hay chưa, nhập Get-NetTCPConnection | Where-Object -Property LocalPort -EQ 5985 và nhấn Enter. Kết quả đầu ra từ lệnh này được hiển thị trong ảnh chụp màn hình.Nếu bạn đang cố gắng kết nối từ một máy Windows khác, hãy sử dụng lệnh:
    $Session = New-PSSession -ComputerName
  11. Cuối cùng, xác minh cấu hình. Nhập winrm get winrm/config | more và nhấn Enter. Một ví dụ một phần được hiển thị trong ảnh chụp màn hình. Thu nhỏ tất cả các cửa sổ.(Hình ảnh cửa sổ PowerShell với kết quả của lệnh winrm get winrm/config)
  12. Chuyển sang máy UbuntuWeb-95. Nhấp vào hồ sơ Student và sau đó nhập password vào trường Password và nhấn Enter.Nếu máy bị khóa, hãy cuộn con trỏ chuột lên trên.(Hình ảnh màn hình đăng nhập Ubuntu)
  13. Nhấp vào biểu tượng Show Applications ở góc dưới bên trái của Desktop. Trong trường tìm kiếm, nhập text editor và từ kết quả tìm kiếm, nhấp vào Text Editor để khởi chạy.Bạn có thể chọn bất kỳ trình soạn thảo văn bản nào bạn muốn.(Hình ảnh màn hình Ubuntu với kết quả tìm kiếm cho “text editor”)
  14. Nhập đoạn mã sau vào trình soạn thảo văn bản như được hiển thị trong ảnh chụp màn hình.192.168.177.20 là địa chỉ IP của máy Windows Server 2019.(Hình ảnh trình soạn thảo văn bản trên Ubuntu với đoạn mã Python)
  15. Nhấp vào Save As. Khi cửa sổ xuất hiện, hãy nhập tên tệp là testing.py và chọn vị trí để lưu tệp và sau đó nhấp vào Save. Trong bài tập này, chúng ta đang chọn Desktop làm vị trí. Thu nhỏ cửa sổ trình soạn thảo văn bản.(Hình ảnh trình soạn thảo văn bản trên Ubuntu với đoạn mã Python và cửa sổ Save As)(Hình ảnh màn hình Ubuntu với cửa sổ Save As)
  16. Chuyển sang máy Windows Server 2019 và nhấp đúp vào biểu tượng phím tắt Wireshark trên Desktop để khởi chạy ứng dụng.Nếu cửa sổ Software Update xuất hiện, hãy nhấp vào Skip this version hoặc Remind me later.
  17. Nhấp đúp vào giao diện đang nắm bắt lưu lượng mạng (ở đây, Ethernet2).(Hình ảnh cửa sổ Wireshark với giao diện Ethernet2 được chọn)
  18. Chuyển sang UbuntuWeb-95 và khởi chạy Terminal, và thay đổi thư mục thành Desktop bằng cách nhập cd DesktopEnter.(Hình ảnh terminal trên Ubuntu)
  19. Trong terminal, nhập python testing.py và nhấn Enter. Nếu tên máy xuất hiện làm kết quả đầu ra, thì bước này đã thành công. Bạn đã lấy dữ liệu từ xa bằng mô-đun python winrm.(Hình ảnh terminal trên Ubuntu với kết quả của lệnh python testing.py)
  20. Chuyển sang Windows Server 2019 và dừng quá trình thu thập của Wireshark bằng cách nhấp vào nút màu Đỏ.(Hình ảnh cửa sổ Wireshark với nút dừng màu đỏ được đánh dấu)
  21. Bây giờ hãy chọn bất kỳ gói nào như được hiển thị trong ảnh chụp màn hình. Nhấp chuột phải vào gói và nhấp vào Follow > TCP Stream (Packet # 70).(Hình ảnh cửa sổ Wireshark với một gói được chọn và menu ngữ cảnh với “Follow > TCP Stream” được đánh dấu)(Hình ảnh cửa sổ Wireshark hiển thị luồng TCP)
  22. Bạn có thể xem xét dữ liệu trong Wireshark như được hiển thị trong ảnh chụp màn hình. Đóng tất cả các cửa sổ trong máy Windows Server 2019. Người dùng là Python WinRM Basic Authorization.(Hình ảnh cửa sổ Wireshark hiển thị luồng TCP)
  23. Bây giờ, hãy chuyển sang UbuntuWeb-95 và sửa đổi mã để cung cấp thêm thông tin. Thêm đoạn mã được đánh dấu vào tập lệnh và lưu. Phóng to cửa sổ trình soạn thảo văn bản như được hiển thị trong ảnh chụp màn hình, và nhấp vào Save từ menu File. Thu nhỏ cửa sổ trình soạn thảo văn bản.(Hình ảnh trình soạn thảo văn bản trên Ubuntu với đoạn mã Python đã sửa đổi)
  24. Bây giờ, trong terminal, nhập python testing3.py và nhấn Enter. Bạn đã trích xuất thông tin Process ID từ máy. Bạn có thể chạy bất kỳ lệnh nào, vì bạn có quyền truy cập vào máy. Kết quả đầu ra của bạn có thể không rõ ràng như hình ảnh, nhưng dữ liệu vẫn ở đó.(Hình ảnh terminal trên Ubuntu với kết quả của lệnh python testing3.py)
  25. Hãy xem nhật ký sự kiện. Chuyển sang Text Editor và nhập đoạn mã được đánh dấu như được hiển thị trong ảnh chụp màn hình. Lưu trình soạn thảo văn bản.(Hình ảnh trình soạn thảo văn bản trên Ubuntu với đoạn mã Python được cập nhật)
  26. Chuyển sang terminal và nhập python testing3.py và nhấn Enter. Bây giờ bạn đã trích xuất các sự kiện từ nhật ký bằng cmdlet ForEach-Object. Cmdlet này sẽ lấy từng dòng từ đầu ra của lệnh đã chỉ định và thực hiện một hành động trên nó. Trong trường hợp này, hành động là lấy 10 mục cuối cùng từ mỗi mục nhật ký được tìm thấy từ danh sách. Thao tác này sẽ truy xuất 10 mục nhật ký gần đây nhất từ mỗi nhật ký sự kiện.(Hình ảnh terminal trên Ubuntu với kết quả của lệnh python testing3.py, hiển thị các mục nhật ký sự kiện)
  27. Bài tập này kết thúc tại đây.

Bài tập 3: Cố gắng Vượt qua Thực thi PowerShell

Mục tiêu:

  • Trong bài tập này, bạn sẽ làm việc từ dòng lệnh và khám phá PowerShell.

Thời lượng Bài tập: 20 phút

Kiểm tra xem bạn có thể vượt qua ExecutionPolicy của PowerShell hay không, và có quyền truy cập vào một máy tính mà chưa được thiết lập đúng. Lưu ý rằng mặc dù ExecutionPolicy 5, và theo mặc định, trong phiên bản sau, không được cài đặt theo mặc định. Trong trường hợp sau, bạn sẽ không thấy ExecutionPolicy. Theo Microsoft, ExecutionPolicy “không phải là một tính năng bảo mật, được thiết kế để ngăn người dùng chạy tập lệnh độc hại”, nhưng nó xác định liệu các tập lệnh có thể chạy. Phần lớn, nếu một tập lệnh, any, được ký số, nó có thể chạy. Do đó, điều cần lưu ý là Microsoft tuyên bố ExecutionPolicy được dự định là một biện pháp kiểm soát bảo mật.

  1. Theo mặc định, máy Windows Server 2019 được chọn, nhấp vào Ctrl+Alt+Delete.
    Nếu bạn đã đăng nhập, hãy bỏ qua bước 4.(Hình ảnh màn hình khóa Windows)
  2. Nhấp vào Password và nhấn Enter để đăng nhập với tư cách Quản trị viên.(Hình ảnh màn hình đăng nhập Windows)
  3. Nhấp vào biểu tượng Search ở góc dưới bên trái của Desktop và nhập PowerShell vào trường tìm kiếm. Từ kết quả tìm kiếm, nhấp chuột phải vào Windows PowerShell và nhấp vào Run as administrator.(Hình ảnh kết quả tìm kiếm với Windows PowerShell được chọn và menu ngữ cảnh với “Run as administrator” được đánh dấu)
  4. Bây giờ, hãy thay đổi chính sách thực thi. Nhập Set-ExecutionPolicy -ExecutionPolicy Restricted và nhấn Enter. Một lời nhắc cảnh báo xuất hiện, nhập Y và nhấn Enter.(Hình ảnh cửa sổ PowerShell với lời nhắc cảnh báo về việc thay đổi chính sách thực thi)
  5. Bây giờ bạn có quyền truy cập ở mức thấp cơ bản vào máy Windows. Nâng cấp shell của bạn lên một cái gì đó ổn định hơn, hoặc ít nhất là để kiểm tra. Xác minh rằng bạn đã thiết lập cài đặt thành công. Nhập Get-ExecutionPolicy và nhấn Enter.(Hình ảnh cửa sổ PowerShell hiển thị chính sách thực thi hiện tại)
  6. Xem lại danh sách các chính sách. Nhập Get-ExecutionPolicy -List -Format -Table -AutoSize và nhấn Enter. Thu nhỏ Windows PowerShell.(Hình ảnh cửa sổ PowerShell hiển thị danh sách các chính sách thực thi)
  7. Tạo một tập lệnh đơn giản để kiểm tra. Trong trường tìm kiếm, nhập Notepad++ và nhấp vào Notepad++ từ kết quả tìm kiếm.Nếu cửa sổ bật lên cập nhật Notepad++ xuất hiện, nhấp vào No.(Hình ảnh kết quả tìm kiếm với Notepad++ được chọn)
  8. Trong Notepad++, nhập đoạn mã đơn giản sau:Write-Host “Testing Execution Bypass”
    calc.exe
  9. Nhấp vào Save As. Khi cửa sổ xuất hiện, nhập test.ps1 vào trường File name, chọn vị trí mong muốn và nhấp vào Save. Trong trường hợp này, chúng ta đang lưu tệp trên Desktop. Thu nhỏ cửa sổ Notepad++.(Hình ảnh cửa sổ Notepad++ với đoạn mã và cửa sổ Save As)(Hình ảnh cửa sổ Save As)
  10. Trong tập lệnh trên, bạn chỉ đang viết một chuỗi, và sau đó chạy chương trình máy tính.
  11. Phóng to cửa sổ PowerShell và thay đổi thư mục thành vị trí Desktop. Nhập cd Desktop và nhấn Enter.
  12. Bây giờ, hãy chạy tập lệnh. Nhập test.ps1 và nhấn Enter.Bạn không thể chạy tập lệnh vì cài đặt. Để thay đổi chính sách thực thi, nhập Set-ExecutionPolicy Unrestricted và nhấn Enter. Một lời nhắc cảnh báo xuất hiện, nhập Y và nhấn Enter.(Hình ảnh cửa sổ PowerShell với thông báo lỗi và lệnh để thay đổi chính sách thực thi)
  13. Xác minh rằng bạn đã thiết lập cài đặt thành công. Nhập Get-ExecutionPolicy và nhấn Enter.(Hình ảnh cửa sổ PowerShell hiển thị chính sách thực thi hiện tại)
  14. Tuy nhiên, bạn không thể thay đổi chính sách từ một shell có quyền hạn thấp. Cố gắng chạy lệnh trực tiếp. Trong powershell, nhập Write-Host “This is a bypass test.” và nhấn Enter. Nhập calc.exe và nhấn Enter. Đóng chương trình máy tính vừa mở ra.(Hình ảnh cửa sổ PowerShell với lệnh và chương trình máy tính đang mở)
  15. Tiếp theo, nhập các lệnh để vượt qua nó. Nhập type Get-Content .\test.ps1 | powershell.exe -noprofile và nhấn Enter. Đóng chương trình máy tính vừa mở ra.(Hình ảnh cửa sổ PowerShell với lệnh và chương trình máy tính đang mở)
  16. Tải xuống tập lệnh từ URI (Remote and Local) và thực thi với Invoke-Expression. Nhập đoạn mã sau như được hiển thị trong ảnh chụp màn hình và nhấn Enter:powershell -nop -c “iex((New-Object Net.WebClient).DownloadString(‘test.ps1’))”
  17. Đóng chương trình máy tính vừa mở ra.
  18. Bây giờ hãy thử chuyển đổi lệnh. Nhập powershell -command “Write-Host ‘This is a bypass test.’ calc.exe” và nhấn Enter. Đóng chương trình máy tính vừa mở ra.(Hình ảnh cửa sổ PowerShell với lệnh và chương trình máy tính đang mở)
  19. Bạn sẽ thấy rằng lệnh này hoạt động để vượt qua.
  20. Tiếp theo, sử dụng lệnh Invoke-Expression. Nhập Get-Content .\test.ps1 | Invoke-Expression và nhấn Enter. Đóng chương trình máy tính vừa mở ra.(Hình ảnh cửa sổ PowerShell với lệnh và chương trình máy tính đang mở)
  21. Bây giờ, hãy nhập powershell -ExecutionPolicy Bypass -File .\test.ps1 và nhấn Enter. Đóng chương trình máy tính vừa mở ra.(Hình ảnh cửa sổ PowerShell với lệnh và chương trình máy tính đang mở)
  22. Lệnh này cũng hoạt động và đã được ghi nhận là một lý do khiến ExecutionPolicy không phải là một tính năng bảo mật. Một phương pháp khác để đặt Scope là nhập Set-ExecutionPolicy Bypass -Scope Process và nhấn Enter. Một lời nhắc cảnh báo xuất hiện, nhập Y và nhấn Enter.
  23. Để kiểm tra xem nó đã hoạt động hay chưa, hãy kiểm tra lại chính sách. Nhập Get-ExecutionPolicy -List | Format-Table -AutoSize và nhấn Enter.(Hình ảnh cửa sổ PowerShell hiển thị danh sách các chính sách thực thi)
  24. Bây giờ, nhập .\test.ps1 và nhấn Enter.(Hình ảnh cửa sổ PowerShell với lệnh và chương trình máy tính đang mở)
  25. Bây giờ bạn đã quen với nhiều cách để vượt qua ExecutionPolicy. Tài liệu này sử dụng Windows Server 2019. Bài tập này kết thúc tại đây.

Bình luận về bài viết này

Thịnh hành