php 绕过 正则,Bugku | 数字验证正则绕过

语法:

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

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

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

参数说明:

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

$ subject:输入字符串。

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

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

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

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

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

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

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

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!!!!!

582485e128a19cba1967d35eceafbc0e.png

369e586ca3d0cf2105e4cf510c114602.png

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

3ad79ab00d3b74b8501c6ce1e3998bb7.png

burp版本:

9ef34268053c1892bc259d5f72421019.png

e6441b309dd760b1485aef07514a1b24.png

9b54b342f94c26380cc948a5a50856dd.png

cdae7e0b9808e13f1188554f699f8bd4.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值