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

Posted 可我浪费着我寒冷的年华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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."\\n");
45 fwrite($fp,\'New Password:\'.$passwd."\\n");
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


 

以上是关于Sqli-LABS通关笔录-17-审计SQL注入的主要内容,如果未能解决你的问题,请参考以下文章

Sqli-LABS通关笔录-4

Sqli-LABS通关笔录-3

Sqli-LABS通关笔录-2

Sqli-LABS通关笔录-7[文件写入函数Outfile]

Sqli-LABS通关笔录-16

Sqli-LABS通关笔录-12