1. 程式人生 > >CTF 【每日一題20160616】windows、linux hash破解

CTF 【每日一題20160616】windows、linux hash破解

這道題先考查一下系統常識:密碼存放的路徑(百度一下,你就知道),還提供了一個小工具。

一般情況下,windows密碼存放位置在:
c:\windows\system32\config\SAM 下的SAM檔案中。sam是security account manager的縮寫。即安全賬戶管理的意思。裡邊包括賬戶密碼、SID、許可權等資訊。安全識別符號 (SID) 是長度可變的唯一值,用來標識 Windows 作業系統中的安全主體或安全組。常見 SID 是標識一般使用者或一般組的一組 SID。它們的值在所有作業系統中都相同。
將 提交後,返回下面的字串
d18e760f2b15a239328274a447cd
67f7 - > NTLM?
linux系統的密碼存放在:
使用者帳號 /etc/passwd
使用者密碼 /etc/shadow
在/etc/passwd 中,每一行都表示的是一個使用者的資訊;一行有7個段位;每個段位用:號分割,比如下面是某人系統中的/etc/passwd 的兩行;
第一行beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
第二行beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
linuxsir:x:501:502::/home/linuxsir:/bin/bash
第一欄位:使用者名稱(也被稱為登入名);在上面的例子中,我們看到這兩個使用者的使用者名稱分別是 beinan 和linuxsir;
第二欄位:口令;在例子中我們看到的是一個x,其實密碼已被對映到/etc/shadow 檔案中;
第三欄位:UID ;請參看本文的UID的解說;
第四欄位:GID;請參看本文的GID的解說;
第五欄位:使用者名稱全稱,這是可選的,可以不設定,在beinan這個使用者中,使用者的全稱是beinan sun ;而linuxsir 這個使用者是沒有設定全稱;
第六欄位:使用者的家目錄所在位置;beinan 這個使用者是/home/beinan ,而linuxsir 這個使用者是/home/linuxsir ;
第七欄位:使用者所用SHELL 的型別,beinan和linuxsir 都用的是 bash ;所以設定為/bin/bash;    

/etc/shadow檔案是/etc/passwd 的影子檔案,這個檔案並不由/etc/passwd 而產生的,這兩個檔案是應該是對應互補的;shadow內容包括使用者及被加密的密碼以及其它/etc/passwd 不能包括的資訊,比如使用者的有效期限等;這個檔案只有root許可權可以讀取和操作。
/etc/shadow 檔案的內容包括9個段位,每個段位之間用:號分割;我們以如下的例子說明;   
第一行beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
第二行linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
第一欄位:使用者名稱(也被稱為登入名),在/etc/shadow中,使用者名稱和/etc/passwd 是相同的,這樣就把passwd 和shadow中用的使用者記錄聯絡在一起;這個欄位是非空的;
第二欄位:密碼(已被加密),如果是有些使用者在這段是x,表示這個使用者不能登入到系統;這個欄位是非空的;
第三欄位:上次修改口令的時間;這個時間是從1970年01月01日算起到最近一次修改口令的時間間隔(天數),您可以通過passwd 來修改使用者的密碼,然後檢視/etc/shadow中此欄位的變化;
第四欄位:兩次修改口令間隔最少的天數;如果設定為0,則禁用此功能;也就是說使用者必須經過多少天才能修改其口令;此項功能用處不是太大;預設值是通過/etc/login.defs檔案定義中獲取,PASS_MIN_DAYS 中有定義;
第五欄位:兩次修改口令間隔最多的天數;這個能增強管理員管理使用者口令的時效性,應該說在增強了系統的安全性;如果是系統預設值,是在新增使用者時由/etc/login.defs檔案定義中獲取,在PASS_MAX_DAYS 中定義;
第六欄位:提前多少天警告使用者口令將過期;當用戶登入系統後,系統登入程式提醒使用者口令將要作廢;如果是系統預設值,是在新增使用者時由/etc/login.defs檔案定義中獲取,在PASS_WARN_AGE 中定義;
第七欄位:在口令過期之後多少天禁用此使用者;此欄位表示使用者口令作廢多少天后,系統會禁用此使用者,也就是說系統會不能再讓此使用者登入,也不會提示使用者過期,是完全禁用;
第八欄位:使用者過期日期;此欄位指定了使用者作廢的天數(從1970年的1月1日開始的天數),如果這個欄位的值為空,帳號永久可用; www.2cto.com
第九欄位:保留欄位,目前為空,以備將來Linux發展之用;

