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注入的主要内容,如果未能解决你的问题,请参考以下文章