1.端口转发
将内网端口转发到别的端口上。
例如一个攻击机,一个服务器,一个内网的被攻击机;攻击机想远程桌面连接内网的被攻击机,可以通过服务器的端口转发,将内网的被攻击机的3389端口转发到服务器上的3333端口,攻击机访问服务器的3333端口就相当与访问内网主机的3389端口。
使用lcx.exe向服务器进行转发端口
lcx.exe -slave 服务器ip 3333 127.0.0.1 3389
服务器端将3333端口再转发到3331端口
lcx.exe -listen 3333 3331
攻击机访问服务器的3331端口,就相当于访问了内网被攻击机的3389端口。
2.端口映射
将内网端口完全映射到外网的端口上。
例如:一个内网的web服务器,不是一个内网的客户端没有办法访问它,那就将内网的web服务器的80端口映射到外网的指定端口,客户端就可以访问外网的指定端口来向内网的web服务器进行访问,访问后路由器将信息转发给内网服务器,服务器收到信息将返回信息发给路由器,路由器有一个身份识别session,会对从服务器发过来的信息进行区分,发给指定客户端。
3.端口转发和端口映射的区别
两者可以说是用不同的方式进行相同的目的。
就像饭店做菜一样,厨师就像内网的端口,服务员就像路由器,客人就像客户端。
端口转发:客人点完菜,服务员会跟厨师说是哪位客人点的菜。
端口映射:客人点完菜,厨师不知道是谁点的菜,只管做菜,将菜做好交给服务员,服务员进行上菜给指定客人。
还有一个区别:
端口转发相对来说私密性。
端口映射是开放的。
4. 正向代理和反向代理
4.1 正向代理
客户端访问web服务器,正向代理就是有一个代理服务器代替客户端访问web服务器,客户端讲请求发给代理服务器,代理服务器再将请求发给web服务器,然后再依次返回到客户端。也就是客户端代理。
因为web服务器接收到的是来自代理服务器发来的请求,没办法判断是客户端还是服务器。
4.2 反向代理
客户端访问web服务器,也是在中间设置一个代理服务器,但这个是代理web服务器的,代理服务器接收到客户端的请求,将请求发送给web服务器,再依次返回到客户端。也就是服务端代理。
反向代理的服务器可以代理很多web服务器,所以反向代理服务器可以作为公网的域名,客户端无法知道访问的是代理服务器还是web服务器。
4.3 区别
举个栗子
正向代理:饭店里只有一个厨师,好几桌客人点完菜后,服务员跟厨师说炒哪些菜,厨师不知道是呢做客人点,只管做完,由服务员上菜。
反向代理:饭店里有4位厨师,有一桌客人点了4个菜,服务员跟厨师说谁点的哪些菜,4个菜一个厨师做一道,由服务员上菜,客人不知道是哪位厨师做的。
还有可能正向代理反向代理都有。
内网穿透技术
在自己的vps和内网的主机之间建立连接,然后外网的主机通过自己的vps就可以更加方便的访问到内网的主机。
内网穿透和端口映射和端口转发的区别:
端口映射是一种开放的服务,内网穿透是一个隧道,较为私密的。其实内网穿透相当与是一个私密型的端口映射。
内网穿透也和端口转发相似,但内网穿透根本没有转发。
就像你在内网有一台web服务器,没有任何操作的情况下外网是无法访问这个web服务器的,但你想简简单单的让几个人连接的的话可以用内网穿透,如果你想让web服务器对外网开放就要用端口映射。
常见内网穿透工具:frp、nps、reGeorg
1. frp
frp工具支持很多种协议,来适应不同的环境
类型 | 描述 |
tcp | 单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
udp | 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
http | 针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。 |
https | 针对 HTTPS 应用定制了一些额外的功能。 |
stcp | 安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 |
sudp | 安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 |
xtcp | 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。 |
tcpmux | 支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。 |
在客户端配置中的type中设置即可
1.1 服务端设置
在vps上下载frp,并配置frps.ini文件
[common]
bind_addr = 0.0.0.0 #绑定的ip,为本机(0.0.0.0为任意ip)
bind_port = 6666 #绑定的端口
dashboard_addr = 0.0.0.0 #管理后台地址
dashboard_port = 6661 #管理管理后台端口
dashboard_user = root #管理的用户名
dashboard_pwd = neo #管理用户的密码
token = admin123 #客户端服务端连接的密码
heartbeat_timeout = 90 #心跳超时时间
max_pool_count = 5 #最大同时连接数
log_file = ./frps.log #frp默认日志输出位置
log_level = info #日志级别(debug,ifo,warn,error)
log_max_days = 20 #日志最大保存天数
subdomain_host = neo.com #指明域名
vhost_http_port = 5566 #代理内网web端口
vhost_https_port = 5567 #代理内网web端口
开启服务端frp:
./frps -c frps.ini
查看日志:
tail -f 日志目录
1.2 客户端设置
配置frpc.ini文件
[common]
server_addr = 0.0.0.0 #frp服务端的ip
server_port = 6666 #服务端端口
token = admin123 #token
pool_count = 5 #连接数量
log_file = ./frps.log #日志
log_level = info
log_max_days = 3
heartbeat_timeout = 90
use_encryption = true #是否加密
use_gzip = true #是否进行压缩
[ssh] #将当前内网机器的ssh端口映射到vps端口上
type = tcp #类型
local_ip = 0.0.0.0 #本地ip
local_port = 22 #本地ssh端口
remote_port = 10000 #映射到vps上的端口
[rdp] #将当前内网机器的rdp端口映射到vps端口上
type = tcp #类型
local_ip = 0.0.0.0 #本地ip
local_port = 3389 #本地rdp端口
remote_port = 6389 #映射到vps上的端口
[mysql] #将当前内网机器的rdp端口映射到vps端口上
type = tcp
local_ip = 0.0.0.0
local_port = 3306
remote_port = 1306
[ftp]
type = tcp
local_ip = 0.0.0.0
local_port = 21
remote_port = 2121
[http]
type = http
local_port = 80
subdomain = neo.com #子域名
[anquan]
type = stcp
sk = 123456789
local_ip = 0.0.0.0
local_port = 3390
[dns] #dns端口映射到vps端口上
type = udp
local_ip = 0.0.0.0
local_port = 53
remote_port = 6000
#上面建立客户端的端口映射可以选填,需要那个设置哪个
开启客户端frp:
./frpc -c frpc.ini
即可自动连接
如下图所示:
客户端连接成功:
服务器端连接成功:
2. nps
nps有可视化界面,比较好理解。
2.1 服务端
在vps上下载服务端的nps解压缩后,打开nps/conf/nps.conf
配置如下:
appname = weblogger #名称
runmode = dev #指定运行模式(dev,pro)
bridge_type=tcp #通信协议(tcp,kcp)
bridge_port=9099 #服务端通信端口(默认8024)
bridge_ip=0.0.0.0 #服务端的ip
public_vkey=Pksly2312df70i5osc #设置连接密钥
log_level=7 #日志等级
log_path=weblogger.log #输出日志位置
web_host=login.neo.com #web控制面板域名
web_username=neo #账号
web_password=neo #密码
web_port = 8081 #web面板端口
web_ip=0.0.0.0 #web面板ip
http_proxy_ip= #http代理(没参数表示不开启)
http_proxy_port=
https_proxy_port= #https代理
https_just_proxy=
运行./nps start
然后再登录web控制面板,进行添加客户端,等一系列隧道。
例如创建3389连接
点击客户端进行配置
2.2 客户端
在目标主机上下载客户端的nps,解压缩,运行nps/npc
输入命令,这个命令在客户端上创建特定的客户端时会生成一个命令,复制过来就好,然后web界面上就会显示在线
3. reGeorg
外网主机通过内网web服务器的正向代理建立http/https隧道访问内网主机。
如果有一个web服务器已经拿到shell,但内网主机因为防火墙策略,无法通过内网渗透、端口转发、反弹shell等连接内网目标主机,但能与web服务器进行http通信。我们可以用web服务器做代理来访问内网目标主机。
在getshell的web服务器上上传reGeorg的脚本,有很多类型,具体看服务器。
然后在攻击机上打开reGeorg,输入
python reGeorgSocksProxy.py -p 6666(本地任意端口) http://web服务器域名
然后用Proxifier进行socks5代理
可以在这里添加需要代理的软件或者放行