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

原文鏈接:https://www.linuxprobe.com/linux-xxd-extract.html
導讀 本文將爲大家介紹另一個可用於提權的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 [email protected]

成功訪問受害者機器後,我們使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章