本題在提交/etc/passwd後,返回如下程式碼:
$1$1zUVF6AN$uHBYbOv4WW1Z9kkKFnJ2v.
- > MD5(UNIX)?
這道題還提供了一個密碼恢復工具passwordpro,下載解壓後看其幫助,功能挺強大。可以用於恢復– MySQL – MySQL5 – DES(Unix) – DES(Oracle) – MD2 – MD2(HMAC) – MD4 – MD4(HMAC) – MD4(Base64) – MD5 – MD5(APR) – MD5(Unix) – MD5(HMAC) – MD5(Base64) – MD5(phpBB3) – MD5(Wordpress) – MD5(Cisco PIX) – MD5_Middle – MD5(HMAC(Wordpress)) – NTLM – SHA-1 – SHA-1(HMAC) – SHA-1(Base64) – SHA-1(Django) – SHA-224 – SHA-224(HMAC) – SHA-256 – SHA-256(HMAC) – SHA-256(Unix) – SHA-256(Django) – SHA-256(Base64) – SHA-256(md5($pass)) – SHA-256(PasswordSafe) – SHA-384 – ......等等等等
另外解hash碼有許多線上工具:
alimamed.pp.ru/md5/
www.phpbbhacks./md5.php
md5.shalla.de/cgibin/search.cgi
www.schwett./md5/ ...
www.clicasso.fr/outils/md5.php
www.iwebtool./md5/
md5.benramsey./
csthis./md5/index.php
shm.hardcore.pl/md5/
md5.altervista.org/
md5.allfact.info/
www.acecoolco./tool_md5.php
tools.elitehackers.info/md5.php
md5.geeks.li/
bokehman./cracker/
www.thepanicroom.org
md5.overclock.ch
www.tydal.nu/article/md5crack/
md5.neeao./
www.xmd5.org/
md5.neeao./
www.plaintext.info/search.php
passcracking./Good_values_list.asp
www.hashchecker./index.php_slssearch_hash
uploadpage.net/ap/php/projects/rt/addhash.php
www.md5lookup./
ivdb.org/search/md5/
passcracking.ru/
gdataonline./seekhash.php
www.securitystats./tools/hashcrack.php
passcrack.spb.ru/index.phpnameCrackMD5 //about 10,1 million hashes
md5.t145.1paket./md5crack.php
www.cmd5.
本題提供的passwordspro使用方法如下:開啟passwordspro,右鍵單擊中間區域,開啟“新增”對話方塊(或者直接按alt+Insert組合鍵),然後鍵入:使用者名稱(隨意)、要解密的hash碼(本題中為:windows中的d18e760f2b15a239328274a447cd67f7或linux中的$1$1zUVF6AN$uHBYbOv4WW1Z9kkKFnJ2v)、你所知道的salt(hash時需要的一個隨機數,使解碼更加困難,不知道就不要填)、雜湊型別(本題windows的似乎為NTLM,linux的為MD5(UNIX)),然後確定儲存。之後點執行鍵,開始計算(窮舉)。
 然後要配置暴力破解的字符集、密碼生成要求、分散式攻擊方式等等

這裡寫圖片描述

 選擇審計方式:暴力破解。

這裡寫圖片描述

 運氣不錯,選擇NTLM的hash碼會很快得到結果:*#!*提交成功。
 但如果要破解MD5(UNIX)的那個hash碼,就比較困難了,我試著調了幾次字符集,都未成功解除密碼。似乎是工具使用不當,搜了百度,發現有人提供了不同系統進行hash時的一些方法要點:
 一、Linux/Unix系統hash要點:
 1.ES(Unix)
    例子: IvS7aeT4NzQPM
    說明:Linux或者其他linux核心系統中
    長度: 13 個字元
    描述:第1、2位為salt,例子中的'Iv'位salt,後面的為hash值
 2.系統:MD5(Unix)
    例子:$1$12345678$XM4P3PrKBgKNnTaqG9P0T/
    說明:Linux或者其他linux核心系統中
    長度:34個字元
    描述:開始的$1$位為加密標誌,後面8位12345678為加密使用的salt,後面的為hash
    加密演算法:2000次迴圈呼叫MD5加密
 3.系統:SHA-512(Unix)
    例子:$6$12345678$U6Yv5E1lWn6mEESzKen42o6rbEm
    說明:Linux或者其他linux核心系統中
    長度: 13 個字元
    描述:開始的$6$位為加密標誌,後面8位為salt,後面的為hash
    加密演算法:5000次的SHA-512加密
 4.系統:SHA-256(Unix)
    例子:$5$12345678$jBWLgeYZbSvREnuBr5s3gp13vqi
    說明:Linux或者其他linux核心系統中
    長度: 55 個字元
    描述:開始的$5$位為加密標誌,後面8位為salt,後面的為hash
    加密演算法:5000次的SHA-256加密
 5.系統:MD5(APR)
    例子:$apr1$12345678$auQSX8Mvzt.tdBi4y6Xgj.
    說明:Linux或者其他linux核心系統中
    長度:37個字元
    描述:開始的$apr1$位為加密標誌,後面8位為salt,後面的為hash
    加密演算法:2000次迴圈呼叫MD5加密
