Web攻防-PHP 暂时未讲漏洞。
知识点 1、过滤函数缺陷绕过 2、CTF考点与代码审计 –> 重点在实际应用,而不是为了比赛而比赛
==与=== md5 intval strpos in_array preg_match str_replace 过滤器的不严谨会导致注入产生 1 .赋值与对比符号(CTF考点)    =   赋值     ==  对比,不对比类型        => 不具备唯一性,导致其他多种情况下条件成立         举例:1.0 和1 和+1          CTF赛事:存在绕过     === 对比,包括对比类型      => 强类型对比     $a =1 ;     if ($a ==$_GET ['x' ]){         echo  $flag ;     }          $a ='1' ;     if ($a ===$_GET ['y' ]){         echo  $flag ;     }      2 .加密    md5 加密函数,md5的对比     例如:尝试获得flag     题1  利用的是(==)的弱类型比较     if ($_GET ['username' ]!=$_GET ['password' ]){         if (MD5 ($_GET ['username' ])==MD5 ($_GET ['password' ])){             echo  $flag ;         }         echo  "?" ;     }          满足$_GET ['username' ]!=$_GET ['password' ],但是俩MD5值相等     当遇到0 e开头的md5值时,使用(==)进行比较默认值MD5值相等     题2  和上面不同点在于,他是强类型比较(===)     if ($_GET ['username' ]!=$_GET ['password' ]){         if (MD5 ($_GET ['username' ])===MD5 ($_GET ['password' ])){             echo  $flag ;         }         echo  "?" ;     }          使用数组进行绕过:MD5函数不识别数组,当参数为数组时返回null      此时出现null ===null ,两者值相等,得到flag(这操作有点骚) 3 .获取变量整数值的函数    intval ($value [,$base =10 ] ) :          默认将$value 转换为十进制整数,还能实现各个进制转10 进制整数。         $base 默认为10 进制         如果是0 时,通过var 的格式来决定使用的进制:             0 x(16 进制),0 (八进制),10 (十进制),0 b(二进制)          缺陷绕过     案例如下:     题目1      $i =666 ;$ii =$_GET ['id' ];     if (intval ($ii ==$i )){         echo  $flag ;     } 4 .查字符串    strpos ($str1 ,$str2 [,$start ]):查找$str2 在$str1 第一次出现位置,起始为$start ,默认起始为0      $i =666 ;$ii =$_GET ['id' ];     if (strpos ($ii ,$i ,"0" )){         echo  $flag ;     }           5 .查是否在数组内    in_array ($val ,$arr ,$strict ):检测值$val 是否在数组$arr 内             $strict 可选,为True时同时判断类型是否相等。(考点$strict ),否则相当于(==)     题目     $whitelist  = [1 ,2 ,3 ];     $page =$_GET ['i' ];     if (in_array ($page ,$whitelist )){         echo  "yes" ;     }      6 .正则表达式执行    preg_match ():只能处理字符串,如果不按规定传入字符串,通常传入一个数组,这样会报错     int  preg_match  ( string  $pattern  , string  $subject  [, array  &$matches  [, int  $flags  = 0  [, int  $offset  = 0  ]]] )     $pattern : 要搜索的模式,字符串形式。(正则表达式)     $subject : 输入字符串。(被搜索的字符串)     $matches : 如果提供了参数matches,它将被填充为搜索结果。(存储搜索结果)         $matches [0 ]将包含完整模式匹配到的文本,          $matches [1 ] 将包含第一个捕获子组匹配到的文本,以此类推。     $flags :flags 可以被设置为以下标记值:         PREG_OFFSET_CAPTURE: 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。         注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0 个元素是匹配到的字符串,第1 个元素是该匹配字符串                  在目标字符串subject中的偏移量。     offset: 通常,搜索从目标字符串的开始位置开始。         可选参数 offset 用于 指定从目标字符串的某个未知开始搜索(单位是字节)。     题目:     if (isset ($_GET ('num' ))){         $num =$_GET ('num' );                  if (preg_math ("/[0-9]/" ,$num )){             die ("nonono!" );          }                  if (intval ($num )){             echo  $flag ;         }     }      7 .字符串过滤    str_replace ($str1 ,$str2 ,$str ,$val ):在$str 当中查找$str1 并且将$str1 替换为$str2 ,$val 可选,用于计算替换次数     题目:无迭代过滤     无法迭代过滤可以演变为很多形式的过滤,像变量名字过滤,路径过滤等               $sql =$_GET ['s' ];     $sql =str_replace ('select' ,'' ,$sql );     echo  $sql ;      
 
