基于科学记数法的绕过

博客围绕参数绕过问题展开,指出传入参数需大于12个字符,password要有大小写数字和字符且匹配次数大于6次,最终要等于42。满足条件要么用16进制,要么用科学计数法,因正则要求,16进制不满足,给出科学记数法的payload:42.000000000e+0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

<?php
error_reporting(0);
$flag = 'flag{test}'; // 自定义了一个flag
if ("POST" == $_SERVER['REQUEST_METHOD']){  // 判断当前http的请求的方法

	$password = $_POST['password'];  // 接受post参数名为password的值
	if (0 >= preg_match('/^[[:graph:]]{12,}$/', $password)){ //preg_match 正则表达式匹配  至少十二位 非空格非TAB之外的内容
		echo 'flag';
		exit;
	}

	while (TRUE){
		$reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/';  // 四种类型的正则
		if (6 > preg_match_all($reg, $password, $arr))  // 要匹配到6次
			break;
		$c = 0;
		$ps = array('punct', 'digit', 'upper', 'lower'); //[[:punct:]] 任何标点符号 [[:digit:]] 任何数字 [[:upper:]] 任何大写字母 [[:lower:]] 任何小写字母
	foreach ($ps as $pt){
		if (preg_match("/[[:$pt:]]+/", $password))
			$c += 1;
	}
	if ($c < 3) break;
	//>=3,必须包含四种类型三种与三种以上
	if ("42" == $password)  // 最后password还需要等于42
		echo $flag;
	else echo 'Wrong password';
			exit;
	}
}

答案:

首先传入的参数要大于12个字符,必须是非空格非TAB之外的内容,password要有大小写数字,字符内容,而且匹配到的次数要大于6次,最后password要等于42

要满足上面的条件 要么是16进制要么是科学计数法,因为正则表达式需要满足6次或者6次以上所以这里16进制不满足要求

payload:42.000000000e+0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值