編輯/etc/passwd文件進行權限升級的技巧


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目錄中,我們將得到三個最重要的文件,即passwdgroupshadow

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 user1

Username: 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分配了GID 1003 ,所以我們也需要在/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訪問權限。

su  user3
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權限非常有幫助。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM