nebula level01收獲

nebula level01中flag01源碼如圖所示

hint提示說(shuō):There is a vulnerability in the below program that allows arbitrary programs to be executed

首先查看flag01的權(quán)限


具有s權(quán)限且用戶(hù)組具有執(zhí)行的權(quán)限,所以通過(guò)運(yùn)行flag01可以暫時(shí)從level01獲取到flag01的權(quán)限,如果對(duì)s權(quán)限不理解可以先來(lái)看一個(gè)例子(例子文章轉(zhuǎn)載于http://over-rainbow.cn/2016/12/24/S-%E6%9D%83%E9%99%90/):

s權(quán)限

和普通的rwx權(quán)限不同,當(dāng)s權(quán)限出現(xiàn)在文件上的時(shí)候,意味當(dāng)其他用戶(hù)使用執(zhí)行這個(gè)文件的時(shí)候會(huì)被暫時(shí)set UID,簡(jiǎn)稱(chēng)SUID.

該權(quán)限的一些作用:

1.SUID權(quán)限僅對(duì)二進(jìn)制程序有效(重要…)

2.執(zhí)行則對(duì)于該程序需要具有x的可執(zhí)行權(quán)限

3.本權(quán)限僅在執(zhí)行該程序的過(guò)程中有效

4.執(zhí)行者將具有該程序擁有者的權(quán)限

可以看出SUID的目的就是:讓本沒(méi)有相應(yīng)權(quán)限的用戶(hù)運(yùn)行這個(gè)程序是,可以訪(fǎng)問(wèn)他沒(méi)有權(quán)限訪(fǎng)問(wèn)的資源.

Example

看兩個(gè)例子:

1.Linux的密碼是放在/etc/shadow下面的,然而權(quán)限一般普通用戶(hù)都是0權(quán)限的,這就涉及到了一個(gè)問(wèn)題.

那么普通用戶(hù)為什么能修改密碼?

是通過(guò)系統(tǒng)的passwd命令修改的,然后查看passwd的權(quán)限發(fā)先root權(quán)限是rws,這個(gè)s代表setuid的權(quán)限,因此當(dāng)普通用戶(hù)調(diào)用passwd命令時(shí),setuid給了它一個(gè)臨時(shí)的root權(quán)限,使得普通用戶(hù)能夠?qū)?etc/shadow文件進(jìn)行修改.接著我嘗試給cat命令一個(gè)s權(quán)限,讓普通用戶(hù)讀取/etc/shadow文件.

2.接下想個(gè)這樣的問(wèn)題:有一個(gè)用戶(hù)user創(chuàng)建了一個(gè)文件之后,權(quán)限被設(shè)置為600,那么以為著只能user和root可以查看.那么當(dāng)有一個(gè)其他的用戶(hù)test02想要讀取這個(gè)文件,就可以通過(guò)這種方式來(lái)讀取.前提條件:需要user用戶(hù)創(chuàng)建一個(gè)二進(jìn)制程序,并且給予其他用戶(hù)x權(quán)限,再給自己設(shè)置一個(gè)s權(quán)限.(出現(xiàn)”S”的原因是由于本身不具有x權(quán)限)這里通過(guò)cp一個(gè)cat命令來(lái)實(shí)現(xiàn).兩個(gè)用戶(hù)test1和test2.

可以看出key.txt文件屬于test1權(quán)限為600.

此時(shí)的test2沒(méi)有讀取的權(quán)限,但是getkey是test1且可運(yùn)行并且擁有s權(quán)限.成功讀取內(nèi)容

對(duì)于s權(quán)限同樣可以參考下面文章:https://segmentfault.com/a/1190000002523542

通過(guò)執(zhí)行flag01函數(shù)可以短暫獲取到該文件所有者flag01的權(quán)限,但是并不能提權(quán),既然提示說(shuō)是是可執(zhí)行任意文件漏洞,我們從最關(guān)鍵的函數(shù)下手——倒數(shù)第二行的system函數(shù)。程序使用了system函數(shù)執(zhí)行指定的shell命令,代碼中,system執(zhí)行的/usr/bin/env命令,但是system的參數(shù)并非來(lái)自變量,也就是我們無(wú)法控制system的參數(shù)。但是,這里它執(zhí)行了env,通過(guò)env找到echo程序,and now what”是傳遞給echo的參數(shù),所以只要控制echo函數(shù)的位置的內(nèi)容和位置便可以永久獲取一個(gè)shell,達(dá)到提權(quán)的目的。

