zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    smarty对网页性能的影响
    php-fpm正在生成页面时,浏览器刷新后,php-fpm会退出吗?
    为什么日志记录到别的目录了?
    一个空格引发的bug
    linux内核--页高速缓存
    radix树
    linux内核--用户态内存管理
    linux内核--内核内存管理
    linux内核--软中断与tasklet
    linux内核--几个上下文(context)
  • 原文地址:https://www.cnblogs.com/xishaonian/p/6158536.html
Copyright © 2011-2022 走看看