用於提權的Linux命令,即“xxd”

安全劍客發表於2019-08-30
本文將為大家介紹另一個可用於提權的 Linux 命令,即“xxd”。xxd 命令的作用是將給定的標準輸入或者檔案,做一次十六進位制的輸出,反之它也可以將十六進位制的輸出轉換為原來的二進位制格式。
xxd 介紹

我們知道如果想要將某個檔案轉換成另一種格式,我們可以通過使用一些線上的轉換工具,它可以幫助我們將一個檔案轉換成幾乎任何我們所需的檔案格式,例如:“pdf to word,jpg to pdf,excel to pdf“等等。但如果有人想要將任意檔案轉換為十六進位制或二進位制形式,那又該怎麼辦呢?
其實這很簡單,在Linux上我們可以通過xxd這個命令來做到這一點。xxd命令可以為給定的標準輸入或者檔案做一次十六進位制的輸出,它也可以將十六進位制輸出轉換為原來的二進位制格式。這也有助於對任意檔案的編碼和解碼。
首先,讓我們使用 help/man命令,檢視 xxd命令的具體使用方法。

xxd -h

使用 xxd 執行的主要操作
將檔案內容轉換為十六進位制:例如,我建立了一個名為“secret.txt”的新檔案,現在我想將其內容都轉換為十六進位制形式,我可以通過鍵入以下命令執行:

Syntax: xxd filename
xxd secret.txt

如下圖所示,很明顯xxd已經為檔案“secret.txt”生成了十六進位制轉儲。
在這裡我們可以觀察到,以下十六進位制轉儲獲得了它的預設格式,例如:
索引行數
每組的預設八位位元組數為2,其分組大小為4位元組
標準列長度為16位,帶有空格
用於提權的Linux命令,即“xxd”用於提權的Linux命令,即“xxd”
使用xxd跳過第n行:在轉換檔案時,有許多資料可能是我們不需要的。因此,我們可以跳過這些內容。我們可以使用xxd跳過第n行,並在跳過的行後生成十六進位制值。
假設在我當前的情況下,我想要從第5行生成十六進位制轉儲,那麼可以通過使用“-s”引數後跟xxd命令來實現。

xxd -s 0x50 secret.txt

將輸出限制為特定長度:以上我已經解釋瞭如何通過跳過行數來檢索資料。但是,如果你想要限制標準輸出的長度,那麼你可以使用“-l”引數。
這裡,我限制了我的內容長度,以將資料列印到有限的範圍,即第5行,如下圖所示。

xxd -l 0x50 secret.txt

因此,我們可以觀察到兩個命令之間的差異;第一個命令生成從第6行初始化的十六進位制值,第二個命令根據十六進位制索引以第5行結束,請參考以上截圖。
用於提權的Linux命令,即“xxd”用於提權的Linux命令,即“xxd”
將檔案內容轉換為二進位制檔案:如果你想將檔案轉換為二進位制形式,則可以使用“-b”選項。命令如下:

xxd -b secret.txt

用於提權的Linux命令,即“xxd”用於提權的Linux命令,即“xxd”
設定列長:上面我已經介紹瞭如何跳過並限制輸出到範圍,其實我們還可以設定列的長度。預設情況下,對於任何轉儲檔案它都是12, 16。
預設值:我們知道預設列長度為16。這將列印16個字元,包括空格。

xxd -l 0x20 secret.txt

將列長度設定為32:我使用“-l”選項設定了結束索引以限制列印資料的範圍。然後我使用“-c”引數,將列的長度設為了32。

xxd -l 0x40 -c 32 secret.txt

從下圖中,我們可以知道xxd是如何限制列長度的。
將列長度設定為9:現在我們將列長度設定為“9”。

xxd -l 0x40 -c 9 secret.txt

在所有這些情況下,xxd都是通過空格計數每個字元來為檔案建立十六進位制轉儲的。
純16進位制轉儲:我們可以使用“-ps”選項,以 postscript的連續16進位制轉儲輸出。這裡我們將其輸出儲存在hex檔案中,以獲取secret.txt檔案的純16進位制轉儲。為了驗證結果,我們使用cat命令從hex檔案中讀取輸出。
xxd -ps secret.txt > hex cat hex
從下圖中,我們可以知道xxd是如何為“secret.txt”檔案,建立純十六進位制轉儲的。
還原檔案:我們可以使用“-r”選項,來還原轉換的檔案內容。在我們的例子中,我使用了“-r -p”將純十六進位制轉儲的反向輸出列印為了ASCII格式。

xxd -r -p hex

用於提權的Linux命令,即“xxd”用於提權的Linux命令,即“xxd”
分組大小位元組:如果我們需要將輸出分組為多個八位位元組,那麼我們可以使用“-g”選項來實現。預設情況下為2。因此,如果我們將值設為4,那麼它將被分組為8位。
在下圖中我們將值設為8,它將分組為16位作為輸出以簡化結果。

xxd -l 0x30 -g 8 secret.txt
SUID Lab 設定

SUID特殊許可權是以命令的所有者許可權來執行這一命令的,而不是以執行者的許可權來執行該命令。現在,讓我們在xxd上啟用SUID許可權,這樣本地使用者就有機會利用xxd來獲取root許可權。
鍵入以下命令,啟用SUID位:

which xxd chmod u+s /usr/bin/xxd ls -al /usr/bin/xxd
SUID 利用

現在,我們將通過特殊許可權位SUID來利用xxd服務。為此,我建立了一個受害者機器的會話,這將允許我們利用目標系統的本地使用者訪問。
讓我們使用ssh連線到目標機器,命令如下:

ssh test@192.168.1.103

成功訪問受害者機器後,我們使用find命令來查詢具有SUID許可權的二進位制檔案。

find / -perm -u=s -type f 2>/dev/null

這裡我們可以看到有許多二進位制檔案具有SUID位,但我們重點關注/usr/bin/xxd。
用於提權的Linux命令,即“xxd”用於提權的Linux命令,即“xxd”
在xxd上獲得特殊許可權位SUID,我們將獲取用於提取密碼雜湊檔案的shadow檔案。
如下圖所示,我已請求通過使用xxd暴露/etc/shadow檔案,它將為該檔案生成十六進位制轉儲,並通過管道傳輸xxd命令來恢復其輸出。

xxd "/etc/shadow" / xxd -r

用於提權的Linux命令,即“xxd”用於提權的Linux命令,即“xxd”
現在,我將使用john the ripper這款工具來破解雜湊密碼。這樣我們就可以獲取使用者憑據,如下圖所示。

john hash

用於提權的Linux命令,即“xxd”用於提權的Linux命令,即“xxd”
獲取憑據後,我們就可以切換使用者了。首先,我們來檢查下使用者的sudo許可權:raj,發現使用者“raj”具有所有許可權。

su raj sudo -l sudo su

因此,讓我們直接切換到root使用者帳戶,並訪問root  shell。至此,我們已成功利用xxd命令提升了我們的使用者許可權。

轉載連結: https://www.linuxprobe.com/linux-xxd-extract.html

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

相關文章