<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    SSH的使用詳解

    VSole2022-04-19 07:24:57

    今天為大家分享一篇關于SSH 的介紹和使用方法的文章。本文從SSH是什么出發,講述了SSH的基本用法,之后在遠程登錄、端口轉發等多種場景下進行獨立的講述,希望能對大家有所幫助。

    1. 什么是SSH?

    SSH是一種網絡協議,用于計算機之間的加密登錄。最早的時候,互聯網通信都是明文通信,一旦被截獲,內容就暴露無疑。1995年,芬蘭學者Tatu Ylonen設計了SSH協議,將登錄信息全部加密,成為互聯網安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經成為Linux系統的標準配置。

    2. SSH登錄原理

    3. SSH基本用法

    語法:

    ssh -p 22 user@host
    

    參數:

    -p:指定端口號。

    user:登錄的用戶名。

    host:登錄的主機。

    默認的端口號為22,當端口號為22的時候,可以省略,直接使用如下方式:

    ssh user@host
    

    此外,如果本地正在使用的用戶名與遠程登錄的用戶名一致,登錄用戶名也是可以省略的,即如下:

    ssh host
    

    4. SSH遠程登錄實例

    現在我有兩臺linux虛擬機,上面安裝都是centOS6.5,ip分別為192.168.13.135和192.168.13.138,如下圖:

    現在,我需要操作的是通過SSH在192.168.13.138上面,登錄到192.168.13.135上面。

    首先,我們可以使用如下命令,查看兩臺機器是否啟用了ssh。

    netstat -ntlp |grep ssh
    


    使用如下命令進行連接。

    ssh -p 22 root@192.168.13.135
    

    若在本機上是首次登錄該遠程主機,則會出現如下界面。


    大致意思就是,無法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續連接嗎?輸入yes即可。


    然后輸入密碼,即可連接ok了。

    要想退出,直接輸入exit即可。

    5. SSH端口轉發

    SSH 不僅僅能夠自動加密和解密 SSH 客戶端與服務端之間的網絡數據,同時,SSH 還能夠提供了一個非常有用的功能,那就是端口轉發,即將TCP 端口的網絡數據,轉發到指定的主機某個端口上,在轉發的同時會對數據進行相應的加密及解密。如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許 SSH 的連接,那么也是能夠通過使用SSH轉發后的端口進行通信。轉發,主要分為本地轉發與遠程轉發兩種類型。

    1. 轉發的參數

    -C:壓縮數據
    -f :后臺認證用戶/密碼,通常和-N連用,不用登錄到遠程主機。
    -N :不執行腳本或命令,通常與-f連用。
    -g :在-L/-R/-D參數中,允許遠程主機連接到建立的轉發的端口,如果不加這個參數,只允許本地主機建立連接。
    -L : 本地端口:目標IP:目標端口
    -D : 動態端口轉發
    -R : 遠程端口轉發
    -T :不分配 TTY 只做代理用
    -q :安靜模式,不輸出 錯誤/警告 信息
    

    2. 本地轉發

    有本地網絡服務器的某個端口,轉發到遠程服務器某個端口。說白了就是,將發送到本地端口的請求,轉發到目標端口。格式如下:

    ssh -L 本地網卡地址:本地端口:目標地址:目標端口 用戶@目標地址。

    現在我們利用本地轉發來解決一個問題,比如我們有兩臺機器,如下:

    centos A(192.168.13.139)

    centos B(192.168.13.142)

    現在,centos B(192.168.13.142)機器上面安裝了mysql,并設置了運行任何主機連接,如下:

    此時,在centos A(192.168.13.139)上面是可以連上centos B(192.168.13.142)的mysql,如下:

    那么,現在我開始centos B(192.168.13.142)限制不允許外部ip連接,僅僅讓127.0.0.1連接,如下:

    此時,centos A(192.168.13.139)上面怎么連接上centos B(192.168.13.142)的mysql呢?

    此時,我們還是使用上面的mysql連接方式,肯定會報錯,如下:

    當然在centos B(192.168.13.142)mysql還是可訪問的。

    這個時候,我們就可以使用本地端口轉發了,將本地的某個端口,映射到centos B(192.168.13.142)機器上面的,如下:

    ssh -L 127.0.0.1:3306:127.0.0.1:3306 root@192.168.13.142
    

    因為本地網卡地址是可以省略的,上面的轉發,可以簡寫為:

    ssh -L 3306:127.0.0.1:3306 root@192.168.13.142
    

    當然,ssh連接的時候,若兩臺機器的用戶名相同,也是可以省略的,即命令可以簡寫為:

    ssh -L 3306:127.0.0.1:3306 192.168.13.14
    

    上面的代碼就是將本地的3306端口,轉發到192.168.13.142的3306端口。因為centos B(192.168.13.142)上面的mysql使用的3606端口。當然,我們首先得看看本地的3306端口是否被占用,如被占用,可以使用其他的端口。

    數據流向如圖:


    首先,centos A(192.168.13.139)上的應用將數據發送到本地的127.0.0.1上面的3306端口。

    然后,centos A(192.168.13.139)將3306端口的數據,通過SSH轉發到centos B(192.168.13.142)的3306端口。

    接著,centos B(192.168.13.142)將處理后的數據,原路返回給centos A(192.168.13.139)。

    如果是首次通過ssh連接cetosB該機器,則會提示確認公鑰,并讓你選擇是否確定連接。


    此時,我們在centos A上面連接centos B上面的mysql,就可以這么寫了。

    bin/mysql -h127.0.0.1 -uroot -p
    

    如下:

    我們可以通過下面命令,在centosA查看ssh轉發監聽的進程。

    3.遠程轉發

    由遠程服務器的某個端口,轉發到本地網絡的服務器某個端口。說白了,就是將發送到遠程端口的請求,轉發到目標端口。格式如下:

    ssh -R 遠程網卡地址:遠程端口:目標地址:目標端口

    下面三臺機器為例,如下:

    centos A(192.168.13.139)

    centos B(192.168.13.142)

    win7(10.18.78.135)

    假設,win7(10.18.78.135)與centos B(192.168.13.142)不能直接連接,但是win7(10.18.78.135)與centos A(192.168.13.139)可以連接centos B(192.168.13.142)也可以centos A(192.168.13.139)連接,那么,我們就可以在centos A(192.168.13.139)上面使用遠程端口轉發了,讓win7(10.18.78.135)與centos B(192.168.13.142)進行通信。

    ssh -R 127.0.0.1:80:10.18.78.135:80 root@192.168.13.142
    

    即centos B(192.168.13.142)監聽自己的80端口,然后將所有數據,由centos A(192.168.13.139)發給win7(10.18.78.135)。

    6. SSH的遠程操作

    ssh遠程操作,主要用于在遠程的機器上面執行某個操作,格式如下:

    ssh user@host 'command'
    

    案例1、在機器A(192.168.13.148)中查看機器B(192.168.13.149)的操作系統類型。

    在A機器上面執行如下代碼:

    ssh  dequan@192.168.13.149  'uname -a'
    

    案例2、將機器A(192.168.13.148)中test文件夾復制到B機器(192.168.13.149)。

    在A機器上面,執行如下命令:

    tar -cz test | ssh dequan@192.168.13.149 'tar -xz'
    

    當然,我們也可以使用scp命令或rz命令,傳輸文件。

    案例3、在機器A(192.168.13.148)處查看B機器(192.168.13.149)是否監聽了1080端口。

    在A機器上面,執行如下命令:

    ssh dequan@192.168.13.149 'netstat -tln |grep 1080'
    

    7. SSH的本地轉發

    本地轉發,說白了,就是把發到本地的某個端口請求,轉發到遠程的某臺機器上面。格式如下:

    ssh -L  [本地地址:]本地端口:遠程地址:遠程端口 遠程用戶@遠程地址
    

    案例1、在機器B(192.168.13.149)上面訪問機器A(192.168.13.148)的服務。

    現在,我們在A機器上面,啟動了Nginx服務,如下:

    我們希望B機器也能夠這樣使用A機器上面的服務。需要把B機器上面80端口請求,轉發到A機器上面。目前在B機器這樣執行,是報錯的,如下:

    需要在B機器上面,執行如下代碼:

    ssh -f -N -L 127.0.01:80:192.168.13.148:80 dequan@192.168.13.148
    

    然后,在B機器上面,訪問A機器的服務,就訪問自身的服務一樣。

    8. SSH的遠程轉發

    遠程轉發,即把發給遠程機器的某個端口請求,轉發到本地的機器上面。格式如下:

    ssh -R [遠程地址:]遠程端口:本地地址:本地端口 遠程用戶@遠程地址
    

    在上面的案例中,我們也可以通過遠程轉發來實現。即在A機器上面執行如下代碼:

    sudo ssh -f -N -R 8081:127.0.0.1:80 dequan@192.168.13.149
    

    我們監聽了B機器的8081端口,把該端口的請求,轉發到A機器上面。

    可以在B機器上面看到,我們的監聽,如下:

    此時,執行如下命令,就會被轉發到A機器的127.0.0.1的80端口,如下:

    1、利用遠程轉發,實現代理功能

    目前B機器,只能在自己127.0.0.1的80端口監聽并轉發,如何讓B機器作為代理,轉發其他機器的請求到A機器上面呢?比如,現在有一臺機器C(192.168.13.143),C不能訪問A,但是能夠訪問B。如何讓C利用B來訪問A呢?

    此時,需要將B的監聽,由127.0.0.1:8081,改為0:0.0.0:8081,修改sshd的配置/etc/ssh/sshd_config。

     vim /etc/ssh/sshd_config
    如果有
    GatewayPorts no
    改為
    GatewayPorts yes
     
    沒有,添加即可
    然后重啟sshd
    
    sudo service sshd restart
    

    然后重新,設置動態轉發,如下:

     ssh -f -g  -N -R 8081:127.0.0.1:80 dequan@192.168.13.149
    

    可以看到,此時B機器,已經監聽了0:0.0.0:8081


    在C機器上面,我們通過curl模擬請求,利用B機器做代理,如下:

     curl -x 192.168.13.149:8081 127.0.0.1
    

    當然,如果還有其他機器,也可以使用類似的方式,來請求A機器。

    9. SSH的動態轉發

    對于SSH的本地轉發和遠程轉發,都需要將本地端口和遠程端口一一綁定,格式如下:

    ssh -D [本地地址:]本地端口號 遠程用戶@遠程地址
    

    比如,把發到B機器上面的請求,都轉發到A機器上面,讓A機器去執行請求。

    10. SSH存在的問題

    如果有人截獲了登錄請求,然后冒充遠程主機,將偽造的公鑰發給用戶,那么用戶很難辨別真偽。因為不像https協議,SSH協議的公鑰是沒有證書中心(CA)公證的,也就是說,都是自己簽發的。

    可以設想,如果攻擊者插在用戶與遠程主機之間(比如在公共的wifi區域),用偽造的公鑰,獲取用戶的登錄密碼。再用這個密碼登錄遠程主機,那么SSH的安全機制就蕩然無存了。這種風險就是著名的"中間人攻擊"(Man-in-the-middle attack)。

    11. 總結

    本篇文章主要介紹了SSH的基本概念和實踐中常用的一些方法,并沒有涉及深層原理和優化的知識,在底層實現和協議具體內容還能繼續深入研究。

    ssh端口轉發
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    SSH的使用詳解
    2022-04-19 07:24:57
    今天為大家分享一篇關于SSH 的介紹和使用方法的文章。本文從SSH是什么出發,講述了SSH的基本用法,之后在遠程登錄、端口轉發等多種場景下進行獨立的講述,希望能對大家有所幫助。
    內網滲透合集(三)
    2023-01-28 09:44:16
    jsp端口轉發滲透過程中,由于windows和linux的差別以及運行語言環境的限制導致端口轉發經常出現問題。于是自己寫了個簡單的JSP的端口轉發腳本。仿造 LCX的功能,具有正向、反向、監聽三種模式。對于目前數量眾多的JAVA WEB網站來說,可以比較方便的實現端口轉發。在這里發布出來,小伙伴們使用過程中,如果發現什么bug歡迎提交哈~參數說明/KPortTran.jsp?lip = local ip / 本地ip //一般為內網主機IP. lp = local port / 本地端口 //一般為內網主機端口
    網絡隧道技術指的是利用一種網絡協議來傳輸另一種網絡協議,它主要利用網絡隧道協議來實現這種功能。網絡隧道技術涉及了三種網絡協議,即網絡隧道協議、隧道協議下面的承載協議和隧道協議所承載的被承載協議。 在安全人員人員的日常工作中,會遇到因為相關配置或設備導致的無法和目標設備通信的狀況,這時就可以嘗試使用隧道通信解決。
    網絡請求一般是由客戶端發起,服務器響應,而代理服務是這個網絡請求的中介,其作用是將客戶端的網絡請求經由自身代理服務轉發至服務端。 某些情況下客戶端無法直接訪問服務端,但代理服務端可以訪問服務端,此時客戶端與代理服務端建立協議,客戶端的請求都經由代理端轉發至服務端這便是正向代理。 正向代理主要面向客戶端服務,服務端的響應會返回給代理服務端,代理服務端會將其轉發至客戶端。
    常用的隧道工具
    內網滲透-代理篇
    2021-12-01 05:44:01
    利用代理工具將內網的流量代理到本地進行訪問,這樣就可以對內網進行下一步滲透,同時也可以利用代理工具將其他網段的流量轉發到本地進行縱向滲透。代理的本質是Socks協議(防火墻安全會話換協議),工作在OSI參考模型的第5層(會話層)。使用TCP協議傳輸數據,因而不提供如傳遞ICMP信息之類的網絡層相關服務。目前支持SOCKS4和SOCKS5兩個版本:
    FireEye將用于跟蹤組的代號“UNC”用于未分類的組。在2018年末,UNC1945組被發現破壞了一個Solaris服務器,該服務器的SSH服務暴露于互聯網,從而安裝了名為SLAPSTICK的后門并竊取憑據以用于以后的攻擊。在這種情況下,攻擊者部署了名為EVILSUN的遠程利用工具,旨在利用Solaris 9服務器中的零日漏洞CVE-2020-14871。2020年4月,來自Mandiant的研究人員還在地下市場上發現了“ Oracle Solaris SSHD遠程根漏洞攻擊”的可用性。EVILSUN識別的漏洞利用程序的價格約為3,000美元。
    前言前段時間讀了讀徐哥的《內網安全攻防》,并復現了部分知識點,寫篇文章記錄下學習內容。但在大多數情況下,內網的環境存在多種邊界設備以及入侵檢測裝置的限制,它們會對主機間或者內網與外網之間通信的流量進行檢測,如果存在異常就會進行攔截,這無疑給內網滲透增加了難度,而隱藏通信隧道技術就是為了繞過各種邊界設備的封鎖,從而完成主機間或內網與外網之間的通信。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类