题目:正则?绕过?
分析
preg_match (要搜索的模式,字符串,参数) 在字符串里搜索符合 要搜索的模式 的字符,并返回给参数。
trim(字符串,字符) 移除字符串两侧的空白字符或其他预定义字符
移除字符串两侧的空格:
<?php $str = " Hello World! "; echo "不使用 trim: " . $str; echo ""; echo "使用 trim: " . trim($str); ?>
正则表达式
【.】 匹配除 “\n” 之外的任何单个字符
【*】 匹配它前面的表达式0次或多次,等价于{0,}
{4,7} 最少匹配 4 次且最多匹配 7 次,结合前面的 . 也就是匹配 4 到 7 个任意字符
/ 匹配 / ,这里的 \ 是为了转义
[a-z] 匹配所有小写字母
[:punct:] 匹配任何标点符号
/i 表示不分大小写
“/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i”
一、先看最外边的//i,//代表定界符,你限定的条件都在这个定界符里面,i是不区分大小写
二、来看 /key 首先就是得有key这三个字母,不一定是一开始就是key ?id=key
三、 /key.* 这里的.是可以匹配任何字符,所以你随便打个就行,我这里打的a,又因为后边有个 *(匹配前边的字母0次或者多次),所以你可以继续多打几个啊或者不打 ?id=keyltz
四、/key.*key, 继续分析,多加了个key, ?id=keyltzkey,继续往后 /key.*key.{4,7} 代表任意匹配一个字符并且出现4-7次,那就打四个a好了 (这个只要是有4个到7个重复字母就行) ?id=keyltzkeyllll
五、/key.*key.{4,7}key: 加上 key: ?id=keyltzkeyllllkey:
六、/key.*key.{4,7}key:/./ \代表了转义,所以/不在代表了界定符,直接看成/./ 所以/l/即可, ?id=keyltzkeyllllkey:/l/
七、/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]] (.*key) => akey [a-z]代表随便一个小写字母,a就可以,后边那个是标点符号,比如, ?id=keyltzkeyllllkey:/l/lkeyl,
构造URL
http://www.czlgjbbq.top/GJCTF/re_getflag.php/?key=keyltzkeylllllkey:/l/fkeyl,