Linux的賬號口令機制及其爆破


賬號保存


談到linux的賬號認證,其實就是如何保存於通過口令(password)鑒別,這里首先要將兩個文件,一個是/etc/passwd,另外一個是/etc/shadow。

/etc/passwd文件


我們先來看看/etc/passwd文件

我們來解釋一下這張圖片,說明一下/etc/passwd文件的格式:用戶名:口令:用戶標識號:組標識號:注釋性描述:主目錄:登錄Shell,我們來說幾個重點字段。

  • 口令:因為安全問題放在/etc/shadow中去了
  • 用戶標識號:就是uid
  • 組標識號:就是組id
  • 主目錄:用戶主目錄
  • 登錄shell:當為nologin的時候其實是無法登錄的

/etc/shadow文件


我們再來看看/etc/shadow文件

我們來解釋一下這張圖片,說明一下/etc/shadow文件的格式:用戶名:\(加密方式\)鹽字符串$密文口令:最后一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標志,我們來說幾個重點字段。

  • 加密方式:6->sha-512加密,1->md5加密,2->Blowfish加密,5->sha-256加密
  • 鹽:加鹽對抗破解的那個隨機字符串
  • 密文口令:和鹽一起經過f(password,key)運算后得到的值

認證流程


linxu引導啟動后,會讀取前文介紹的兩個文件,讀取到內存中,存入兩個數據結構中(passwd結構和spwd結構),使用linux自身的函數獲取用戶名和密碼,對密碼進行運算后進行比較。從數學公司來講如下:
value = f(InputPasswd,SaltString)
然后比較這個value的值與/etc/shadow中的值保存的是否一致。

攻擊方式:


我們來看看對應的攻擊方式,根據hash進行口令爆破

1、口令爆破(原理性介紹)


#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

const char *value = "";//這里是/etc/shadow中的hash值
const char *password = "";//明文密碼
int main(){
    if (strcmp(value,crypt(password,salt)) == 0){//salt是鹽的字符串
        printf("yes");
    }
    reutrn 0;
}

實驗:



免責聲明!

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



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