EN

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

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

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

1.介紹

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

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

圖片1.png

                   圖1-1可以看到運行腳本程序會打開任子行官網(wǎng)

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


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

圖片3.png

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

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

圖片4.png 

圖1-3

以上就是一個完整使機器容易受到Python庫劫持的攻擊的過程,其余沒有提到的配置都為Linux的默認配置。

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

圖片5.png

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

圖片6.png

                   圖1-5可以看到目標腳本所處位置

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

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

圖片6.png

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

編輯完模塊文件后,我們保存并關(guān)閉編輯器。打開ctf機器的另一臺終端,我們在shellcode腳本中指定的端口上打開一個Netcat監(jiān)聽器,然后以lele用戶回到終端,用sudo執(zhí)行hack.py腳本,如圖1-7所示。

圖片7.png

                               圖1-7

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

方法二:

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

漏洞構(gòu)建:

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

圖片9.png

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

圖片10.png

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

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

圖片11.png

                             2-3

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

圖片12.png

圖2-4

以上是一個完整的使機器容易受到Python庫劫持的攻擊過程。其余沒有提到的配置都為Linux的默認配置。

漏洞利用:

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

圖片13.png

圖2-5

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

圖片14.png 

圖2-6 反彈shell代碼

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

圖片15.png

圖2-7

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

圖片16.png

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

方法3

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

漏洞構(gòu)建

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

圖片17.png

圖3-1運行該腳本會打開任子行官網(wǎng)

圖片18.png 

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

接下來,我們需要在sudoers文件中做一些修改。首先,我們把文件的位置改為/tmp目錄,然后在文件中加入SETENV標記,如圖3-3所示。這意味著lele用戶可以使用具有sudo權(quán)限的SETENV命令,而無需輸入root密碼。SETENV是個可以改變Python PATH環(huán)境變量的值,并將任何位置納入我們在前面的方法中學到的執(zhí)行順序的命令。

圖片19.png 

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

以上就是使機器容易受到Python庫劫持的完整過程。其余沒有提到的配置都被設置為Linux的默認配置。

漏洞利用

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

圖片20.png 

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

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

圖片21.png

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

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

圖片22.png 

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

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


熱點內(nèi)容

開始試用任子行產(chǎn)品
申請試用

20年公安服務經(jīng)驗

7*24小時應急響應中心

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

專家級安全服務團隊

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

榮獲國家科學技術(shù)二等獎

置頂
電話

400-700-1218

官方熱線電話

咨詢
留言
二維碼
微信公眾號
公司微博