taibeihacker
Moderator
0x00 前言
在本文中,我們將學習“修改/etc/passwd文件以創建或更改用戶的root權限的各種方法”。有時,一旦目標被攻擊,就必須知道如何在/etc/passwd文件中編輯自己的用戶以進行權限升級,其中我們將此技巧應用於權限提升。打開下面給出的鏈接:鏈接1:Hack the Box Challenge: Apocalyst Walkthrough
鏈接2:Hack the Hackday Albania VM (CTF Challenge)
0x01 基础知识
首先,在進行提權之前,我們應該深入了解/etc/passwd文件。在etc目錄中,我們將得到三個最重要的文件,即passwd、group和shadow。etc/passwd:它是一個可讀的文本文件,存儲用戶帳戶的信息
etc/group:也是一個可讀的文本文件,它存儲組信息以及用戶所屬的組,可以通過該文件識別。
etc/shadow:它是一個包含加密密碼的文件,任何用戶的用戶信息都將過期。
/passwd: 文件中的詳細信息格式


详细说明Username:第一個字段表示用於登錄用戶的名稱
Encrypted password:x表示加密密碼,實際存儲在/shadow文件中。如果用戶沒有密碼,則密碼字段將用*(星號)表示
User Id (UID):必須為每個用戶分配一個用戶ID(UID)。 Uid 0(零)為root用戶保留,UID 1-99為進一步的預定義帳戶保留,UID 100-999為管理目的由系統保留。 UID 1000幾乎是第一個非系統用戶,通常是管理員。如果我們在Ubuntu系統上創建一個新用戶,它將被賦予UID 1001
Group Id (GID):表示每個用戶的組;與UID一樣,前100個GID通常保留以供系統使用。 GID為0與root組相關,GID為1000通常表示用戶。新組通常分配GID從1000開始
Gecos Field:通常,這是一組以逗號分隔的值,用於說明與用戶相關的更多詳細信息。 GECOS字段的格式表示以下信息:
用戶全名
地址和門牌號碼或聯繫人
辦公電話號碼
家庭電話號碼
任何其他聯繫信息
Home Directory:表示用戶主目錄的路徑,其中存儲用戶的所有文件和程序。如果沒有指定的目錄,則/將成為用戶的目錄
Shell:它表示(由用戶)執行命令並顯示結果的默認shell的完整路徑
注意:每個字段用(冒号)分隔
0x02 提权技巧
1.默认方法添加用户
讓我們首先通過cat命令打開/etc/passwd文件,以查看系統中當前可用的用戶
從上面給出的截圖中,您可以看到“raj”是最後一個使用uid 1000的用戶。這裡gid 1000表示它是非系統用戶。
當我們使用adduser命令添加任何用戶時,讓我們看看/passwd文件中實際發生了什麼。因此,在這裡您可以清楚地看到下面給出的信息以及截圖。
adduser user1Username: user1
GID: 1002
UID: 1001
Enter password: 任意密碼
Home Directory: /home/user1
Gecos Filed:full Name(全名), Room Number(門牌號), Work phone(工作電話), Home Phone(家庭電話), Other

當您打開/passwd文件時,您會注意到上述所有信息都存儲在/etc/passwd文件中

2./etc/passwd文件中手动编辑用户
一般來說,普通用戶對passwd文件具有隻讀權限,但有時用戶也可能具有讀/寫權限,在這種情況下,我們可以藉助上述理論將自己的用戶添加到/etc/passwd文件中。user2:*:1002:1003:/home/user2:/bin/bash
*(星号)符號表示對於user2空口令。

因為我們已經為user2分配了GID1003 ,所以我們也需要在/etc/group文件中對其進行處理
請遵循以下格式:
语法:username:x:gid
因為我們沒有密碼,所以在x處使用*符號
user2:*:1003:

現在,使用passwd命令為user2設置密碼並輸入密碼。
passwd user2

