在本文中,咱們將學習「修改/etc/passwd文件以建立或更改用戶的root權限的各類方法」。有時,一旦目標被攻擊,就必須知道如何在/etc/passwd文件中編輯本身的用戶以進行權限升級,其中咱們將此技巧應用於權限提高。打開下面給出的連接:php
連接1:Hack the Box Challenge: Apocalyst Walkthroughpython
連接2:Hack the Hackday Albania VM (CTF Challenge)算法
首先,在進行提權以前,咱們應該深刻了解/etc/passwd文件。在etc目錄中,咱們將獲得三個最重要的文件,即passwd、group和shadow。shell
etc/passwd:它是一個可讀的文本文件,存儲用戶賬戶的信息bash
etc/group:也是一個可讀的文本文件,它存儲組信息以及用戶所屬的組,能夠經過該文件識別。學習
etc/shadow:它是一個包含加密密碼的文件,任何用戶的用戶信息都將過時。ui
/passwd: 文件中的詳細信息格式加密
詳細說明spa
Username:第一個字段表示用於登陸用戶的名稱3d
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的完整路徑
注意:每一個字段用(冒號)分隔
讓咱們首先經過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文件中
通常來講,普通用戶對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文件中,此處*符號已被加密密碼值替換。經過這種方式,咱們能夠建立本身的用戶以進行權限提高。
有時沒法執行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訪問權限。
YESSSSSS表示以root權限訪問
注意:您還能夠修改其餘用戶的密碼,方法是將:x:替換爲您本身加密的密碼,而後使用您的密碼登陸該用戶賬戶
mkpasswd相似於openssl passwd,它將生成指定密碼字符串的哈希值。
語法:mkpasswd -m [hash type] {password}
mkpasswd -m SHA-512 pass
它將爲您的密碼字符串生成哈希值,重複上述步驟或更改其餘現有用戶的密碼。
若是您將比較user1的信息,那麼您還能夠注意到不一樣。咱們已經替換了: X: 來自咱們的哈希值。
如今切換用戶並經過user1訪問終端並確認root訪問權限
su user1
whoami
id
很好,成功以root權限訪問
使用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用戶的全部特權
相似地,咱們可使用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權限。
一樣,咱們可使用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權限很是有幫助。