正则表达式匹配题
程序员文章站
2022-05-04 12:35:02
正则表达式匹配题 靶场地址:http://**.**.***.**:8010/re/?id=1。 代码解释: preg_match(正则表达式,匹配的字符串) 匹配第一个匹配正则的子字符串,未找到返回0,找到返回1 trim($_GET["id"]) 接受ID传参过来的字符串 if( $Regula ......
正则表达式匹配题
靶场地址:http://**.**.***.**:8010/re/?id=1。
<?php $key='flag{********************************}'; $regular=preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_get["id"]), $match); if( $regular ){ die('key: '.$key); }
代码解释:
preg_match(正则表达式,匹配的字符串)
匹配第一个匹配正则的子字符串,未找到返回0,找到返回1
trim($_get["id"]) 接受id传参过来的字符串
if( $regular ){ die('key: '.$key); }
if (1){}执行;
if(0){}不执行;
die();输出一条消息,并退出当前脚本。
该函数是 函数的别名。
解题思路:本题需要匹配的字符串的字符串符合正则表达式才会返回flag。
正则表达式解释:
php的正则表达式要写在/ /之间。 .:匹配除换行符 \n 之外的任何单字符。 *:匹配前面的子表达式零次或多次。 {n,m}: m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooood" 中的前三个o。请注意在逗号和两个数之间不能有空格。 \: 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。 i:标记指定不区分大小写。
/zkaq.*key.{2,9}:\/.*\/(key*key)/i
拆分讲解这个正则表达式
1.
/zkaq.*/:表示”zkaq”后面有0-n个除换行符 \n 之外的任何单字符(n为非负整数)。 zkaq(我可以理解为后面可以没跟着字符)
2.
/key.{2,9}/:表示”key”后面有2-9个除换行符 \n 之外的任何单字符。 keyhello(我可以在”key”后添加2-9个字符)
3.
/ :\/.*\/ /:第一个”:”为字符冒号,”\/”为斜杠”/”的转译,”.*”表示后面有0-n个除换行符 \n 之外的任何单字符(n为非负整数)。 ://(没什么可说的,我可以不添加字符)
4.
/(key*key)/:表示”ke”和”key”之间有0-n个字符”y”(n为非负整数)。 keykey(我可以不添加字符)
组合:
zkaqkeyhello://keykey
unicode编码一下:
zkaqkeyhello%3a//keykey
上一篇:
标签 让一段计算机代码显示在网页中
下一篇: Laravel的事务处理求解.