如何控制echo函數(shù)的位置?

通過(guò)控制環(huán)境變量中path的路徑來(lái)控制echo函數(shù)的位置,在修改echo函數(shù)路徑之前先需要了解一下知識(shí)

Linux也提供了修改和查看環(huán)境變量的命令,下面通過(guò)幾個(gè)實(shí)例來(lái)說(shuō)明:

echo 顯示某個(gè)環(huán)境變量值 echo $PATH

export 設(shè)置一個(gè)新的環(huán)境變量 export HELLO="hello" (可以無(wú)引號(hào))

env 顯示所有環(huán)境變量

set 顯示本地定義的shell變量

unset 清除環(huán)境變量 unset HELLO

readonly 設(shè)置只讀環(huán)境變量 readonly HELLO

關(guān)于PATH的作用:

PATH說(shuō)簡(jiǎn)單點(diǎn)就是一個(gè)字符串變量,當(dāng)輸入命令的時(shí)候LINUX會(huì)去查找PATH里面記錄的路徑。比如在根目錄/下可以輸入命令ls,在/usr目錄下也可以輸入ls,但其實(shí)ls這個(gè)命令根本不在這個(gè)兩個(gè)目錄下,事實(shí)上當(dāng)你輸入命令的時(shí)候LINUX會(huì)去/bin,/usr/bin,/sbin等目錄下面去找你此時(shí)輸入的命令,而PATH的值恰恰就是/bin:/sbin:/usr/bin:……。其中的冒號(hào)使目錄與目錄之間隔開(kāi)

/bin,/sbin,/usr/bin,/usr/sbin區(qū)別

/: this is root directoryroot 用戶(hù)根目錄

/bin: commandsin this dir are all system installed user commands系統(tǒng)的一些指令

/sbin:commands in this dir are all system installedsuper user commands超級(jí)用戶(hù)指令系統(tǒng)管理命令,這里存放的是系統(tǒng)管理員使用的管理程序

/usr/bin: usercommands for applications后期安裝的一些軟件的運(yùn)行腳本

/usr/sbin:super user commands for applications超級(jí)用戶(hù)的一些管理程序

/usr/X11R6/bin: X application user commands

/usr/X11R6/sbin: X application super usercommands

Linux中的某些重要的目錄:

?主目錄:/root、/home/username

?用戶(hù)可執(zhí)行文件:/bin、/usr/bin、/usr/local/bin

?系統(tǒng)可執(zhí)行文件:/sbin、/usr/sbin、/usr/local/sbin

?其他掛載點(diǎn):/media、/mnt

?配置:/etc

?臨時(shí)文件:/tmp

?內(nèi)核和Bootloader:/boot

?服務(wù)器數(shù)據(jù):/var、/srv

?系統(tǒng)信息:/proc、/sys

?共享庫(kù):/lib、/usr/lib、/usr/local/lib

每個(gè)用戶(hù)都擁有一個(gè)主目錄。所有用戶(hù)的個(gè)人文件(配置、數(shù)據(jù)甚至應(yīng)用程序)都放在其中。根的主目錄為/root。大多數(shù)非根主目錄包含在/home 樹(shù)中,通常以用戶(hù)命名。重要的二進(jìn)制位于 /bin(用戶(hù)二進(jìn)制)以及 /sbin(系統(tǒng)二進(jìn)制)中。不重要的二進(jìn)制(如圖形環(huán)境或Office 工具)安裝在/usr/bin 和 /usr/sbin中。進(jìn)行這種分隔是為了盡可能地縮小根分區(qū)。使用源代碼編譯的軟件通常位于 /usr/local/bin 和/usr/local/sbin中。

由于獲得系統(tǒng)的權(quán)限為:


并不具備在其他目錄進(jìn)行寫(xiě)操作,除了tmp目錄之外,/tmp目錄對(duì)任何用戶(hù)都是有完整的權(quán)限,我們可利用它下手:


先修改環(huán)境變量$PATH:


在tmp目錄下創(chuàng)建一下可執(zhí)行文件并且用gcc編譯:

#include <stdio.h>

#include <stdlib.h>

void main()

{

system("/bin/bash");

}

再執(zhí)行flag01發(fā)現(xiàn)已經(jīng)提權(quán)成功


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容