mirror of
https://github.com/Adaptix-Framework/AdaptixC2
synced 2026-06-08 10:20:39 +00:00
rportfwd fix
This commit is contained in:
@@ -48,7 +48,7 @@ type Teamserver interface {
|
||||
TsAgentTerminate(agentId string, terminateTaskId string) error
|
||||
TsAgentRemove(agentId string) error
|
||||
TsAgentConsoleRemove(agentId string) error
|
||||
TsAgentSetTick(agentId string) error
|
||||
TsAgentSetTick(agentId string, listenerName string) error
|
||||
TsAgentTickUpdate()
|
||||
TsAgentConsoleOutput(agentId string, messageType int, message string, clearText string, store bool)
|
||||
TsAgentConsoleOutputClient(agentId string, client string, messageType int, message string, clearText string)
|
||||
|
||||
@@ -786,7 +786,7 @@ func (ts *Teamserver) TsAgentRemove(agentId string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ts *Teamserver) TsAgentSetTick(agentId string) error {
|
||||
func (ts *Teamserver) TsAgentSetTick(agentId string, listenerName string) error {
|
||||
value, ok := ts.Agents.Get(agentId)
|
||||
if !ok {
|
||||
return fmt.Errorf("agent type %v does not exists", agentId)
|
||||
@@ -797,12 +797,34 @@ func (ts *Teamserver) TsAgentSetTick(agentId string) error {
|
||||
}
|
||||
|
||||
agentData := agent.GetData()
|
||||
|
||||
listenerChanged := listenerName != "" && agentData.Listener != listenerName
|
||||
|
||||
if agentData.Async {
|
||||
agent.UpdateData(func(d *adaptix.AgentData) {
|
||||
d.LastTick = int(time.Now().Unix())
|
||||
})
|
||||
_ = ts.DBMS.DbAgentTick(agent.GetData())
|
||||
if listenerChanged {
|
||||
agent.UpdateData(func(d *adaptix.AgentData) {
|
||||
d.LastTick = int(time.Now().Unix())
|
||||
d.Listener = listenerName
|
||||
})
|
||||
updatedAgentData := agent.GetData()
|
||||
packet := CreateSpAgentUpdate(updatedAgentData)
|
||||
ts.TsSyncAllClients(packet)
|
||||
_ = ts.DBMS.DbAgentUpdate(updatedAgentData)
|
||||
} else {
|
||||
agent.UpdateData(func(d *adaptix.AgentData) {
|
||||
d.LastTick = int(time.Now().Unix())
|
||||
})
|
||||
_ = ts.DBMS.DbAgentTick(agent.GetData())
|
||||
}
|
||||
agent.Tick = true
|
||||
} else if listenerChanged {
|
||||
agent.UpdateData(func(d *adaptix.AgentData) {
|
||||
d.Listener = listenerName
|
||||
})
|
||||
updatedAgentData := agent.GetData()
|
||||
packet := CreateSpAgentUpdate(updatedAgentData)
|
||||
ts.TsSyncAllClients(packet)
|
||||
_ = ts.DBMS.DbAgentUpdate(updatedAgentData)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -159,12 +159,12 @@ func (ts *Teamserver) TsTaskGetAvailableAll(agentId string, availableSize int) (
|
||||
ts.TsSyncAllClients(packet)
|
||||
}
|
||||
|
||||
tunnelTasks, size := ts.extractTunnelTasks(agent, availableSize, size)
|
||||
tasks = append(tasks, tunnelTasks...)
|
||||
|
||||
tunnelData, size := ts.extractTunnelData(agent, availableSize, size)
|
||||
tasks = append(tasks, tunnelData...)
|
||||
|
||||
tunnelTasks, size := ts.extractTunnelTasks(agent, availableSize, size)
|
||||
tasks = append(tasks, tunnelTasks...)
|
||||
|
||||
pivotTasks, _ := ts.extractPivotTasks(agent, availableSize, size)
|
||||
tasks = append(tasks, pivotTasks...)
|
||||
|
||||
|
||||
@@ -877,7 +877,9 @@ func relaySocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tunCha
|
||||
}
|
||||
|
||||
go func() {
|
||||
defer finish()
|
||||
if direct {
|
||||
defer finish()
|
||||
}
|
||||
if tunChannel.pwSrv == nil || tunChannel.conn == nil {
|
||||
logs.Debug("", "[ERROR relaySocketToTunnel] pwSrv or conn == nil — copy (pwSrv <- conn)")
|
||||
return
|
||||
@@ -889,7 +891,9 @@ func relaySocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tunCha
|
||||
}()
|
||||
|
||||
go func() {
|
||||
defer finish()
|
||||
if direct {
|
||||
defer finish()
|
||||
}
|
||||
if tunChannel.prTun == nil || tunChannel.conn == nil {
|
||||
logs.Debug("", "[ERROR relaySocketToTunnel] prTun or conn == nil — copy (conn <- prTun)")
|
||||
return
|
||||
@@ -904,6 +908,7 @@ func relaySocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tunCha
|
||||
|
||||
if !direct {
|
||||
go func() {
|
||||
defer finish()
|
||||
buf := tm.GetBuffer()
|
||||
defer tm.PutBuffer(buf)
|
||||
for {
|
||||
@@ -944,7 +949,9 @@ func relayWebsocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tun
|
||||
}
|
||||
|
||||
go func() {
|
||||
defer finish()
|
||||
if direct {
|
||||
defer finish()
|
||||
}
|
||||
if tunChannel.wsconn == nil || tunChannel.pwSrv == nil {
|
||||
return
|
||||
}
|
||||
@@ -961,7 +968,9 @@ func relayWebsocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tun
|
||||
}()
|
||||
|
||||
go func() {
|
||||
defer finish()
|
||||
if direct {
|
||||
defer finish()
|
||||
}
|
||||
if tunChannel.wsconn == nil || tunChannel.prTun == nil {
|
||||
return
|
||||
}
|
||||
@@ -982,6 +991,7 @@ func relayWebsocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tun
|
||||
|
||||
if !direct {
|
||||
go func() {
|
||||
defer finish()
|
||||
buf := tm.GetBuffer()
|
||||
defer tm.PutBuffer(buf)
|
||||
for {
|
||||
|
||||
@@ -16,7 +16,7 @@ type Teamserver interface {
|
||||
TsAgentIsExists(agentId string) bool
|
||||
TsAgentCreate(agentCrc string, agentId string, beat []byte, listenerName string, ExternalIP string, Async bool) (adaptix.AgentData, error)
|
||||
TsAgentProcessData(agentId string, bodyData []byte) error
|
||||
TsAgentSetTick(agentId string) error
|
||||
TsAgentSetTick(agentId string, listenerName string) error
|
||||
TsAgentGetHostedAll(agentId string, maxDataSize int) ([]byte, error)
|
||||
}
|
||||
|
||||
|
||||
@@ -287,12 +287,12 @@ func (t *TransportDNS) handleHI(req *dnsRequest, w dns.ResponseWriter) {
|
||||
externalIP := "" // extractExternalIP(w.RemoteAddr())
|
||||
_, _ = Ts.TsAgentCreate(agentType, agentId, beat, t.Name, externalIP, true)
|
||||
}
|
||||
_ = Ts.TsAgentSetTick(agentId)
|
||||
_ = Ts.TsAgentSetTick(agentId, t.Name)
|
||||
}
|
||||
|
||||
func (t *TransportDNS) handleHB(req *dnsRequest) (needsReset bool, hasPendingTasks bool) {
|
||||
if req.sid != "" {
|
||||
_ = Ts.TsAgentSetTick(req.sid)
|
||||
_ = Ts.TsAgentSetTick(req.sid, t.Name)
|
||||
}
|
||||
|
||||
// Check if this SID needs reset
|
||||
@@ -343,7 +343,7 @@ func (t *TransportDNS) handleHB(req *dnsRequest) (needsReset bool, hasPendingTas
|
||||
|
||||
func (t *TransportDNS) handleGET(req *dnsRequest, w dns.ResponseWriter) []byte {
|
||||
if req.sid != "" {
|
||||
_ = Ts.TsAgentSetTick(req.sid)
|
||||
_ = Ts.TsAgentSetTick(req.sid, t.Name)
|
||||
}
|
||||
|
||||
decrypted := rc4Crypt(req.data, t.Config.EncryptKey)
|
||||
@@ -402,7 +402,7 @@ func (t *TransportDNS) handlePUT(req *dnsRequest) putAckInfo {
|
||||
ack = t.handlePutFragment(req.sid, req.seq, decrypted, ack)
|
||||
|
||||
if req.sid != "" {
|
||||
_ = Ts.TsAgentSetTick(req.sid)
|
||||
_ = Ts.TsAgentSetTick(req.sid, t.Name)
|
||||
}
|
||||
return ack
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ type Teamserver interface {
|
||||
TsAgentIsExists(agentId string) bool
|
||||
TsAgentCreate(agentCrc string, agentId string, beat []byte, listenerName string, ExternalIP string, Async bool) (adaptix.AgentData, error)
|
||||
TsAgentProcessData(agentId string, bodyData []byte) error
|
||||
TsAgentSetTick(agentId string) error
|
||||
TsAgentSetTick(agentId string, listenerName string) error
|
||||
TsAgentGetHostedAll(agentId string, maxDataSize int) ([]byte, error)
|
||||
}
|
||||
|
||||
|
||||
@@ -336,7 +336,7 @@ func (t *TransportHTTP) processRequest(ctx *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
_ = Ts.TsAgentSetTick(agentId)
|
||||
_ = Ts.TsAgentSetTick(agentId, t.Name)
|
||||
|
||||
_ = Ts.TsAgentProcessData(agentId, bodyData)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
type Teamserver interface {
|
||||
TsAgentIsExists(agentId string) bool
|
||||
TsAgentCreate(agentCrc string, agentId string, beat []byte, listenerName string, ExternalIP string, Async bool) (adaptix.AgentData, error)
|
||||
TsAgentSetTick(agentId string) error
|
||||
TsAgentSetTick(agentId string, listenerName string) error
|
||||
TsAgentProcessData(agentId string, bodyData []byte) error
|
||||
TsAgentGetHostedAll(agentId string, maxDataSize int) ([]byte, error)
|
||||
TsAgentGetHostedTasks(agentId string, maxDataSize int) ([]byte, error)
|
||||
|
||||
@@ -305,7 +305,7 @@ func (t *TransportTCP) handleConnection(conn net.Conn, ts Teamserver) {
|
||||
break
|
||||
}
|
||||
|
||||
_ = Ts.TsAgentSetTick(agentId)
|
||||
_ = Ts.TsAgentSetTick(agentId, t.Name)
|
||||
|
||||
_ = Ts.TsAgentProcessData(agentId, recvData)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user