使用Go从" nc -e / bin / bash"生成带有TTY的shell。

时间:2017-11-28 20:38:14

标签: bash shell go

我想通过Go转义一个受限制的shell,它会产生一个bash shell。换句话说,我想这样做,但使用Go:

python -c 'import pty; pty.spawn("/bin/bash")'

我是Go的新手。我试过这个(按照这个问题的答案Go: How to spawn a bash shell)但没有任何反应:

package main

import "os"
import "os/exec"

func main() {
    shell := exec.Command("/bin/bash")
    shell.Stdout = os.Stdout
    shell.Stdin = os.Stdin
    shell.Stderr = os.Stderr
    shell.Run()
}

此外,如果我在主函数的末尾添加fmt.Println("hello")行,则不会打印任何内容

更新

也许我没有得到很好的解释。我正在努力实现它生成一个shell得到一个受限制的shell。这就是我做的: 监听器:

nc.traditional -l -p 8080 -e /bin/bash

连接到监听器:我在这里执行代码

nc.traditional localhost 8080 -v

1 个答案:

答案 0 :(得分:2)

你的程序对我来说很好。我把一些错误检查和一个额外的打印声明,这应该使发生的事情更清楚。你正在获得一个交互式shell,它看起来像你以前的shell一样完全

$ go run Go/shell.go 
$ # whoa another shell
$ exit
exit
exiting
$ # back again
$ 

以下是修订后的计划

package main

import (
    "fmt"
    "log"
    "os"
    "os/exec"
)

func main() {
    shell := exec.Command("/bin/bash")
    shell.Stdout = os.Stdout
    shell.Stdin = os.Stdin
    shell.Stderr = os.Stderr
    err := shell.Run()
    if err != nil {
        log.Fatalf("command failed: %v", err)
    }
    fmt.Printf("exiting\n")
}