由於我們在不使用adduser命令的情況下手動創建了一個新用戶user2,因此在/etc/shadow文件中找不到任何有關信息。但是它在/etc/passwd文件中,此處*符號已被加密密碼值替換。通過這種方式,我們可以創建自己的用戶以進行權限提升。

3.OpenSSL
有時無法執行passwd命令來設置用戶的密碼;在這種情況下,我們可以使用OpenSSL命令,它將使用salt生成加密密碼。OpenSSL passwd將使用salt字符串和基於MD5的BSD密碼算法1計算指定密碼的哈希值
语法:openssl passwd-1-salt[salt value]password
openssl passwd -1 -salt user3 pass123

我們將獲得加密的密碼,然後在終端中輸入vipw命令打開/passwd文件,並手動添加用戶名。按照添加新用戶user3的手動步驟,在*或X處粘貼加密值以獲取密碼。
在下圖中,您可以看到,我已經分配了uid:0和gid:0以及主目錄/root/root,因此我們為用戶user3賦予了root權限。

現在切換用戶並通過user3訪問終端並確認root訪問權限。
suuser3
whoami
id
YESSSSSS表示以root權限訪問
注意:您還可以修改其他用戶的密碼,方法是將:x:替換為您自己加密的密碼,然後使用您的密碼登錄該用戶帳戶

4.mkpasswd
mkpasswd類似於openssl passwd,它將生成指定密碼字符串的哈希值。语法:mkpasswd -m [hash type] {password}
mkpasswd -m SHA-512 pass

它將為您的密碼字符串生成哈希值,重複上述步驟或更改其他現有用戶的密碼。
如果您將比較user1的信息,那麼您還可以注意到不同。我們已經替換了: X: 來自我們的哈希值。

現在切換用戶並通過user1訪問終端並確認root訪問權限
su user1
whoami
id
很好,成功以root權限訪問

5.Python
使用python,我們可以導入crypt庫,並將salt添加到我們的密碼中,這將創建包含salt值的加密密碼。python -c 'import crypt; print crypt.crypt('pass', '$6$salt')'

它將生成密碼字符串的哈希值,重複上述步驟或更改其他現有用戶的密碼。如果您將比較user2的信息,那麼您還可以注意到不同。我們已經從新的哈希值替換了舊的哈希值。

現在切換用戶並通過user2訪問終端並確認root訪問權限。
su user2
whoami
id
pwd
sudo -l
它也能進行提權,以前它是/home/user2目錄的成員,但是在成為/root目錄的成員之後,您可以注意到它擁有root用戶的所有特權

6.Perl
類似地,我們可以使用Perl和crypt來使用salt值為我們的密碼生成哈希值。perl -le 'print crypt('pass123', 'abc')'

您將獲得加密的密碼,然後在終端中鍵入vipw命令並手動添加用戶名,再次打開/passwd文件。按照添加新用戶user4的手動步驟,將加密值粘貼到*或X的位置以獲取密碼。
在下圖中,您可以看到,我分配了uid:0和gid:0以及home directory/root/root,因此我們為user4賦予了root權限

現在切換用戶並通過user4訪問終端並確認root訪問權限。
su user4
whoami
id
很好,這種方法也能獲取root權限。

7.PHP
同樣,我們可以使用PHP和crypt來使用salt值為我們的密碼生成哈希值。php-r'print(crypt('aarti','123') . \'\n\');'

您將獲得加密的密碼,然後在終端中鍵入vipw命令打開/passwd文件,並手動添加用戶名。按照添加新用戶user5的手動步驟,並將加密值粘貼到密碼字段中。
在下圖中,您可以看到,我分配了uid:0和gid:0以及home directory/root/root,因此我們為user5授予了root權限

現在切換用戶並通過user5訪問終端並確認root訪問權限。
su user5
whoami
id
因此,有很多方法可以為您自己的用戶添加root訪問權限,這對於在任何主機中獲得root權限非常有幫助。
