-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
new: session scripts can now include other scripts via require('file')
- Loading branch information
1 parent
2b1ff7d
commit 8827a2a
Showing
6 changed files
with
94 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
*.sw* | ||
*.tar.gz | ||
*.prof* | ||
betterbot.js | ||
_example/config.js | ||
pcaps | ||
build | ||
bettercap | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
var wifiInterface = 'put the wifi interface to put in monitor mode here'; | ||
var telegramToken = 'put your telegram bot token here'; | ||
var telegramChatId = 'put your telegram chat id here'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
function sendMessage(message) { | ||
var url = 'https://api.telegram.org/bot' + telegramToken + | ||
'/sendMessage?chat_id=' + telegramChatId + | ||
'&text=' + http.Encode(message); | ||
|
||
var resp = http.Get(url, {}); | ||
if( resp.Error ) { | ||
log("error while running sending telegram message: " + resp.Error.Error()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,93 @@ | ||
package session | ||
|
||
import ( | ||
"fmt" | ||
"github.com/bettercap/bettercap/caplets" | ||
_ "github.com/bettercap/bettercap/js" | ||
"github.com/evilsocket/islazy/fs" | ||
"github.com/evilsocket/islazy/plugin" | ||
"github.com/evilsocket/islazy/str" | ||
"io/ioutil" | ||
"path/filepath" | ||
"regexp" | ||
"strings" | ||
) | ||
|
||
// require("telegram.js") | ||
var requireParser = regexp.MustCompile(`(?msi)^\s*require\s*\(\s*["']([^"']+)["']\s*\);?\s*$`) | ||
|
||
type Script struct { | ||
*plugin.Plugin | ||
} | ||
|
||
func LoadScript(fileName string, ses *Session) (*Script, error) { | ||
if p, err := plugin.Load(fileName); err != nil { | ||
// yo! we're doing c-like preprocessing on a javascript file from go :D | ||
func preprocess(basePath string, code string, level int) (string, error) { | ||
if level >= 255 { | ||
return "", fmt.Errorf("too many nested includes") | ||
} | ||
|
||
matches := requireParser.FindAllStringSubmatch(code, -1) | ||
for _, match := range matches { | ||
expr := match[0] | ||
fileName := str.Trim(match[1]) | ||
|
||
if fileName[0] != '/' { | ||
searchPaths := []string{ | ||
filepath.Join(basePath, fileName), | ||
filepath.Join(caplets.InstallBase, fileName), | ||
} | ||
|
||
if strings.Contains(fileName, ".js") == false { | ||
searchPaths = append(searchPaths, []string{ | ||
filepath.Join(basePath, fileName) + ".js", | ||
filepath.Join(caplets.InstallBase, fileName) + ".js", | ||
}...) | ||
} | ||
|
||
found := false | ||
for _, fName := range searchPaths { | ||
if fs.Exists(fName) { | ||
fileName = fName | ||
found = true | ||
break | ||
} | ||
} | ||
if !found { | ||
return "", fmt.Errorf("file %s not found in any of %#v", fileName, searchPaths) | ||
} | ||
} | ||
|
||
raw, err := ioutil.ReadFile(fileName) | ||
if err != nil { | ||
return "", fmt.Errorf("%s: %v", fileName, err) | ||
} | ||
|
||
if includedBody, err := preprocess(filepath.Dir(fileName), string(raw), level+1); err != nil { | ||
return "", fmt.Errorf("%s: %v", fileName, err) | ||
} else { | ||
code = strings.ReplaceAll(code, expr, includedBody) | ||
} | ||
} | ||
|
||
return code, nil | ||
} | ||
|
||
func LoadScript(fileName string) (*Script, error) { | ||
raw, err := ioutil.ReadFile(fileName) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
basePath := filepath.Dir(fileName) | ||
if code, err := preprocess(basePath, string(raw), 0); err != nil { | ||
return nil, err | ||
} else if p, err := plugin.Parse(code); err != nil { | ||
return nil, err | ||
} else { | ||
p.Path = fileName | ||
p.Name = strings.Replace(basePath, ".js", "", -1) | ||
return &Script{ | ||
Plugin: p, | ||
Plugin: p, | ||
}, nil | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters