EN

Linux權(quán)限提升:Python庫(kù)劫持

發(fā)布時(shí)間:2021-07-02
瀏覽量: 8398

在這篇文章中,我們將介紹一些在基于Linux的設(shè)備上通過(guò)利用Python庫(kù)和腳本提升權(quán)限的方法。

1.介紹

一般來(lái)說(shuō),當(dāng)攻擊者處于有python文件的環(huán)境中,可以用來(lái)提升其訪問(wèn)權(quán)限的方式比較有限。本文將介紹利用寫(xiě)權(quán)限、sudo權(quán)限和編輯Path變量,這三種提權(quán)方式。

為了方便演示,我們先創(chuàng)建一個(gè)導(dǎo)入一些庫(kù)的示例腳本。在實(shí)際情況中,這可能是個(gè)一般的python腳本或是一個(gè)開(kāi)發(fā)人員正在進(jìn)行的項(xiàng)目。在CTF比賽中,可能很容易找到一個(gè)包含與此相類似的腳本。我們創(chuàng)建的示例腳本中,首先導(dǎo)入webbrowser模塊,然后使用open函數(shù)來(lái)運(yùn)行設(shè)備上的默認(rèn)web瀏覽器,來(lái)打開(kāi)http://delawaredebtrecovery.com/網(wǎng)頁(yè)(此處以任子行官網(wǎng)舉例),如圖1-1。

圖片1.png

                   圖1-1可以看到運(yùn)行腳本程序會(huì)打開(kāi)任子行官網(wǎng)

方法一:這個(gè)漏洞利用是基于我們導(dǎo)入的模塊文件要具有寫(xiě)權(quán)限。當(dāng)被導(dǎo)入的模塊文件具有允許任何用戶編輯的權(quán)限時(shí),它就可能成為一個(gè)漏洞。在我們創(chuàng)建的python示例腳本中,調(diào)用了webbrowser.py模塊文件。為了更好地了解這種提權(quán)方式,我們將首先在ubuntu環(huán)境中創(chuàng)建脆弱性漏洞環(huán)境,然后使用另一個(gè)機(jī)器來(lái)攻擊利用這個(gè)漏洞。


漏洞創(chuàng)建:正如前文所講,在這種方法中,漏洞是基于模塊文件的權(quán)限。為了構(gòu)造這個(gè)漏洞,我們首先需要找到模塊文件。我們可以用locate命令來(lái)找到它,當(dāng)然也可以利用find之類的命令進(jìn)行查找。我們可以看到它位于/usr/lib/python3.8/里面,然后我們可以看到,模塊文件的默認(rèn)權(quán)限是:所有者有讀、寫(xiě)、執(zhí)行的權(quán)限,組有執(zhí)行和讀的權(quán)限,其他用戶只有執(zhí)行的權(quán)限。這意味著除非用戶是root權(quán)限,否則任何人不能編輯該文件。為了構(gòu)造這個(gè)漏洞,我們需要用chmod命令改變一下權(quán)限,使每個(gè)用戶都可以讀取、寫(xiě)入和執(zhí)行。這從下圖1-2中可以看到。

圖片3.png

                  圖1-2可以看到所有用戶對(duì)文件具有讀,寫(xiě),執(zhí)行權(quán)限。

要想讓Linux機(jī)器變得易受攻擊,下一步要做的就是提供一個(gè)運(yùn)行python腳本的方法。最簡(jiǎn)單的方法是寫(xiě)入sudoers文件中,這樣攻擊者(可以訪問(wèn)用戶lele就可以執(zhí)行我們創(chuàng)建的python腳本(hack.py)。如圖1-3.

圖片4.png 

圖1-3

以上就是一個(gè)完整使機(jī)器容易受到Python庫(kù)劫持的攻擊的過(guò)程,其余沒(méi)有提到的配置都為Linux的默認(rèn)配置。

漏洞利用:該漏洞利用的前提是我們?cè)谀繕?biāo)機(jī)上已經(jīng)獲得初始立足點(diǎn)。然后我們可以利用這種方法在獲得初始立足點(diǎn)后提升權(quán)限。為了模仿這種情況,我們先以用戶lele的身份連接到目標(biāo)機(jī)。作為一個(gè)需要提升權(quán)限的攻擊者,我們運(yùn)行sudo -l命令,看看哪些腳本或二進(jìn)制文件是以提升的權(quán)限運(yùn)行的??梢钥吹剑覀兡?span style="line-height: 150%; font-family: 宋體;">使用python3.8來(lái)運(yùn)行hack.py。作為一個(gè)攻擊者,我們使用cat命令查看腳本內(nèi)容,看到它導(dǎo)入一個(gè)名為webbrowser的模塊。我們使用locate命令找到該模塊的位置,發(fā)現(xiàn)它位于/usr/lib/python3.8中。然后我們還可以發(fā)現(xiàn)lele用戶擁有該模塊的寫(xiě)權(quán)限。如圖1-4,圖1-5所示。

圖片5.png

                     圖1-4可以看到哪些腳本擁有root權(quán)限

圖片6.png

                   圖1-5可以看到目標(biāo)腳本所處位置

我們用vim編輯器打開(kāi)該模塊文件,然后在被hack.py文件調(diào)用的函數(shù)里面加入了反彈shell的python腳本。在前面我們可以看到,它使用一個(gè)open函數(shù)在瀏覽器中打開(kāi)了一個(gè)網(wǎng)頁(yè)。因此,我們將反彈shell的代碼添加到該模塊文件中,如下圖1-6所示。

vim /usr/lib/python3.8/webbrowser.py

圖片6.png

                      圖1-6將反彈shell的代碼寫(xiě)入圖中位置

編輯完模塊文件后,我們保存并關(guān)閉編輯器。打開(kāi)ctf機(jī)器的另一臺(tái)終端,我們?cè)?span style="line-height: 150%; font-family: 宋體;">shellcode腳本中指定的端口上打開(kāi)一個(gè)Netcat監(jiān)聽(tīng)器,然后以lele用戶回到終端,用sudo執(zhí)行hack.py腳本,如圖1-7所示。

圖片7.png

                               圖1-7

當(dāng)腳本運(yùn)行時(shí),我們就可以看到一個(gè)會(huì)話連接到了我們的Netcat監(jiān)聽(tīng)器。通過(guò)whoami命令和id命令可以看到我們已經(jīng)成功地將Linux權(quán)限從lele用戶提升到了root權(quán)限用戶。

方法二:

這個(gè)漏洞是基于Python庫(kù)路徑的優(yōu)先級(jí)順序,它適用于我們腳本正在導(dǎo)入的模塊文件。當(dāng)一個(gè)模塊在腳本中被導(dǎo)入時(shí),Python會(huì)以特定的優(yōu)先順序在默認(rèn)目錄中尋找特定的模塊文件。在我們創(chuàng)建的python腳本中,我們有webbrowser.py模塊文件被調(diào)用。因?yàn)槿绻谂c原始腳本相同的目錄下存在一個(gè)Python模塊文件,它將獲得優(yōu)先于默認(rèn)路徑的地位。為了更好地了解背后發(fā)生了什么,以及怎么樣導(dǎo)致權(quán)限升級(jí)的,我們先在ubuntu環(huán)境中創(chuàng)建漏洞,然后使用另一個(gè)機(jī)器Linux來(lái)利用這個(gè)漏洞。

漏洞構(gòu)建:

正如前面所討論的,在這種方法中,漏洞是基于模塊文件執(zhí)行的優(yōu)先順序。為了構(gòu)造這個(gè)漏洞,首先,我們需要把方法一加入的反彈shell的代碼注釋掉或者直接刪掉(如圖2-1),避免產(chǎn)生干擾,然后恢復(fù)我們先前賦予文件的權(quán)限(如圖2-2)。這樣,這臺(tái)機(jī)器就不會(huì)在多個(gè)方面出現(xiàn)漏洞。

圖片9.png

圖2-1 注釋掉先前加的反彈shell代碼

圖片10.png

圖2-2恢復(fù)webbrowser.py的權(quán)限。

