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

0x00 前言

在本文中,咱們將學習「修改/etc/passwd文件以建立或更改用戶的root權限的各類方法」。有時,一旦目標被攻擊,就必須知道如何在/etc/passwd文件中編輯本身的用戶以進行權限升級,其中咱們將此技巧應用於權限提高。打開下面給出的連接:php

連接1:Hack the Box Challenge: Apocalyst Walkthroughpython

連接2:Hack the Hackday Albania VM (CTF Challenge)算法

0x01 基礎知識

首先,在進行提權以前,咱們應該深刻了解/etc/passwd文件。在etc目錄中,咱們將獲得三個最重要的文件,即passwdgroupshadowshell

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的完整路徑

注意:每一個字段用(冒號)分隔

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權限很是有幫助。

相關文章
相關標籤/搜索