Mysql注入中的outfile、dumpfile、load_file函數(shù)詳解
在利用sql注入漏洞后期,最常用的就是通過mysql的file系列函數(shù)來進(jìn)行讀取敏感文件或者寫入webshell,其中比較常用的函數(shù)有以下三個(gè)
- into dumpfile()
- into outfile()
- load_file()
我們本次的測(cè)試數(shù)據(jù)如下
讀寫文件函數(shù)調(diào)用的限制
因?yàn)樯婕暗皆诜?wù)器上寫入文件,所以上述函數(shù)能否成功執(zhí)行受到參數(shù) secure_file_priv
的影響。官方文檔中的描述如下
翻譯一下就是
- 其中當(dāng)參數(shù)
secure_file_priv
為空時(shí),對(duì)導(dǎo)入導(dǎo)出無限制 - 當(dāng)值為一個(gè)指定的目錄時(shí),只能向指定的目錄導(dǎo)入導(dǎo)出
- 當(dāng)值被設(shè)置為NULL時(shí),禁止導(dǎo)入導(dǎo)出功能
這個(gè)值可以通過命令 select @@secure_file_priv
查詢。由于這個(gè)參數(shù)不能動(dòng)態(tài)更改,只能在mysql的配置文件中進(jìn)行修改,然后重啟生效。
dumpfile與outfile的區(qū)別
導(dǎo)出數(shù)據(jù)庫(kù)場(chǎng)景下的差異
select …… into outfile
我們先來看一下mysql官方文檔里對(duì)于這兩個(gè)函數(shù)的解釋
其中有兩個(gè)值得注意的坑點(diǎn)
outfile函數(shù)可以導(dǎo)出多行,而dumpfile只能導(dǎo)出一行數(shù)據(jù)
outfile函數(shù)在將數(shù)據(jù)寫到文件里時(shí)有特殊的格式轉(zhuǎn)換,而dumpfile則保持原數(shù)據(jù)格式
我們接下來通過導(dǎo)出測(cè)試看看這里面的細(xì)節(jié)
首先通過命令 select * from test into outfile '/tmp/test.txt'
來使用outfile導(dǎo)出
可以看到文件 /tmp/test.txt
文件中保存了所有的數(shù)據(jù)并且在一行數(shù)據(jù)的末尾自動(dòng)換行
通過查看官方文檔,可以看出使用如下參數(shù)可以進(jìn)行格式調(diào)整
其中 FIELDS ESCAPED BY
可以用來對(duì)指定的字符進(jìn)行轉(zhuǎn)義, FIELDS [OPTIONALLY] ENCLOSED BY
用來對(duì)字段值進(jìn)行包裹, FIELDS TERMINATED BY
用來對(duì)字段值之間進(jìn)行分割
例如使用如下命令 select * from test into outfile '/tmp/test.txt FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ' " 'LINES TERMINATED BY '\n'
得到的導(dǎo)出文件如下
select …… into dumpfile
而接著使用命令 select * from test into dumpfile '/tmp/test.txt'
使用dumpfile進(jìn)行導(dǎo)出
可以看到此命令在執(zhí)行的時(shí)候提示輸出超過一行
查看文件內(nèi)容
可以看見通過dumpfile導(dǎo)出的數(shù)據(jù)行數(shù)據(jù)之間并未進(jìn)行換行且只導(dǎo)出了部分?jǐn)?shù)據(jù)
寫入webshell或者udf下的差異
select …… into outfile
我們使用命令 select 'a\naa\raaaa' into outfile '/tmp/test.txt'
來看一下在常用的寫文件場(chǎng)景下的結(jié)果
可以看到outfile對(duì)導(dǎo)出內(nèi)容中的\n等特殊字符進(jìn)行了轉(zhuǎn)義,并且在文件內(nèi)容的末尾增加了一個(gè)新行
我們接著使用命令 select 'a\naa\raaaa' into dumpfile '/tmp/test.txt'
來看一下
可以看到dumpfile對(duì)文件內(nèi)容是原意寫入,未做任何轉(zhuǎn)移和增加。這也就是為什么 我們?cè)谄匠5腢DF提權(quán)中使用dumpfile進(jìn)行dll文件
寫入的原因
還有一個(gè)需要關(guān)注的點(diǎn)就是:outfile后面不能接0x開頭或者char轉(zhuǎn)換以后的路徑,只能是單引號(hào)路徑。這個(gè)問題在php注入中更加麻煩,因?yàn)闀?huì)自動(dòng)將單引號(hào)轉(zhuǎn)義成\',那么基本就GG了,但是load_file,后面的路徑可以是單引號(hào)、0x、char轉(zhuǎn)換的字符,但是路徑中的斜杠是/而不是\
總結(jié)
以上所述是小編給大家介紹的Mysql注入中的outfile、dumpfile、load_file函數(shù)詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
MySQL中大數(shù)據(jù)表增加字段的實(shí)現(xiàn)思路
最近遇到的一個(gè)問題,需要在一張將近1000萬數(shù)據(jù)量的表中添加加一個(gè)字段,但是直接添加會(huì)導(dǎo)致mysql 奔潰,所以需要利用其他的方法進(jìn)行添加,這篇文章主要給大家介紹了MySQL中大數(shù)據(jù)表增加字段的實(shí)現(xiàn)思路,需要的朋友可以參考借鑒。2017-01-01詳解MySQL數(shù)據(jù)庫(kù)--多表查詢--內(nèi)連接,外連接,子查詢,相關(guān)子查詢
這篇文章主要介紹了MySQL多表查詢,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04MySQL版oracle下scott用戶建表語句實(shí)例
這篇文章主要給大家介紹了關(guān)于MySQL版oracle下scott用戶建表語句的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02MySQL?根據(jù)多字段查詢重復(fù)數(shù)據(jù)的示例代碼
本文介紹了如何使用 MySQL 根據(jù)多個(gè)字段查詢重復(fù)數(shù)據(jù),我們介紹了如何根據(jù)多個(gè)字段查詢重復(fù)數(shù)據(jù),并提供了相應(yīng)的代碼示例,通過這些方法,我們可以快速準(zhǔn)確地找到和處理重復(fù)數(shù)據(jù),提高數(shù)據(jù)庫(kù)的數(shù)據(jù)質(zhì)量,需要的朋友可以參考下2023-11-11mysql?使用join進(jìn)行多表關(guān)聯(lián)查詢的操作方法
在一些報(bào)表統(tǒng)計(jì)或數(shù)據(jù)展示時(shí)候需要提取的數(shù)據(jù)分布在多個(gè)表中,這個(gè)時(shí)候需要進(jìn)行join連表操作,join將兩個(gè)或多個(gè)表當(dāng)成不同的數(shù)據(jù)集合,然后進(jìn)行集合取交集運(yùn)算,這篇文章主要介紹了mysql?使用join進(jìn)行多表關(guān)聯(lián)查詢的操作方法,需要的朋友可以參考下2024-02-02