首頁  >  文章  >  資料庫  >  分享一篇使用SQL注入漏洞拖庫的實例講解

分享一篇使用SQL注入漏洞拖庫的實例講解

零下一度
零下一度原創
2017-05-17 15:56:398355瀏覽

利用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[&#39;id&#39;];//id未经过滤 
$conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("数据库连接失败"); 
mysql_select_db($dbname,$conn); 
mysql_query(&#39;set names utf8&#39;); 
$sql = "SELECT * FROM article WHERE articleid=&#39;$id&#39;"; 
$result = mysql_query($sql,$conn); 
$row = mysql_fetch_array($result); 
echo "<p>利用SQL注入漏洞拖库<p>"; 
if (!$row){ 
echo "该记录不存在"; 
exit; 
} 
echo "标题<br>".$row[&#39;title&#39;]."<p>"; 
echo "内容<br>".$row[&#39;content&#39;]."<p>"; 
?>

我們直接在瀏覽器中輸入:
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='' 或 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注入漏洞拖庫是我學習了相關內容之後的一點小結,沒啥深度,正如文章開頭所說,權當總結,別無它意。

【相關推薦】

1. 特別推薦「php程式設計師工具箱」V0.1版本下載

2. 如何防止sql注入?介紹5種防止sql注入的方法

3. 分享五個著名的SQL注入漏洞掃描工具

4. 分享一個SQL注入的實例過程

以上是分享一篇使用SQL注入漏洞拖庫的實例講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn