Sqli-LABS通关笔录-17-审计SQL注入

这个关卡开始好像进入新的知识区了,前面几个是让我们加深对盲注的印象。接下来又是新知识了!皮卡丘,接招吧!

代码是从SQL-libs的第十七关卡扣的。

页面效果如下所示:

PHP面完整CODE如下所示:

 1 <?php
 2 include("../sql-connections/sql-connect.php");
 3 error_reporting(0);
 4 
 5 function check_input($value) #定义一个函数为check_input,里面有一个参数为$value。
 6     {
 7     if(!empty($value))     #当参数不为空的时候
 8         {
 9         // truncation (see comments)
10         $value = substr($value,0,15); #参数如果的话执行该条语句,使用substr函数对参数进行截取取从第0位到第15位的数据。
11         }
12 
13         // Stripslashes if magic quotes enabled
14         if (get_magic_quotes_gpc()) #判断php.ini是否开启了魔术引用。
15             {
16             $value = stripslashes($value); #如果开启了对魔术引用进行反转。这个的意思就是不需要去掉魔术引用
17             }
18 
19         // Quote if not a number
20         if (!ctype_digit($value)) #ctype_digit:检测是否都是数字,负数及小数都不行,也就是说如果不为数字,为负数或者小数的执行22行代码。
21             {
22             $value = "'" . mysql_real_escape_string($value) . "'"; #关于mysql_real_escape_string()函数的更多解释:http://www.w3school.com.cn/php/func_mysql_real_escape_string.asp
23             }
24         
25     else
26         {
27         $value = intval($value); #获取$value的整数
28         }
29     return $value;
30     }
31 
32 // take the variables
33 if(isset($_POST['uname']) && isset($_POST['passwd'])) #判断user和passwd有没有设置
34 
35 {
36 //making sure uname is not injectable
37 $uname=check_input($_POST['uname']);   #使用check_input函数对传过来的uname参数进行过滤
38 
39 $passwd=$_POST['passwd']; #过滤的很好,但是密码就没过滤了。问题的关键处出在这里!
40 
41 
42 //logging the connection parameters to a file for analysis.
43 $fp=fopen('result.txt','a');
44 fwrite($fp,'User Name:'.$uname."
");
45 fwrite($fp,'New Password:'.$passwd."
");
46 fclose($fp);
47 
48 
49 // connectivity 
50 @$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";
51 
52 $result=mysql_query($sql);
53 $row = mysql_fetch_array($result);
54 //echo $row;
55     if($row)
56     {
57           //echo '<font color= "#0000ff">';    
58         $row1 = $row['username'];      
59         //echo 'Your Login name:'. $row1;
60         $update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
61         mysql_query($update);
62           echo "<br>";
63     
64     
65     
66         if (mysql_error())
67         {
68             echo '<font color= "#FFFF00" font size = 3 >';
69             print_r(mysql_error());
70             echo "</br></br>";
71             echo "</font>";
72         }
73         else
74         {
75             echo '<font color= "#FFFF00" font size = 3 >';
76             //echo " You password has been successfully updated " ;        
77             echo "<br>";
78             echo "</font>";
79         }
80     
81         echo '<img src="../images/flag1.jpg"   />';    
82         //echo 'Your Password:' .$row['password'];
83           echo "</font>";
84     
85 
86 
87       }
88     else  
89     {
90         echo '<font size="4.5" color="#FFFF00">';
91         //echo "Bug off you Silly Dumb hacker";
92         echo "</br>";
93         echo '<img src="../images/slap1.jpg"   />';
94     
95         echo "</font>";  
96     }
97 }
98 
99 ?>

见39行,未对齐进行过滤进而造成SQL注入 

 这题其实跟之前的一样。可以使用延时注入来注入。至于为啥工具没跑出来我真心不懂。

THE END


原文地址:https://www.cnblogs.com/xishaonian/p/6158536.html