DVWA中low級的sql注入漏洞的簡單復現


第一次成功復現一個簡單漏洞,於是寫下這篇隨筆記錄一下

首先我們來看dvwa中low級的sql注入的源碼

 

 

源碼文件路徑如下圖:

 

 

源碼如下:

 1 <?php    
 2 
 3 if(isset($_GET['Submit'])){
 4     
 5     // Retrieve data
 6     
 7     $id = $_GET['id'];
 8 
 9     $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
10     $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
11 
12     $num = mysql_numrows($result);
13 
14     $i = 0;
15 
16     while ($i < $num) {
17 
18         $first = mysql_result($result,$i,"first_name");
19         $last = mysql_result($result,$i,"last_name");
20         
21         $html .= '<pre>';
22         $html .= 'ID: ' . $id . '<br>名字: ' . $first . '<br>姓氏: ' . $last;
23         $html .= '</pre>';
24 
25         $i++;
26     }
27 }
28 ?>

  簡單分析一下源碼,

      當php確認用戶提交表單后開始執行,接受id參數給$id,未經任何過濾直接用sql語句查詢數據庫,最后將查詢后的結果集中的數據打印出來

接下來為了復現漏洞,用phpMyAdmin創建一個新數據庫

  創建了一個test的數據庫,庫里創建了users表,表中隨便寫了一些數據如下:

    

然后寫一個可以查詢數據庫內容的網頁,開始復現漏洞

  代碼如下:

   

 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
 5 </head>
 6 <body>
 7 <form action="" method="GET">
 8 <p>id:<br/><input type="text" name="id">&nbsp<input type="submit"  name='submit' value="submit"/>
 9 </p>
10 </form>
11 <?php
12 
13 error_reporting(E_ALL&~E_NOTICE);
14 
15 //      連接數據庫和test表
16 $con=mysql_connect("localhost","root","root");
17 if (!$con){
18     die('Could not connect: ' . mysql_error());
19 }
20 $db_selected = mysql_select_db("test", $con);
21 
22 
23 if(isset($_GET['submit'])){  //判斷表單是否提交
24     $id=$_GET['id'];     //接受表單中id的參數賦給$id
25     $sql="SELECT user_name FROM users WHERE user_id='$id'";  //sql查詢語句
26 
27         //執行查詢語句並將結果集賦給$result
28     $result=mysql_query($sql) or die('<pre>' . mysql_error() . '</pre>' );
29 
30 
31     $num = mysql_numrows($result);
32     $i = 0;
33     while ($i < $num) {
34 
35                //提取$result的結果集中的user_name的數據並將其賦給$name
36         $name = mysql_result($result,$i,"user_name");
37 
38           // 將$id和$name的值拼接在變量$html上最后打印出來
39         $html .= '<pre>';
40         $html .= 'ID: ' . $id . '<br>名字: ' . $name;
41         $html .= '</pre>';
42         $i++;
43     }
44     echo $html;
45 }
46   
47 ?>
48 </body>
49 </html>

測試

    

  先試試正常的輸入,顯示出與用戶ID相應的用戶名

 

                     

    接着試試 萬能密碼 ,顯示出了所有用戶名

    接着就是查看數據庫及其管理員賬號

              

  

   接着是一系列sql注入

       

      爆數據庫名

      

      爆列名(這里好像把dvwa數據庫的users表里的內容也爆出來了……)

     

     爆user_pwd里的內容

總結

    復現漏洞的過程中,能逐漸理解、明白漏洞的原理,清楚代碼的構造,收獲很大。


免責聲明!

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



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