2017-11-28 3 views
0

私はGoを介してbashシェルを生成する制限付きシェルをエスケープしたいと思っています。言い換えれば、私はこれをやってみたいが、Goを使う:を使って "nc -e/bin/bash"からTTYを持つシェルを作成するには

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

私は全く新しいです。私は(この質問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() 
} 

また、私は何も

UPDATE

を印刷されていない主な機能の最後で fmt.Println("hello")行を追加する場合

おそらく、私はうまくいきませんでした。私が達成しようとしているのは、制限されたシェルを取得したシェルを生成することです。これは私がやったことです: リスナー:

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

はリスナーに接続します。そして、私はあなたのプログラムは、私のために正常に動作し、ここで

nc.traditional localhost 8080 -v 

答えて

2

コードをexecし。私はいくつかのエラーをチェックし、何が起こっているのかを明確にする余分な印刷ステートメントを入れました。あなたは対話シェルを手に入れています。ちょうどとちょうどがあなたの前のシェルのように見えます。ここで

$ 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") 
} 
+0

おかげです。私は質問を更新しました。実際、もし私がこれをすべてttyシェルから実行すると、動作しますが、そうではありません。私がうまく説明しなかったら謝る – v8rs

関連する問題