mirror of
https://github.com/bettercap/bettercap
synced 2025-08-24 15:16:18 -07:00
wip: rough edges of rdp proxy
This commit is contained in:
parent
d4ca144a23
commit
64f16ce418
1 changed files with 150 additions and 146 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue