语法:

int preg_match_all (字符串$ pattern ,字符串$ subject [,数组和$ matches [,整数$ flags = PREG_PATTERN_ORDER [,整数$ offset = 0 ]]] )

搜索主题中所有匹配模式给定正则表达式的匹配结果并将它们以标志指定顺序输出到匹配中。

在第一个匹配找到后,子序列继续从最后一次匹配位置搜索。

参数说明:

  • $ pattern:要搜索的模式,串联形式。

  • $ subject:输入字符串。

  • $ matches:多维数据集,作为输出参数输出所有匹配结果,并通过标记进行排序。

  • $ flags:可以结合下面的标记使用(注意不能同时使用PREG_PATTERN_ORDER和PREG_SET_ORDER):

    1. PREG_PATTERN_ORDER:结果排序为$ matches [0]保存完整模式的所有匹配,$ matches [1]保存第一个子组的所有匹配,以此类推。

    2. PREG_SET_ORDER:结果排序为$ matches [0]包含第一次匹配得到的所有匹配(包含子组),$ matches [1]是包含第二次匹配到的所有匹配(包含子组)的层叠,从而类推。

    3. PREG_OFFSET_CAPTURE:如果这个标记被传递,每个发现的匹配返回时会增加它相对目标字符串的位移量。

  • offset:通常,发现时从目标字符串的开始位置开始。可选参数offset用于从目标字符串中指定位置开始搜索(单位是字节)。

返回值:返回完整的匹配次数(可能是0),或者如果发生错误返回FALSE。

<?php
error_reporting(0);
$flag = 'flag{test}'; $password= "4200000000.000000000000E-8"; /*
[:graph:]:是除空格符(空格键与[TAB]键)之外的所有按键
^ :匹配你要用来查找的字符串的开头
$:匹配结尾
{12,} :匹配重复12次或多次-->长度大于12
*/
var_dump(preg_match('/^[[:graph:]]{12,}$/', $password));
if (0 >= preg_match('/^[[:graph:]]{12,}$/', $password)) //preg_match — 执行一个正则表达式匹配
{
echo 'flag';
exit;
}
/*
[[:punct:]] 任何标点符号
[[:digit:]] 任何数字
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母 $reg --> 可打印字符
*/
while(1)
{
$reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/'; echo "preg_match_all : ";
var_dump(preg_match_all($reg, $password, $arr)); //匹配次数要大于6
if (6 > preg_match_all($reg, $password, $arr))
{
echo "no flag";
break;
}
else
{
echo "2\n";
} $c = 0;
$ps = array('punct', 'digit', 'upper', 'lower'); //[[:punct:]] 任何标点符号 [[:digit:]] 任何数字 [[:upper:]] 任何大写字母 [[:lower:]] 任何小写字母
foreach ($ps as $pt)
{
if (preg_match("/[[:$pt:]]+/", $password))
$c += 1;
}
echo "\$c :";
var_dump($c); if ($c < 3)
{
echo "我死了";
break;
}
else
{
echo "快了\n";
}
//>=3,必须包含四种类型三种与三种以上
echo "last one :";
var_dump( "42" == $password);
if ("42" == $password)
{
echo $flag;
}
else
{
echo 'Wrong password';
} exit;
}

正常的做法:用科学计数法绕过

这题唯一的坑点就是post的时候不要用password!!!!!

清奇的做法:用hackbar随便发一个post或者发一个空的post,原理尚且未知Orz


burp版本:

经过一堆测试,发现post的只要不是“password"的就行,让后台得到的是一个空,就可以出flag,所以说这是一个黑盒测试吗?!一开始给的代码其实是一个幌子???!!!

