監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關閉
新余網(wǎng)站建設公司

當前位置:工程項目OA系統(tǒng) > 泛普各地 > 江西OA系統(tǒng) > 新余OA > 新余網(wǎng)站建設公司

怎樣利用SQL注入漏洞登錄后臺

申請免費試用、咨詢電話:400-8352-114

早在02年,國外關于SQL注入漏洞的技術文章已經(jīng)很多,而國內在05年左右才開始的。

  如今,談SQL注入漏洞是否已是明日黃花,國內大大小小的網(wǎng)站都已經(jīng)補上漏洞。但,百密必有一疏,入侵是偶然的,但安全絕對不是必然的。

  前些天,網(wǎng)上傳得沸沸揚揚的“拖庫”事件給我們敲響了安全警鐘。

  在開發(fā)網(wǎng)站的時候,出于安全考慮,需要過濾從頁面?zhèn)鬟f過來的字符。通常,用戶可以通過以下接口調用數(shù)據(jù)庫的內容:URL地址欄、登陸界面、留言板、搜索框等。這往往給駭客留下了可乘之機。輕則數(shù)據(jù)遭到泄露,重則服務器被拿下。

  現(xiàn)在,很多網(wǎng)站開發(fā)人員知其然而不知其所以然,小弟也是,所以趕緊惡補下,總結如學習內容。希望對初學者能夠起到拋磚引玉的作用。

  一、SQL注入的步驟

  a) 尋找注入點(如:登錄界面、留言板等)

  b) 用戶自己構造SQL語句(如:’ or 1=1#,后面會講解)

  c) 將sql語句發(fā)送給數(shù)據(jù)庫管理系統(tǒng)(DBMS)

  d) DBMS接收請求,并將該請求解釋成機器代碼指令,執(zhí)行必要的存取操作

  e) DBMS接受返回的結果,并處理,返回給用戶

  因為用戶構造了特殊的SQL語句,必定返回特殊的結果(只要你的SQL語句夠靈活的話)。

  下面,我通過一個實例具體來演示下SQL注入

  二、SQL注入實例詳解(以上測試均假設服務器未開啟magic_quote_gpc)

  1) 前期準備工作

  先來演示通過SQL注入漏洞,登入后臺管理員界面

  首先,創(chuàng)建一張試驗用的數(shù)據(jù)表:

  CREATE TABLE `users` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `username` varchar(64) NOT NULL,

  `password` varchar(64) NOT NULL,

  `email` varchar(64) NOT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `username` (`username`)

  ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

  添加一條記錄用于測試:

  INSERT INTO users (username,password,email)

  VALUES('MarcoFly',md5('test'),'marcofly@test.com');

  接下來,貼上登錄界面的源代碼:

<html>
<head>
<title>Sql注入演示</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>

<body >
<form action="validate.php" method="post">
  <fieldset >
    <legend>Sql注入演示</legend>
    <table>
      <tr>
        <td>用戶名:</td>
        <td><input type="text" name="username"></td>
      </tr>
      <tr>
        <td>密&nbsp;&nbsp;碼:</td>
        <td><input type="text" name="password"></td>
      </tr>
      <tr>
        <td><input type="submit" value="提交"></td>
        <td><input type="reset" value="重置"></td>
      </tr>
    </table>
  </fieldset>
</form>
</body>
</html>

  

  當用戶點擊提交按鈕的時候,將會把表單數(shù)據(jù)提交給validate.php頁面,validate.php頁面用來判斷用戶輸入的用戶名和密碼有沒有都符合要求(這一步至關重要,也往往是SQL漏洞所在)

  代碼如下:

<html>
<head>
<title>登錄驗證</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>

<body>
<?php

       $conn=@mysql_connect("localhost",'root','') or die("數(shù)據(jù)庫連接失敗!");;

       mysql_select_db("injection",$conn) or die("您要選擇的數(shù)據(jù)庫不存在");

       $name=$_POST['username'];

       $pwd=$_POST['password'];

       $sql="select * from users where username='$name' and password='$pwd'";

       $query=mysql_query($sql);

       $arr=mysql_fetch_array($query);

       if(is_array($arr)){

              header("Location:manager.php");

       }else{

              echo "您的用戶名或密碼輸入有誤,<a href="Login.php">請重新登錄!</a>";

       }

?>
</body>
</html>

  注意到了沒有,我們直接將用戶提交過來的數(shù)據(jù)(用戶名和密碼)直接拿去執(zhí)行,并沒有實現(xiàn)進行特殊字符過濾,待會你們將明白,這是致命的。

  代碼分析:如果,用戶名和密碼都匹配成功的話,將跳轉到管理員操作界面(manager.php),不成功,則給出友好提示信息。

  登錄成功的界面:

  登錄失敗的提示:

  到這里,前期工作已經(jīng)做好了,接下來將展開我們的重頭戲:SQL注入

  2) 構造SQL語句

  填好正確的用戶名(marcofly)和密碼(test)后,點擊提交,將會返回給我們“歡迎管理員”的界面。

  因為根據(jù)我們提交的用戶名和密碼被合成到SQL查詢語句當中之后是這樣的:

  select * from users where username='marcofly' and password=md5('test')

  很明顯,用戶名和密碼都和我們之前給出的一樣,肯定能夠成功登陸。但是,如果我們輸入一個錯誤的用戶名或密碼呢?很明顯,肯定登入不了吧。恩,正常情況下是如此,但是對于有SQL注入漏洞的網(wǎng)站來說,只要構造個特殊的“字符串”,照樣能夠成功登錄。

  比如:在用戶名輸入框中輸入:’ or 1=1#,密碼隨便輸入,這時候的合成后的SQL查詢語句為:

  select * from users where username='' or 1=1#' and password=md5('')

  語義分析:“#”在mysql中是注釋符,這樣井號后面的內容將被mysql視為注釋內容,這樣就不會去執(zhí)行了,換句話說,以下的兩句sql語句等價:

  select * from users where username='' or 1=1#' and password=md5('')

  等價于

  select * from users where username='' or 1=1

  因為1=1永遠是都是成立的,即where子句總是為真,將該sql進一步簡化之后,等價于如下select語句:

  select * from users

  沒錯,該sql語句的作用是檢索users表中的所有字段

  小技巧:如果不知道’ or 1=1#中的單引號的作用,可以自己echo 下sql語句,就一目了然了。

  看到了吧,一個經(jīng)構造后的sql語句竟有如此可怕的破壞力,相信你看到這后,開始對sql注入有了一個理性的認識了吧~

  沒錯,SQL注入就是這么容易。但是,要根據(jù)實際情況構造靈活的sql語句卻不是那么容易的。有了基礎之后,自己再去慢慢摸索吧。

發(fā)布:2007-03-31 15:14    編輯:泛普軟件 · xiaona    [打印此頁]    [關閉]
新余OA
聯(lián)系方式

成都公司:成都市成華區(qū)建設南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢

泛普新余網(wǎng)站建設公司其他應用

新余軟件開發(fā)公司 新余門禁系統(tǒng) 新余物業(yè)管理軟件 新余倉庫管理軟件 新余餐飲管理軟件 新余網(wǎng)站建設公司