接下來(lái),我們回到我們先前創(chuàng)建的python腳本。我們可以看到,它位于lele用戶的home目錄下,它仍然包含相同的代碼,需要導(dǎo)入 webbrowser模塊,如圖2-3所示。

圖片11.png

                             2-3

sudoers文件中與方法一中的編寫(xiě)一致,使其包含腳本hack.py的正確路徑,如圖2-4所示。

圖片12.png

圖2-4

以上是一個(gè)完整的使機(jī)器容易受到Python庫(kù)劫持的攻擊過(guò)程。其余沒(méi)有提到的配置都為Linux的默認(rèn)配置。

漏洞利用:

同樣,該漏洞利用的前提是我們?cè)谀繕?biāo)機(jī)上已經(jīng)獲得初始立足點(diǎn)。然后我們可以利用這種方法在獲得初始立足點(diǎn)后提升權(quán)限。為了模仿這種情況,我們以用戶lele的身份連接到目標(biāo)機(jī)器。作為一個(gè)需要提升權(quán)限的攻擊者,我們運(yùn)行sudo -l命令,看看我們可以用哪些腳本或二進(jìn)制文件是以提升的權(quán)限運(yùn)行的。我們看到,我們可以使用python3.8來(lái)運(yùn)行hack.py。作為一個(gè)攻擊者,我們使用cat命令查看該腳本,看到它導(dǎo)入了一個(gè)名為webbrowser的模塊,如圖2-5。

圖片13.png

圖2-5

由于 hack.py 位于 lele 用戶的主目錄內(nèi),而我們有 lele 用戶的訪問(wèn)權(quán)限,我們可以在主目錄內(nèi)創(chuàng)建一個(gè)文件。在這種情況下,需要注意的是我們不能編輯 hack.py 文件。在這種情況下,我們將創(chuàng)建一個(gè)webbrowser.py文件。然后在創(chuàng)建的webbrowser.py文件中添加反彈shell的代碼。如圖2-6

圖片14.png 

圖2-6 反彈shell代碼

接下來(lái),我們需要運(yùn)行一個(gè)Netcat偵聽(tīng)器端口,我們提到在反向shellcode。然后我們將繼續(xù)使用sudo執(zhí)行hakc.py腳本,如圖2-7。

圖片15.png

圖2-7

當(dāng)腳本運(yùn)行時(shí),我們看到一個(gè)會(huì)話連接到Netcat偵聽(tīng)器。會(huì)話的id命令證明在目標(biāo)機(jī)器上已經(jīng)是root權(quán)限。我們已經(jīng)成功地把lele用戶提升特權(quán)為root用戶,如圖2-8。

圖片16.png

圖2-8提權(quán)為root權(quán)限

方法3

這個(gè)漏洞是通過(guò)Python PATH環(huán)境變量進(jìn)行搜索的Python庫(kù)來(lái)利用的。這個(gè)變量有一個(gè)目錄列表,在這個(gè)列表中,Python會(huì)搜索導(dǎo)入模塊的不同目錄。如果攻擊者能夠改變或修改該變量,那么他們就可以利用它來(lái)提升目標(biāo)機(jī)器的權(quán)限。為了更好地了解是怎么樣導(dǎo)致權(quán)限升級(jí)的,我們和前面一樣先在ubuntu環(huán)境中創(chuàng)建漏洞,然后使用另一臺(tái)Linux來(lái)攻擊利用這個(gè)漏洞。

漏洞構(gòu)建

正如前面所討論的,這個(gè)方法的漏洞利用是基于python環(huán)境path變量的。為了構(gòu)造這個(gè)漏洞,首先,和前面一樣,我們需要恢復(fù)Linux環(huán)境到最初的配置。然后,在tmp目錄內(nèi)創(chuàng)建hack.py腳本,我們可以驗(yàn)證該腳本的內(nèi)容與之前一樣,如圖3-1,圖3-2所示。

圖片17.png

圖3-1運(yùn)行該腳本會(huì)打開(kāi)任子行官網(wǎng)

圖片18.png 