Bugku | 数字验证正则绕过的更多相关文章

  1. bugku数字验证绕过正则

    题目:http://120.24.86.145:9009/21.php 第6行使用正则匹配如果匹配到$password开头12个字符中有空格则输出flag并执行exit; 12行是正则匹配$passw ...

  2. 关于C#判断是否是数字的正则式

    有话要说 今天我同事突然让我帮他看个问题,他说想不通为什么数据库中会有不合法的内容,我都已经用正则过滤了,并且在本地调通了的! 我问他是不是你正则有问题,他说没问题啊,前端和后端的正则是一样的,前端我 ...

  3. js中对数字进行正则判断

    <script type="text/javascript"> function SubmitCk(num) { var reg = /^([a-zA-Z0-9]+[_ ...

  4. Input常用的输入框验证(正则)

    1.只是不能输入空格 <input type="text" οnkeyup="this.value=this.value.replace(/^ +| +$/g,'' ...

  5. C# 身份证号码验证正则和验证函数

    做身份证验证的时候要求能够按照标准18位身份证验证,普通正则表达式不能满足需求,所以在网上找到了这个函数,很好用,虽然还是有漏洞,不过一般乱填的号码都能被屏蔽掉 身份证验证函数(标准18位验证) pr ...

  6. 超简单的js数字验证

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...

  7. Python‘ssl.match_hostname()’函数SSL证书验证安全绕过漏洞

    漏洞名称: Python‘ssl.match_hostname()’函数SSL证书验证安全绕过漏洞 CNNVD编号: CNNVD-201312-033 发布时间: 2013-12-04 更新时间: 2 ...

  8. javascript数字验证输入

    javascript数字验证功能: <html> <body> <p>请输入数字.如果输入值不是数字,浏览器会弹出提示框.</p> <input ...

  9. Atitit  验证 数字验证 非空验证的最佳算法  h5

    Atitit  验证 数字验证 非空验证的最佳算法  h5 <td><select class="searchBox-select"   style=" ...

随机推荐

  1. Python List append()方法

    append() 方法用于在列表末尾添加新的对象.Grammar: list.append(obj) 参数obj — 添加到列表末尾的对象.返回值该方法无返回值,但是会修改原来的列表.Case: al ...

  2. .NET简单三层的理解

    1.UI 表示层 :就是我们看到的网站前台2.BLL 业务逻辑层:很简单 也很重要 处理逻辑问题 简单程序看不出啥效果3.DAL 数据访问层: 写数据连接和执行的SQL语句4.MODEL 模型层:封装 ...

  3. C#后台获取当前时间并格式化

    最常用的:DateTime.Now.ToString("yyyy-MM-dd"); //今天DateTime.Now.Date.ToShortDateString(); //昨天, ...

  4. parameterType和resultType配置错误

    自己在写mapper.xml的时候 吧parameterType和resultType的两个类搞混了 对调了一下  以至于查询了半天查询不出结果 <select id="findPat ...

  5. Django中content-type组件

    django-content 1.需求 一家餐馆,有多个菜系,粤菜.湘菜.闽南菜.东北菜等,每个菜系中的菜品又分为小份.中份.大份,每个菜系对应的菜品量价格不同,现需要将该需求建表. 2. 建表方式 ...

  6. linux查看进程数

    命令行: $ ps -ef | wc -l 如果想匹配某个关键词的话,加上grep,下面命令是匹配关键词 “XXX”,并统计含有该关键词的进程数 $ ps -ef | grep XXX | wc -l

  7. ADC(简易的DMA传输)的认识

    ADC(简易的DMA传输)的认识 首先看到是ADC的特性 1.ADC的12位分辨率.不能直接测量负电压,然后是最小量程化单位是LSB=Vref+/212 2.单次和转换模式的使用 3. 从通道0到通道 ...

  8. go web编程——session管理机制设计与实现

    原生Go语言没有实现session管理机制,所以如果使用原生Go语言进行web编程,我们需要自己进行session管理机制的设计与实现,本文将就此进行详细介绍,并实现一个简单的session管理机制. ...

  9. 【JAVA】 01-Java基础知识

    链接: 笔记目录:毕向东Java基础视频教程-笔记 GitHub库:JavaBXD33 测试 01-Java基础知识 一.数据类型 基本类型 包装类型 缓存池 二.String 概览 不可变的好处 S ...

  10. MySQL对字段新增自增序列

    现在有这样的场景,我们的数据库类型是MySQL,表是从其他库拿过来的,约束和索引都没迁移.现在希望增加一个自增序列. 且自增序列是从当前最大自增ID开始的,下面就是这样一个过程的演示. mysql&g ...