wip: Almost back to initial functionalit

This commit is contained in:
Alexandre Beaulieu 2019-04-15 15:43:14 -04:00
commit 7ff1ae1762
No known key found for this signature in database
GPG key ID: 8B02EA7AE3FC7081

View file

@ -1,7 +1,7 @@
package rdp_proxy package rdp_proxy
// TESTING: // TESTING:
// set arp.spoof.targets '192.168.151.174' //
import ( import (
"fmt" "fmt"
"net" "net"
@ -41,7 +41,7 @@ func NewRdpProxy(s *session.Session) *RdpProxy {
done: make(chan bool), done: make(chan bool),
queue: nil, queue: nil,
queueNum: 0, queueNum: 0,
port: 0, port: 3389,
startPort: 40000, startPort: 40000,
cmd: "pyrdp-mitm", cmd: "pyrdp-mitm",
targets: "<All Subnets>", targets: "<All Subnets>",
@ -110,20 +110,13 @@ func (mod *RdpProxy) destroyQueue() {
mod.queue = nil mod.queue = nil
} }
// "iptables -I 1 -p tcp -m tcp --dport 3389 -d 10.0.0.0/24 -j NFQUEUE --queue-num 0 --queue-bypass"
// Starts or stops a particular proxy instances. // Starts or stops a particular proxy instances.
func (mod *RdpProxy) proxy(target net.Addr) (err error) { func (mod *RdpProxy) pyRdp(target net.Addr) (err error) {
args := []string{ _, err = core.Exec("iptables", []string { "-t", "nat",
"-j", "NFQUEUE", "-I", "BCAPRDP", "1",
"--queue-num", fmt.Sprintf("%d", mod.queueNum), "-p" "tcp" "--dport", fmt.Sprintf("%d", mod.port),
"--queue-bypass", "-j" "REDIRECT" "--to-ports", fmt.Sprintf("%d", mod.instancePort),
} })
mod.Debug("iptables %s", args)
// _, err = core.Exec("iptables", args)
return return
} }
@ -156,7 +149,6 @@ func (mod *RdpProxy) configureFirewall(enable bool) (err error) {
return return
} }
func (mod *RdpProxy) Configure() (err error) { func (mod *RdpProxy) Configure() (err error) {
golog.SetOutput(ioutil.Discard) golog.SetOutput(ioutil.Discard)
mod.destroyQueue() mod.destroyQueue()
@ -191,8 +183,10 @@ func (mod *RdpProxy) Configure() (err error) {
func (mod *RdpProxy) handleRdpConnection(payload *nfqueue.Payload) int { func (mod *RdpProxy) handleRdpConnection(payload *nfqueue.Payload) int {
// 1. Determine source and target addresses. // 1. Determine source and target addresses.
p := gopacket.NewPacket(payload.Data, layers.LayerTypeEthernet, gopacket.NoCopy) p := gopacket.NewPacket(payload.Data, layers.LayerTypeIPv4, gopacket.Default)
mod.Info("New Connection: %v", p) src, sport := p.NetworkLayer().NetworkFlow().Src(), p.TransportLayer().TransportFlow().Src()
dst, dport := p.NetworkLayer().NetworkFlow().Dst(), p.TransportLayer().TransportFlow().Dst()
mod.Info("Connection [%v:%v -> %v:%v]", src, sport, dst, dport)
// 2. Check if the destination IP already has a PYRDP session active, if so, do nothing. // 2. Check if the destination IP already has a PYRDP session active, if so, do nothing.
// 3. Otherwise: // 3. Otherwise: