diff --git a/client/command/jobs/wg.go b/client/command/jobs/wg.go index 06ff1b91c..3c77f717c 100644 --- a/client/command/jobs/wg.go +++ b/client/command/jobs/wg.go @@ -41,6 +41,6 @@ func WGListenerCmd(ctx *grumble.Context, con *console.SliverConsoleClient) { if err != nil { con.PrintErrorf("%s\n", err) } else { - con.PrintInfof("Successfully started job #%d\n", wg.ID) + con.PrintInfof("Successfully started job #%d\n", wg.JobID) } } diff --git a/server/db/models/jobs.go b/server/db/models/jobs.go index 17f30ef9b..f1537c670 100644 --- a/server/db/models/jobs.go +++ b/server/db/models/jobs.go @@ -33,7 +33,7 @@ type ListenerJob struct { JobID uint32 Type string HttpListener HTTPListener - MtlsListener MTLSListener + MtlsListener MtlsListener DnsListener DNSListener WgListener WGListener MultiplayerListener MultiplayerListener @@ -61,7 +61,7 @@ type DNSListener struct { ID uuid.UUID `gorm:"primaryKey;->;<-:create;type:uuid;"` ListenerJobID uuid.UUID `gorm:"type:uuid;"` - Domains []Domain + Domains []DnsDomain Canaries bool Host string Port uint32 @@ -78,7 +78,7 @@ type WGListener struct { TunIP string } -type MTLSListener struct { +type MtlsListener struct { ID uuid.UUID `gorm:"primaryKey;->;<-:create;type:uuid;"` ListenerJobID uuid.UUID `gorm:"type:uuid;"` Host string @@ -92,7 +92,7 @@ type MultiplayerListener struct { Port uint32 } -type Domain struct { +type DnsDomain struct { ID uuid.UUID `gorm:"primaryKey;->;<-:create;type:uuid;"` DNSListenerID uuid.UUID `gorm:"type:uuid;"` Domain string @@ -132,7 +132,7 @@ func (j *WGListener) BeforeCreate(tx *gorm.DB) (err error) { return nil } -func (j *MTLSListener) BeforeCreate(tx *gorm.DB) (err error) { +func (j *MtlsListener) BeforeCreate(tx *gorm.DB) (err error) { j.ID, err = uuid.NewV4() if err != nil { return err @@ -196,7 +196,7 @@ func (j *WGListener) ToProtobuf() *clientpb.WGListenerReq { } } -func (j *MTLSListener) ToProtobuf() *clientpb.MTLSListenerReq { +func (j *MtlsListener) ToProtobuf() *clientpb.MTLSListenerReq { return &clientpb.MTLSListenerReq{ Host: j.Host, Port: j.Port, @@ -249,14 +249,14 @@ func ListenerJobFromProtobuf(pbListenerJob *clientpb.ListenerJob) *ListenerJob { RandomizeJarm: pbListenerJob.HTTPConf.RandomizeJARM, } case "mtls": - cfg.MtlsListener = MTLSListener{ + cfg.MtlsListener = MtlsListener{ Host: pbListenerJob.MTLSConf.Host, Port: pbListenerJob.MTLSConf.Port, } case "dns": - var domains []Domain + var domains []DnsDomain for _, domain := range pbListenerJob.DNSConf.Domains { - domains = append(domains, Domain{Domain: domain}) + domains = append(domains, DnsDomain{Domain: domain}) } cfg.DnsListener = DNSListener{ Domains: domains, @@ -265,7 +265,7 @@ func ListenerJobFromProtobuf(pbListenerJob *clientpb.ListenerJob) *ListenerJob { Port: pbListenerJob.DNSConf.Port, EnforceOtp: pbListenerJob.DNSConf.EnforceOTP, } - case "WG": + case "wg": cfg.WgListener = WGListener{ Host: pbListenerJob.WGConf.Host, Port: pbListenerJob.WGConf.Port, diff --git a/server/db/sql.go b/server/db/sql.go index 58bea22f5..c5080a28a 100644 --- a/server/db/sql.go +++ b/server/db/sql.go @@ -90,6 +90,8 @@ func newDBClient() *gorm.DB { &models.DNSListener{}, &models.WGListener{}, &models.MultiplayerListener{}, + &models.MtlsListener{}, + &models.DnsDomain{}, ) if err != nil { clientLog.Error(err) diff --git a/server/rpc/rpc-jobs.go b/server/rpc/rpc-jobs.go index 0fe4d579b..db138d01d 100644 --- a/server/rpc/rpc-jobs.go +++ b/server/rpc/rpc-jobs.go @@ -89,12 +89,11 @@ func (rpc *Server) StartMTLSListener(ctx context.Context, req *clientpb.MTLSList if 65535 <= req.Port { return nil, ErrInvalidPort } - listenPort := uint16(defaultMTLSPort) - if req.Port != 0 { - listenPort = uint16(req.Port) + if req.Port == 0 { + req.Port = defaultMTLSPort } - job, err := c2.StartMTLSListenerJob(req.Host, listenPort) + job, err := c2.StartMTLSListenerJob(req.Host, uint16(req.Port)) if err != nil { return nil, err } @@ -105,7 +104,10 @@ func (rpc *Server) StartMTLSListener(ctx context.Context, req *clientpb.MTLSList MTLSConf: req, } listenerModel := models.ListenerJobFromProtobuf(listenerJob) - db.HTTPC2ListenerSave(listenerModel) + err = db.HTTPC2ListenerSave(listenerModel) + if err != nil { + return nil, err + } return &clientpb.ListenerJob{JobID: uint32(job.ID)}, nil } @@ -142,7 +144,10 @@ func (rpc *Server) StartWGListener(ctx context.Context, req *clientpb.WGListener WGConf: req, } listenerModel := models.ListenerJobFromProtobuf(listenerJob) - db.HTTPC2ListenerSave(listenerModel) + err = db.HTTPC2ListenerSave(listenerModel) + if err != nil { + return nil, err + } return &clientpb.ListenerJob{JobID: uint32(job.ID)}, nil } @@ -162,7 +167,16 @@ func (rpc *Server) StartDNSListener(ctx context.Context, req *clientpb.DNSListen return nil, err } - // TODO save listener to db + listenerJob := &clientpb.ListenerJob{ + JobID: uint32(job.ID), + Type: "dns", + DNSConf: req, + } + listenerModel := models.ListenerJobFromProtobuf(listenerJob) + err = db.HTTPC2ListenerSave(listenerModel) + if err != nil { + return nil, err + } return &clientpb.ListenerJob{JobID: uint32(job.ID)}, nil } @@ -183,11 +197,14 @@ func (rpc *Server) StartHTTPSListener(ctx context.Context, req *clientpb.HTTPLis listenerJob := &clientpb.ListenerJob{ JobID: uint32(job.ID), - Type: "http", + Type: "https", HTTPConf: req, } listenerModel := models.ListenerJobFromProtobuf(listenerJob) - db.HTTPC2ListenerSave(listenerModel) + err = db.HTTPC2ListenerSave(listenerModel) + if err != nil { + return nil, err + } return &clientpb.ListenerJob{JobID: uint32(job.ID)}, nil } @@ -212,7 +229,10 @@ func (rpc *Server) StartHTTPListener(ctx context.Context, req *clientpb.HTTPList HTTPConf: req, } listenerModel := models.ListenerJobFromProtobuf(listenerJob) - db.HTTPC2ListenerSave(listenerModel) + err = db.HTTPC2ListenerSave(listenerModel) + if err != nil { + return nil, err + } return &clientpb.ListenerJob{JobID: uint32(job.ID)}, nil }