wip: rough edges of rdp proxy

This commit is contained in:
Alexandre Beaulieu 2019-04-15 08:44:41 -04:00
commit 64f16ce418
No known key found for this signature in database
GPG key ID: 8B02EA7AE3FC7081

View file

@ -20,13 +20,12 @@ import (
type RdpProxy struct { type RdpProxy struct {
session.SessionModule session.SessionModule
done chan bool done chan bool
chainName string
rule string
queue *nfqueue.Queue queue *nfqueue.Queue
queueNum int queueNum int
queueCb nfqueue.Callback queueCb nfqueue.Callback
pluginPath string port int
plugin *plugin.Plugin start_port int
targets net.IPv4[]
} }
var mod *RdpProxy var mod *RdpProxy
@ -37,30 +36,37 @@ func NewRdpProxy(s *session.Session) *RdpProxy {
done: make(chan bool), done: make(chan bool),
queue: nil, queue: nil,
queueCb: nil, queueCb: nil,
port: 0,
start_port: 40000,
queueNum: 0, queueNum: 0,
chainName: "OUTPUT", chainName: "OUTPUT",
} }
mod.AddHandler(session.NewModuleHandler("rdp.proxy on", "", mod.AddHandler(session.NewModuleHandler("rdp.proxy on", "", "Start the RDP proxy.",
"Start the RDP proxy.",
func(args []string) error { func(args []string) error {
return mod.Start() return mod.Start()
})) }))
mod.AddHandler(session.NewModuleHandler("rdp.proxy off", "", mod.AddHandler(session.NewModuleHandler("rdp.proxy off", "", "Stop the RDP proxy.",
"Stop the RDP proxy.",
func(args []string) error { func(args []string) error {
return mod.Stop() return mod.Stop()
})) }))
mod.AddParam(session.NewIntParameter("rdp.proxy.queue.num", mod.AddParam(session.NewIntParameter("rdp.proxy.queue.num", "0", "NFQUEUE number to bind to."))
"0", mod.AddParam(session.NewIntParameter("rdp.proxy.port", "3389", "RDP port to intercept."))
"NFQUEUE number to bind to."))
mod.AddParam(session.NewIntParameter("rdp.proxy.port", /* NOTES
"3389", * - The RDP port
"RDP port to intercept." * - The target source IPs (This can actually be handled by ARP.Spoof)
)) * - The target destination IPs
* - Starting Port
* - Maximum Instances (future)
* - RDP Command (if not pyrdp-mitm)
*
* FUTURE WORK:
* - Centralized Instance of pyrdp
*/
// mod.AddParam(session.NewStringParameter("rdp.proxy.targets", // mod.AddParam(session.NewStringParameter("rdp.proxy.targets",
// session.ParamSubnet, // session.ParamSubnet,
@ -70,14 +76,9 @@ func NewRdpProxy(s *session.Session) *RdpProxy {
// TODO: Should support comma separated subnets // TODO: Should support comma separated subnets
// mod.AddParam(session.NewStringParameter("rdp.proxy.targets", "3389", session.IPv4RangeValidator "RDP port to intercept.")) // mod.AddParam(session.NewStringParameter("rdp.proxy.targets", "3389", session.IPv4RangeValidator "RDP port to intercept."))
mod.AddParam(session.NewIntParameter("rdp.proxy.start", mod.AddParam(session.NewIntParameter("rdp.proxy.start", "40000", "", "Starting port for pyrdp sessionss"))
"40000", mod.AddParam(session.NewStringParameter("rdp.proxy.command", "pyrdp-mitm", "The PyRDP base command to launch the man-in-the-middle."))
"", mod.AddParam(session.NewStringParameter("rdp.proxy.targets", "<All Subnets>", "A comma delimited list of destination IPs or CIDRs to target."))
"Starting port for pyrdp sessionss"))
mod.AddParam(session.NewStringParameter("rdp.proxy.command",
"pyrdp-mitm",
"The PyRDP base command to launch the man-in-the-middle."))
return mod return mod
} }
@ -185,9 +186,12 @@ func (mod *RdpProxy) Configure() (err error) {
return nil return nil
} }
// we need this because for some reason we can't directly func OnRDPConnection(payload *nfqueue.Payload) int {
// pass the symbol loaded from the plugin as a direct log.Info("New Connection: %v", payload)
// CGO callback ... ¯\_(ツ)_/¯ // TODO: Find a more efficient way to do this.
payload.SetVerdict(nfqueue.NF_DROP) // Force a retransmit to trigger the new firewall rules.
return 0
}
func dummyCallback(payload *nfqueue.Payload) int { func dummyCallback(payload *nfqueue.Payload) int {
return mod.queueCb(payload) return mod.queueCb(payload)
} }