码迷,mamicode.com
首页 > Web开发 > 详细

php代码审计题目

时间:2017-12-03 00:28:47      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:row   笔记   none   splay   post   border   +=   mat   UI   

右键查看源码,发现有提示source.txt,打开链接

<?php

if  ("POST" == $_SERVER[‘REQUEST_METHOD‘])
{
    $password = $_POST[‘password‘];
    if (0 >= preg_match(‘/^[[:graph:]]{12,}$/‘, $password))
    {
        echo ‘Wrong Format‘;
        exit;
    }

    while (TRUE)
    {
        $reg = ‘/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/‘;
        if (6 > preg_match_all($reg, $password, $arr))
        break;
        $c = 0;
        $ps = array(‘punct‘, ‘digit‘, ‘upper‘, ‘lower‘);
        foreach ($ps as $pt)
        {
            if (preg_match("/[[:$pt:]]+/", $password))
            $c += 1;
        }

        if ($c < 3) break;
        if ("42" == $password) 
            require ‘flag鏂囦欢‘;
        else echo ‘Wrong password‘;
        exit;
    }
}
 
将用户输入的密码进行3次正则判断,符合 "42" == $password 才会给出flag
三个正则分别是
  1. 可见字符超过12个
  2. 字符串中,把连续的大写,小写,数字,符号作为一段,至少分六段,例如a12SD+io8可以分成a 12 SD + io 8六段
  3. 大写,小写,数字,符号这四种类型至少要出现三种
 
从网上找了资料后看到:
PHP在判断相等时做出的变化
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
 
根据这个就可以构造出来password: 42.00e+0000000000

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





php代码审计题目

标签:row   笔记   none   splay   post   border   +=   mat   UI   

原文地址:http://www.cnblogs.com/name1ess/p/7956461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!