圖3-2 可以看到腳本內(nèi)容

接下來(lái),我們需要在sudoers文件中做一些修改。首先,我們把文件的位置改為/tmp目錄,然后在文件中加入SETENV標(biāo)記,如圖3-3所示。這意味著lele用戶可以使用具有sudo權(quán)限的SETENV命令,而無(wú)需輸入root密碼。SETENV是個(gè)可以改變Python PATH環(huán)境變量的值,并將任何位置納入我們?cè)谇懊娴姆椒ㄖ袑W(xué)到的執(zhí)行順序的命令。

圖片19.png 

圖3-3給我們的文件加上SETENV標(biāo)記配置環(huán)境變量

以上就是使機(jī)器容易受到Python庫(kù)劫持的完整過(guò)程。其余沒(méi)有提到的配置都被設(shè)置為L(zhǎng)inux的默認(rèn)配置。

漏洞利用

同樣,該漏洞利用的前提是我們?cè)谀繕?biāo)機(jī)上已經(jīng)獲得初始立足點(diǎn)。然后我們可以利用這種方法在獲得初始立足點(diǎn)后提升權(quán)限。為了模仿這種情況,我們以用戶lele的身份連接到目標(biāo)機(jī)器。作為一個(gè)需要提升權(quán)限的攻擊者,我們運(yùn)行sudo -l命令,看看我們可以用哪些腳本或二進(jìn)制文件是以提升的權(quán)限運(yùn)行的。我們看到,我們可以用root權(quán)限使用SETENV,這意味著我們可以用它來(lái)改變導(dǎo)入模塊的優(yōu)先順序。由于hack.py位于/tmp目錄內(nèi),我們進(jìn)入其中并檢查hack.py腳本,如圖3-4所示。

圖片20.png 

圖3-4 可以看到已經(jīng)以root權(quán)限進(jìn)行設(shè)置環(huán)境變量

由于它需要導(dǎo)入webbrowser模塊,我們首先將創(chuàng)建一個(gè)名為webbrowser.py的惡意模塊文件,然后利用改變環(huán)境變量Python PATH的能力導(dǎo)入我們的惡意模塊文件,惡意模塊文件中包含反彈shell的代碼。如圖3-5接著在腳本中提到的同一端口上啟動(dòng)一個(gè)Netcat監(jiān)聽(tīng)器,并繼續(xù)將/tmp目錄添加到Python路徑中,然后執(zhí)行hack.py文件以提升我們的訪問(wèn)權(quán)限。

圖片21.png

圖3-5惡意模塊文件里包含反彈shell的代碼

當(dāng)腳本運(yùn)行時(shí),我們可以看到一個(gè)會(huì)話連接到了我們的Netcat監(jiān)聽(tīng)器。whoami和id命令表明了我們已經(jīng)成功地將權(quán)限從lele用戶提升到了root權(quán)限用戶,如圖3-6。

圖片22.png 

圖3-6已經(jīng)從普通訪問(wèn)權(quán)限提權(quán)為root權(quán)限

在這篇文章中,我們通過(guò)人為的為Python庫(kù)的環(huán)境設(shè)置三個(gè)真實(shí)的場(chǎng)景,然后介紹了一些錯(cuò)誤的配置可能導(dǎo)致攻擊者將其訪問(wèn)權(quán)限提升到root權(quán)限級(jí)別的方法。


熱點(diǎn)內(nèi)容

開(kāi)始試用任子行產(chǎn)品
申請(qǐng)?jiān)囉?/a>

20年公安服務(wù)經(jīng)驗(yàn)

7*24小時(shí)應(yīng)急響應(yīng)中心

自主知識(shí)產(chǎn)權(quán)的產(chǎn)品裝備

專家級(jí)安全服務(wù)團(tuán)隊(duì)

網(wǎng)絡(luò)空間數(shù)據(jù)治理專家

榮獲國(guó)家科學(xué)技術(shù)二等獎(jiǎng)

置頂
電話

400-700-1218

官方熱線電話

咨詢
留言
二維碼
微信公眾號(hào)
公司微博