之前寫過了windows提權小結,這下一篇水什么就有了嘛,於是有了這篇水文,整理一下Linux提權
前篇windows提權小結 ,鏈接送上 https://www.cnblogs.com/lcxblogs/p/14163338.html
0x00 前言
同windows提權的目的,也是從普通用戶權限提升到管理員權限,以便實現讀寫敏感文件、橫向移動進一步控制、執行一些需要權限的命令之類的要求
仍然是思路總結性質的文章,具體操作不展開介紹
具體如何做,應該注意哪些細節,請參考網上其他師傅們的復現操作
本文不涉及第三方提權
0x01 系統內核漏洞
按照windows那篇與這篇兩篇文章相互對應的關系,我就也把系統內核漏洞放在第一個位置(事實上能不用就不最先用內核漏洞,未經測試的內核漏洞可能產生意外的結果,比如系統崩潰啦、藍屏啦、連接GG啦......)
還是,同windows內核提權一樣,我們需要知道有哪些可以利用的Linux內核漏洞?
推薦幾個腳本
(1)LinEnum
下載鏈接: https://github.com/rebootuser/LinEnum
使用方法在鏈接里有,能搜集出很多信息
(2)linuxprivchecker
下載鏈接:https://github.com/sleventyeleven/linuxprivchecker
(3)linux-exploit-suggester2
下載鏈接:https://github.com/jondonas/linux-exploit-suggester-2
利用內核漏洞,需要目標系統沒打有關此漏洞的補丁,然后我們把利用腳本exp往目標機器上傳,傳了之后要能執行
當然除了上面介紹的幾個信息收集工具之外,也可以手動搜集內核相關信息,前提是你記得住命令
比如uname -a 看一下內核版本
cat /etc/issue
cat /etc/*-release 看下發行版本
然后用kali的searchsploit查詢exploitdb ,找一下此版本下,哪些內核漏洞可以利用,具體呢要看exp的說明,都是有要求的不是很隨便的exp,注意不要被坑了
給你一個眼神:
言歸正傳
首先,如果提到Linux提權,絕對繞不過著名的臟牛漏洞,即CVE-2016-5195
Linux內核>=2.6.22(2007年發行)開始受影響,直到2016年10月18日修復
其危害就是與低權限用戶可提權相關的
至於為什么叫做dirty COW(臟...牛?)?
大致原因是內核函數處理Copy-on Write(即COW)時存在條件競爭造成COW過程被破壞,出現一些問題,原理分析看這里 https://www.anquanke.com/post/id/84851
網上有此漏洞提權的exp,c的,下載后編譯成可執行文件,然后執行
其他類型的內核漏洞也是怎么個思想去尋找,不要慫就是干
Linux內核的一些exp合集: https://github.com/SecWiki/linux-kernel-exploits
0x02 鑽空子提權
利用root權限運行的服務鑽空子
這個其實並不算一種辦法,只是一種朴素的想法
如果找到某服務以root用戶身份運行,並且這是一個我們可以執行命令的程序相關的服務,那我們是不是可以鑽個空子,用這個程序執行一些命令,變相地實現“提權”
ps -aux | grep root 找到root運行的服務
比較常用的例子就是:數據庫服務是root權限運行的,那么我們可以通過在數據庫shell中執行一些本來普通權限執行不了需要系統高權限才能執行的系統命令,這也是一種提權......吧
或者
查找敏感文件,比如passwd和shadow
/etc/passwd 存了一些用戶信息。正常來說此文件是全用戶可讀,root可寫的
/etc/shadow 存密碼hash。僅僅root可讀寫的
cd /etc 然后 ls -l passwd shadow
看一下文件權限
如果passwd是普通用戶可寫的(夢里啥都有),可以把root的密碼字段換成一個已知密碼的hash
如果shadow是普通用戶可讀的(洗洗睡吧),可以讀取root的hash密碼,爆破之
或者
是不是存在一些密碼復用的情況,root密碼和其他你找到的密碼一樣......呢
可以嘗試,但是不要對這種辦法報太大希望
0x03 定時任務提權
又名cronjobs提權,如果配置不當就能加以利用(都比較看臉)
主要思想是:計划任務如果被設置是以root權限執行的,且可以修改定時(計划)任務中定義的腳本或文件,就能在root權限下執行任意代碼
例子請參考 https://www.freebuf.com/articles/system/175453.html
(例子中的dash、nano可以根據實際情況選擇其他的shell和編輯器)
0x04 SUID提權
SUID---set user ID
順便講一下Linux中文件權限的表示方法,啊懂的都懂,有不懂的兄弟我就自告奮勇一下了
類UNIX系統下可以通過 ls -l 查看文件權限
表示方法是一種十位表示法,類似:
- r w x r w x r w x
1 2 3 4 5 6 7 8 9 10
2-10位展示的 r w x 分別是readable 、writable、 executable權限 或者說可讀、可寫、可執行 或者說4、2、1,沒有相應權限的位置寫-
屬主(u)2-4位;屬組(g)5-7位; 其他(o)8-10位
第一位可以是:p 管道文件; d 目錄文件 ;l 符號連接文件;- 普通文件;s socket文件;c 字符設備文件;b 塊設備文件
除此之外,還有三種特殊權限:SUID、SGID、sticky
s或S(SUID--set user ID )占據4號位,對應值為4
s或S(SGID-set group ID)占據7號位,對應值為2
t或T(sticky)占據10號位,對應值為1
於是給文件加減權限就有:
chmod u+s filename
chmod g+s filename
chmod o+t filename (取消權限順理成章+換成-即可)
或用數字表示
chmod 4755 filename 代表-rwsr-xr-x (-rwxr-xr-x 這是原來的755,賦了SUID=4權限)
chmod 7755 filename 代表-rwsr-sr-t (-rwxr-xr-x 這是原來的755,賦了SUID、GUID、sticky=4+2+1=7權限)
chmod 7666 filename 代表-rwSrwSrwT (-rw-rw-rw- 這是原來的666,賦了SUID、GUID、sticky=4+2+1=7權限)
chmod 0755 filename 去掉所有特權
看出來點區別沒?
小寫s或s或t是取代了原來的x的,但如果原來沒有x,就會表示為大寫的S或S或T
SUID作用於文件(二進制程序):用戶將繼承文件所有者的權限(root用戶創建一個文件並加上SUID,其他用戶使用這個文件時就是具有root權限的)
GUID作用於文件(二進制程序)和目錄:對於文件,用戶將繼承文件所屬組的權限;對於目錄,此目錄下的所有新建目錄、文件都自動繼承此目錄的屬組權限
sticky作用於目錄:粘滯鍵,目錄中的用戶只能刪除、移動、更改自己的文件或目錄(比如創建一個公共目錄,管理員不希望a用戶能修改b用戶創建的、放在公共目錄中的文件,反之b用戶也不能修改a用戶創建的、放在公共目錄中的文件,那就把公共目錄設定一個sticky位,定住)
講了這么多廢話,這和提權有啥關系啊?
別急,原理懂了就好說了
首先找目標系統上,所有運行中的且有SUID的、都以root用戶權限運行的可執行文件(3種命令,不同系統不一樣,都試試):
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;
找到的這些都是以root權限運行的,包含SUID的‘s’的,屬主是root的文件
隨便找一個試一下(只是演示)
可以看到是root的SUID,都紅了
我這里沒有好的命令,實際上最好找到有nmap、vim、find、more、less、bash、cp、Nano、mv、awk、man、weget之類的且用了SUID的命令
這些命令都是可以在root權限下運行,對於SUID提權有幫助的
具體提權方法可以參考 https://pentestlab.blog/2017/09/25/suid-executables/
https://blog.csdn.net/fly_hps/article/details/80428173
實際上,基本沒有人很nice又非常可愛的小運維會把這些文件加SUID的,相信我
所以就當復習一下Linux的小知識吧,不說了
0x05 環境變量操作
一種與SUID提權 結合+操作 的手段
Linux中環境變量是PATH,echo $PATH 查看當前環境變量
如果在PATH變量中發現“.”,表示用戶可以從當前目錄執行二進制文件腳本
舉個簡單的例子,僅供演示不代表實操:
我新建一個ls的可執行文件,里面寫着 whoami
PATH沒加.之前是這樣的
加個. (關於Linux環境變量配置請參考:https://www.cnblogs.com/youyoui/p/10680329.html)
再來ls
可見執行結果不是原來的ls 產生的列表效果了,而是變成執行了我ls文件中的whoami了
那么你講這些對提權有啥用啊?輔助理解,輔助理解
舉一反三,我原來有個可執行的A文件,運行這個A文件可以實現某種功能,比如查看系統進程或者其他什么東西
誒好巧不巧,這個A文件是個有root的SUID的可執行文件(但除了管理員其他人無修改此文件的w權限,只是可讀可執行 -rwsr-xr-x)
一個普通用戶,在目標Linux中為了提權,想利用我上一點說的搜索root權限的有SUID的文件(find / -user root -perm -4000 -print 2>/dev/null)時,啪地一下發現了這個A文件,很快啊
比如執行A文件叫shell,是通過gcc demo.c -o shell生成的,demo.c這個C文件中調用了系統命令ps,於是./shell效果和執行ps效果是一樣的,會顯示當前進程信息
cp /bin/sh /tmp/ps
把/bin/sh腳本執行命令文件復制到/tmp路徑下,新文件起個名也叫ps
export PATH=/tmp:$PATH
($PATH處寫echo $PATH的結果)在原有的環境變量基礎上,加上新文件ps(其實內容也就是/bin中的sh)所在的路徑
再次./shell的時候,也就是執行ps的時候!!!
這次執行的並不是原有的顯示進程信息的操作,由於加入了環境變量,而是執行了/tmp路徑下的新文件ps,即執行了sh命令,會出現執行sh的腳本執行命令效果!
在sh命令下,執行whoami查看權限是root,提權成功,是因為SUID提權原理,shell文件本身是有root的SUID的,配合本小點講的環境變量的操作實現提權+任意命令執
行(ps可以換其他的,/tmp路徑可以換其他的,/bin/sh也可以換其他的),這個方法本質上還是需要SUID提權的,算是一種操作的延展,雞肋+1 get
參考過這篇被翻譯爛了、講的比較全的文章:https://xz.aliyun.com/t/2767
就能更好理解一下上述內容了
其他還有一些方法,比如CVE-2019-14287
請參考文章:https://www.freebuf.com/vuls/217089.html
嗯......不做評論,感興趣可以看一下
各位師傅還有哪些最新的好辦法,求分享
隨便轉載,請標明作者出處