国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

sql安全之SQL注入漏洞拖庫原理解析

2024-05-04 21:49:22
字體:
供稿:網(wǎng)友

本文章以自己的一些經(jīng)驗來告訴你黑客朋友們會怎么利用你數(shù)據(jù)庫的sql漏洞來把你的數(shù)據(jù)庫下載,有需要的同這參考一下本文章.

在數(shù)據(jù)庫中建立一張表,代碼如下:

  1. CREATE TABLE `article` ( 
  2.  
  3.   `articleid` int(11) NOT NULL AUTO_INCREMENT, 
  4.  
  5.   `title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT ''
  6.  
  7.   `content` text CHARACTER SET utf8 NOT NULL
  8.  
  9.   PRIMARY KEY (`articleid`) 
  10.  
  11. ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1; 

在表中插入數(shù)據(jù)的操作我就不貼代碼了,可以去下載下來直接導入到數(shù)據(jù)庫,接下來,寫一個處理用戶請求的頁面,這里,我們故意不過濾用戶提交過來的數(shù)據(jù),留下個SQL注入漏洞用來測試,代碼如下:

  1. <?php 
  2.  
  3.        $servername = "localhost"
  4.  
  5.        $dbusername = "root"
  6.  
  7.        $dbpassword = ""
  8.  
  9.        $dbname = "test"
  10.  
  11.        $id=$_GET['id'];//id未經(jīng)過濾 
  12.  
  13.        $conn=mysql_connect($servername,$dbusername,$dbpasswordor die ("數(shù)據(jù)庫連接失敗"); 
  14.  
  15.        mysql_select_db($dbname,$conn); 
  16.  
  17.        mysql_query('set names utf8'); 
  18.  
  19.        $sql = "SELECT * FROM article WHERE articleid='$id'"
  20.  
  21.        $result = mysql_query($sql,$conn); 
  22.  
  23.        $row = mysql_fetch_array($result); 
  24.  
  25.        echo "<p>利用SQL注入漏洞拖庫<p>"
  26.        //開源代碼Vevb.com 
  27.        if (!$row){ 
  28.  
  29.               echo "該記錄不存在"
  30.  
  31.               exit
  32.  
  33.        } 
  34.  
  35.        echo "標題<br>".$row['title']."<p>"
  36.  
  37.        echo "內(nèi)容<br>".$row['content']."<p>"
  38.  
  39. ?> 

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

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

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

接下來,我們就利用這個漏洞(不知道該漏洞的情況下,只能通過工具+手工檢測),演示一下如何將article表下載下來,在地址欄中輸入:

'into outfile'e:/sql.txt'%23 

分析:%23是#的ASCII碼,由于在地址欄中直接輸入#后到數(shù)據(jù)庫系統(tǒng)中會變成空,需要在地址欄中輸入%23,那么才會變成#,進而注釋掉后面的sql語句.

運行之后,打開E盤,發(fā)現(xiàn)多了一個sql.txt文件,打開之后,里面就是表article中的一條記錄,為什么只有一條記錄呢?難道該數(shù)據(jù)表就只有一條記錄?不是這樣的,因為我們只檢索id為1的一條記錄而已,那么能否將article表中的所有記錄一次性全部下載下來呢?

答案是可以的,只要你的構造的SQL語句足夠靈活(再次提出了構造SQL語句的靈活性)。

分析一下,當在URL地址欄中輸入’into outfile 'e:/sql.txt'%23的時候,合并到sql查詢語句中變?yōu)?

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語句在先執(zhí)行select語句,將表article中的所以內(nèi)容全部檢索出來,然后再執(zhí)行into outfile 'e:/whf.txt'#'將內(nèi)容導出來.

不信的話,你執(zhí)行下……利用SQL注入漏洞,我們可以猜測表名,列名,用戶的密碼長度(LEFT函數(shù))等等,當然了,如果能直接向以上的演示那樣將表中的數(shù)據(jù)全部導出的話就沒必要去猜表名列名等等.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宣城市| 华池县| 铜川市| 宁波市| 南宁市| 邵阳县| 大庆市| 灵川县| 会东县| 余姚市| 宁津县| 六盘水市| 武乡县| 江孜县| 玉山县| 邵阳县| 财经| 金堂县| 扎鲁特旗| 两当县| 湘潭市| 泽普县| 皋兰县| 科尔| 香河县| 南康市| 句容市| 宜黄县| 高邑县| 正蓝旗| 凤冈县| 河池市| 于都县| 同仁县| 北流市| 和静县| 久治县| 吕梁市| 扶绥县| 上思县| 县级市|