WebShow赛题 题目:web89~web97
都是函数代码特性。==> CTF源于代码审计
题目1  <?php  highlight_file (__FILE__ );if (isset ($_GET ['num' ])){    $num  = $_GET ['num' ];     if (preg_match ("/[0-9]/" , $num )){         die ("no no no!" );     }     if (intval ($num )){         echo  $flag ;     } } Warning: preg_match () expects parameter 2  to be string , array  given in /var /www/html/index.php on line 20  ctfshow{2 f597376-fbcd-436 c-8604 -f28bdeb97db7} 
 
题目2  <?php  include ("flag.php" );highlight_file (__FILE__ );if (isset ($_GET ['num' ])){    $num  = $_GET ['num' ];     if ($num ==="4476" ){         die ("no no no!" );     }          if (intval ($num ,0 )===4476 ){         echo  $flag ;     }else {         echo  intval ($num ,0 );     } } ctfshow{b3737b6f-1253 -47 f0-87 fe-48 cfd4ef33a3} 
 
题目3 <?php show_source (__FILE__ );include ('flag.php' );$a =$_GET ['cmd' ];if (preg_match ('/^php$/im' , $a )){    if (preg_match ('/^php$/i' , $a )){         echo  'hacker' ;     }     else {         echo  $flag ;     } } else {    echo  'nonononono' ; }  
 
题目4  <?php  include ("flag.php" );highlight_file (__FILE__ );if (isset ($_GET ['num' ])){    $num  = $_GET ['num' ];     if ($num ==4476 ){         die ("no no no!" );     }     if (intval ($num ,0 )==4476 ){         echo  $flag ;     }else {         echo  intval ($num ,0 );     } }  
 
题目5 include ("flag.php" );highlight_file (__FILE__ );if (isset ($_GET ['num' ])){    $num  = $_GET ['num' ];     if ($num ==4476 ){         die ("no no no!" );     }     if (preg_match ("/[a-z]/i" , $num )){         die ("no no no!" );     }     if (intval ($num ,0 )==4476 ){         echo  $flag ;     }else {         echo  intval ($num ,0 );     } } 
 
题目6题目7 include ("flag.php" );highlight_file (__FILE__ );if (isset ($_GET ['num' ])){    $num  = $_GET ['num' ];     if ($num ==="4476" ){         die ("no no no!" );     }     if (preg_match ("/[a-z]/i" , $num )){         die ("no no no!" );     }     if (!strpos ($num , "0" )){         die ("no no no!" );     }     if (intval ($num ,0 )===4476 ){         echo  $flag ;     } } include ("flag.php" );highlight_file (__FILE__ );if (isset ($_GET ['num' ])){    $num  = $_GET ['num' ];     if ($num ==4476 ){         die ("no no no!" );     }     if (preg_match ("/[a-z]|\./i" , $num )){         die ("no no no!!" );     }     if (!strpos ($num , "0" )){         die ("no no no!!!" );     }     if (intval ($num ,0 )===4476 ){         echo  $flag ;     } } 
 
题目8 highlight_file (__FILE__ );if (isset ($_GET ['u' ])){    if ($_GET ['u' ]=='flag.php' ){         die ("no no no" );     }else {         highlight_file ($_GET ['u' ]);     } }  <?php $flag ="ctfshow{f1897027-e4b6-452d-a6e6-b87bd4af83ec}" ; 
 
题目9 include ("flag.php" );highlight_file (__FILE__ );if  (isset ($_POST ['a' ]) and  isset ($_POST ['b' ])) {if  ($_POST ['a' ] != $_POST ['b' ])if  (md5 ($_POST ['a' ]) === md5 ($_POST ['b' ]))echo  $flag ;else print  'Wrong.' ;} Warning: md5 () expects parameter 1  to be string , array  given in /var /www/html/index.php on line 17  Warning: md5 () expects parameter 1  to be string , array  given in /var /www/html/index.php on line 17  ctfshow{a970180a-ecf3-4 b3f-973 a-f781670391d3}