二、windows系統下hash要點
 Windows hash由二部分組成,分別是LM HASH&NT HASH
 例子:Admin:b474d48cdfc4974d86ef4d24904cdd91
 長度:98個字元
 組成:使用者名稱稱:RID:LM-HASH值:NT-HASH值
 加密演算法:MD4(MD4(Unicode($pass)).Unicode(strtolower($username)))
 詳情參考:http://www.freebuf.com/articles/database/70395.html
 1.LM
    LM hash演算法:
    1.使用者的密碼被限制為最多14個字元。
    2.使用者的密碼轉換為大寫。
    3.系統中使用者的密碼編碼使用了OEM內碼頁
    4.密碼不足14位元組將會用0來補全。
    5.固定長度的密碼被分成兩個7byte部分。
      每部分轉換成位元流,在分7bit為一組末尾加0,組成新的編碼
    6.上步驟得到的8byte二組,分別作為DES key為“[email protected]#$%”進行加密。
    7.將二組DES加密後的編碼拼接,得到最終LM HASH值。
 2.NLTM
    首先轉換成Unicode字串,與LM Hash演算法不同,這次不需要新增0補足14位元組;
    "123456"->310032003300340035003600。
    從ASCII串轉換成Unicode串時,使用little-endian序,微軟在設計整個SMB協議時就沒考慮過big-endian 序,ntoh*()、hton*()函式不宜用在SMB報文解碼中。0×80之前的標準ASCII碼轉換成Unicode碼,就是簡單地從0x??變成 0×00??。此類標準ASCII串按little-endian序轉換成Unicode串,就是簡單地在原有每個位元組之後新增0×00。對所獲取的 Unicode串進行標準MD4單向雜湊,無論資料來源有多少位元組,MD4固定產生128-bit的雜湊值,16位元組310032003300340035003600-進行標準MD4單向雜湊->32ED87BDB5FDC5E9 CBA88547376818D4,就得到了最後的NTLM Hash。 NTLM Hash:32ED87BDB5FDC5E9CBA88547376818D4。
    與LM Hash演算法相比,明文口令大小寫敏感,無法根據NTLM Hash判斷原始明文口令是否小於8位元組,擺脫了魔術字串"[email protected]#$%"。MD4是真正的單向雜湊函式,窮舉作為資料來源出現的明文,難度較大。
三、mysql系統下hash要點
    例子:606717496665bcba
    說明:老版本的MySql中
    長度:8位元組(16個字元)
    說明:包括兩個位元組,且每個字的值不超過0x7fffffff
    系統:MySQL5
    例子:*E6CC90B878B948C35E92B003C792C46C58C4AF40
    說明:較新版本的MySQL
    長度:20位元組(40位)
    加密演算法:SHA-1(SHA-1($pass))
四、其他系統hash要點:
1.系統:MD5(WordPress)
    例子:$P$B123456780BhGFYSlUqGyE6ErKErL01
    說明:WordPress使用的md5
    長度:34個字元
    描述:$P$表示加密型別,然後跟著一位字元,經常是字元‘B’,後面是8位salt,後面是就是hash。
    加密演算法:8192次md5迴圈加密
2.系統:MD5(phpBB3)
    說明:phpBB 3.x.x.使用
    例子:$H$9123456785DAERgALpsri.D9z3ht120
    長度:34個字元
    描述:開始的$H$為加密標誌,後面跟著一個字元,一般的都是字元‘9’,然後是8位salt,然後是hash值。
    加密演算法:2048次迴圈呼叫MD5加密
3.系統:RAdmin v2.x
    說明:Remote Administrator v2.x版本中
    例子:5e32cceaafed5cc80866737dfb212d7f
    長度:16位元組(32個字元)
    加密演算法:字元用0填充到100位元組後,將填充過後的字元經過md5加密得到(32位值)
4.標準MD5
    例子:c4ca4238a0b923820dcc509a6f75849b
    使用範圍:phpBB v2.x, Joomla 的 1.0.13版本前,及其他cmd
    長度:16個字元
5.其他的加salt及變形類似:
    md5($salt.$pass)
    例子:f190ce9ac8445d249747cab7be43f7d5:12
    md5(md5($pass))
    例子:28c8edde3d61a0411511d3b1866f0636
    md5(md5($pass).$salt)
    例子:6011527690eddca23580955c216b1fd2:wQ6
    md5(md5($salt).md5($pass))
    例子: 81f87275dd805aa018df8befe09fe9f8:wH6_S
    md5(md5($salt).$pass)
    例子: 816a14db44578f516cbaef25bd8d8296:1234

本題中要解開MD5(unix),可以參考Linux/Unix系統hash要點進行選項設定,我試了若干次,沒有成功,很遺憾,日後再說吧。

總之本題可以通過提交*#!*解決!

最後,推薦一個有關hash的專業網站http://www.insidepro.com/ 開啟它的Forum可以下在SAMinside、passwordspro和EGB(極速GPU爆破):
http://www.insidepro.com/download/saminside.zip
http://www.insidepro.com/download/passwordspro.zip
http://www.insidepro.com/download/EGB.zip