imipenguin 是一個免費、開源、簡單但是強大的 shell/python 腳本,用來從當前 Linux 桌面用戶轉儲登錄憑證(用戶名和密碼),并且已在不同的 Linux 發行版中測試過。 -- Aaron Kili
本文導航
-mimipenguin 是如何工作的? …… 15%
-在 Linux 中安裝 mimipenguin …… 30%
-未來更新 …… 61%
編譯自: https://www.tecmint.com/mimipenguin-hack-login-passwords-of-linux-users/作者: Aaron Kili
譯者: geekpi
mimipenguin 是一個免費、開源、簡單但是強大的 shell/python 腳本,用來從當前 Linux 桌面用戶轉儲登錄憑證(用戶名和密碼),并且已在不同的 Linux 發行版中測試過。
另外,它還支持如:VSFTPd(活躍的 FTP 客戶端連接)、Apache2(活躍的/舊的 HTTP 基礎認證會話,但是這需要 Gcore),還有 openssh-server(活躍的 SSH 鏈接,需用 sudo 命令[1])。重要的是,它逐漸被移植到其他語言中,以支持所有可想到的以后可以利用的情況。
要理解 mimipenguin 是如何工作的,你需要知道所有或者大多數的 Linux 發行版會在內存中存儲大量的重要信息, 如:憑據、加密密鑰以及個人數據。
尤其是用戶名和密碼是由進程(運行中的程序)保存在內存中,并以明文形式存儲較長時間。mimipenguin 在技術上利用這些在內存中的明文憑證 - 它會轉儲一個進程,并提取可能包含明文憑據的行。
然后,通過以下內容的哈希值來嘗試計算每個單詞的出現幾率:/etc/shadow、內存和 regex 搜索。一旦找到任何內容,它就會在標準輸出上打印出來。
我們將使用 git 來克隆 mimipenguin 倉庫,因此如果你還沒安裝,那么首先在系統上安裝 git。
$ sudo apt install git #Debian/Ubuntu systems$ sudo yum install git #RHEL/CentOS systems
$ sudo dnf install git #Fedora 22+
接著像這樣在你的家目錄(或者其他任何地方)克隆 mimipenguin 目錄:
$ git clone https://github.com/huntergregal/mimipenguin.git
下載完成后,進入并如下運行 mimipenguin:
$ cd mimipenguin/$ ./mimipenguin.sh
注意:如果你遇到下面的錯誤,那就使用 sudo 命令:
Root required - You are dumping memory...Even mimikatz requires administrator
在 Linux 中轉儲登錄密碼
從上面的輸出中,mimipenguin 向你提供了桌面環境的用戶名和密碼。
另外,還可以如下運行 python 版腳本:
$ sudo ./mimipenguin.py
注意有時 gcore 可能會阻塞腳本(這是 gcore 中一個已知問題)。
下面是將會被添加到 mimipenguin 的功能:
提升總體效率
添加更多支持以及其他的憑據位置
包括支持非桌面環境
添加 LDAP 的支持
mimipenguin 的 Github 倉庫:https://github.com/huntergregal/mimipenguin
同樣,請查閱:
如何在 Linux 中用密碼保護一個 vim 文件[2]
如何在 Linux 中生成/加密/解密隨機密碼[3]
如何在 RHEL/CentOS/Fedora 中用密碼保護 GRUB[4]
在 CentOS 7 中重置/恢復忘記的 root 用戶賬號密碼[5]
在下面的評論欄中分享你關于這個工具的額外想法或者對 Linux 中內存中明文憑據的問題。
(題圖:Pixabay,CC0)
作者簡介:
Aaron Kili 是 Linux 和 F.O.S.S 愛好者,即將成為 Linux SysAdmin 和網絡開發人員,目前是 TecMint 的內容創作者,他喜歡在電腦上工作,并堅信分享知識。
via: https://www.tecmint.com/mimipenguin-hack-login-passwords-of-linux-users/
作者:Aaron Kili[6] 譯者:geekpi 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
[1]: sudo 命令 - https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/
[2]: 如何在 Linux 中用密碼保護一個 vim 文件 - https://linux.cn/article-8547-1.html
[3]: 如何在 Linux 中生成/加密/解密隨機密碼 - https://www.tecmint.com/generate-encrypt-decrypt-random-passwords-in-linux/
[4]: 如何在 RHEL/CentOS/Fedora 中用密碼保護 GRUB - https://www.tecmint.com/password-protect-grub-in-linux/
[5]: 在 CentOS 7 中重置/恢復忘記的 root 用戶賬號密碼 - https://linux.cn/article-8212-1.html
[6]: Aaron Kili - https://www.tecmint.com/author/aaronkili/
本文章中所有內容僅供學習交流,抓包內容、敏感網址、數據接口均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關,若有侵權,請聯系我立即刪除!
j_mcmm: 351faaef3ba8f4db2001ec621344dbbf
在以前的案列中,我們都是通過直接搜索來定位加密參數的位置的,直接搜索出來的定位通常是比較準確的,但是有個弊端就是搜索的結果可能會非常多,需要人工去過濾,需要一定的經驗去判斷準確的加密位置,而且對于一些反爬力度較大的站點來說,可能做了很多混淆,根本就搜索不到,那么今天的案列中,我們將介紹另一種方法,即 DOM 事件斷點,需要注意的是,DOM 事件斷點也是有弊端的,通過這種方法找到的位置通常在加密處理之前,也就是說想要找到準確的加密位置,還需要進一步分析上下文才能確定。
DOM 全稱 Document Object Model,即文檔對象模型,是 HTML 和 XML 文檔的編程接口,定義了訪問和操作 HTML 文檔的標準方法。
一個網頁其實就是一個 HTML 文件,經過瀏覽器的解析,最終呈現在用戶面前,一個簡單的 HTML 頁面代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>我的第一個HTML頁面</title>
</head>
<body>
<h1>我的第一個標題</h1>
<p>我的第一個段落</p>
</body>
</html>
在 HTML 頁面代碼中,head、body 等標簽不是隨意排列的,它們有自己的規則。首先,它們是嵌套的,一層套一層,比如 html 套 body,body 又套 h1,其次, 每一層可以同時存在很多標簽,比如 head 和 body 屬于同一層,它們被外面的 html 套著,這樣的結構很像計算機里的文件夾,例如,我的電腦是最外層,里面套著 C、D、E、F 盤,每個盤里又有很多文件夾,文件夾里又有文件夾,逐個打開后才能看到具體的文件。
為什么要按照這種結構來組織呢?目的其實是方便解析和查詢,解析的時候,從外向里循序漸進,好比按照圖紙蓋房子,先蓋圍墻,再蓋走廊,最后才蓋臥室。查詢的時候,會遵循一條明確的路線,一層一層地縮小范圍,查找效率會非常高。
所以,瀏覽器在解析 HTML 文檔時,會把每個標簽抽象成代碼里的對象,按照這種層次分明的結構組織,這就是 DOM,HTML DOM 結構如下圖所示:
本次逆向的目標是某商盟的登錄密碼,本案例的加密參數為 j_mcmm
,加密比較簡單,直接全局搜索也很容易找到加密的地方,但是本次我們不使用全局搜索,改用 DOM 事件斷點來定位加密位置。
打開開發者工具,點擊左上角箭頭按鈕,再點擊登陸按鈕,即可定位到該按鈕元素的位置,在 Elements 面板,右邊選擇 Event Listeners,即事件監聽列表,可以看到一些鼠標點擊、鼠標移動、提交、加載等事件:
我們將這些事件展開具體看一下,submit 提交事件,定位到 div 標簽,div 標簽下有一個 form 表單,form 的作用就是為用戶輸入創建 HTML 表單,向服務器傳輸數據,跟進這個 submit 用到的 JS 文件,大概率就能夠找到加密的地方,這里還有個小技巧,如果事件太多,不太好判斷哪個是提交數據的,或者哪個是登錄事件的,可以選擇性的點擊 Remove,移除一些事件,再登錄,如果登錄不能點擊,或者 Network 里沒有提交請求,就說明 Remove 的這個事件剛好就是目標事件。
跟進 submit 事件用到的 JS,會定位到 function e()
的位置,往下看,就可以找到疑似加密的地方,這里出現了兩個 j_mcmm
,分別是 g.j_mcmm
和 P.j_mcmm
,埋下斷點進行調試,經過對比可以發現 g.j_mcmm
是最終需要的值:
在 g.j_mcmm=b
語句中,b 的值就是最終加密后的值,往上找,第 1125 和 1126 行 var e=b;
b=F(F(b) + c);
,把明文密碼賦值給 b,c 為驗證碼,經過 F 這個函數的處理后得到加密值,繼續跟進 F 函數:
可以看到其實就是經過以下函數的處理:
function d(a) {
return n(e(o(m(a + "{1#2$3%4(5)6@7!poeeww$3%4(5)djjkkldss}")), 32))
}
這個函數中,又包含 n, e, o, m 函數,這里不再每個函數去剝離,直接將這個函數往下所有單個字母的函數 copy 下來本地調試即可。
GitHub 關注 K 哥爬蟲,持續分享爬蟲相關代碼!歡迎 star !https://github.com/kgepachong/
以下只演示部分關鍵代碼,不能直接運行!完整代碼倉庫地址:https://github.com/kgepachong/crawler/
function getEncryptedPassword(a, b, c) {
// a: 用戶名, b: 密碼, c: 驗證碼
function d(a) {
return n(e(o(m(a + "{1#2$3%4(5)6@7!poeeww$3%4(5)djjkkldss}")), 32))
}
function e(a, b) {}
function f(a, b, c, d, e, f) {}
function g(a, b, c, d, e, g, h) {}
function h(a, b, c, d, e, g, h) {}
function i(a, b, c, d, e, g, h) {}
function j(a, b, c, d, e, g, h) {}
function k(a, b) {}
function l(a, b) {}
function m(a) {}
function n(a) {}
function o(a) {}
c.hex_md5=d
b=d(d(b) + c);
return b
}
// 測試樣例
// console.log(getEncryptedPassword('123123', '1231234', '6798'))
例最終效果如下:
一、設置整個網頁的背景色
圖1
圖2
二、創建一個盒子,讓其水平居中,距離上邊200像素。
圖3
圖4
三、把盒子設置四個角為圓角,圓10個像素。
圖5
圖6
四、在大盒子里做一個ding盒子,設置它上面兩個角是圓角,下面兩個角是直角。
圖7
圖8
五、ding盒子里輸入幾個字,讓這幾個字在盒子里水平居中,垂直居中,關于盒子內居中問題可參看我寫的文【203】。
圖9
圖10
六、在deng盒子里面再做三個小盒子,取名為ref,注意如果這三個盒子不用浮動,會有什么效果,這個你可以試試看。
圖11
圖12
七、往ref盒子里面添加信息,發下圖,這里順便學習兩個標簽,一個是input,一個是button。
圖13
圖14
八、去掉背景色,然后用盒子內居中的方法,讓這些元素居中。
圖15
圖16
九、通過樣式,設置按鈕的大小和字的大小,這里我特地用id來給元素上名字,不同于class,在樣式里調用的時候,一個是前面加.一個是前面加#。
圖17
圖18
十、最后設置一下密碼輸入框,輸入內容時為密碼隱藏符號。
圖19
圖20
*請認真填寫需求信息,我們會在24小時內與您取得聯系。