Bugku WEB No one knows regex better than me

代码分析题:
前端带了两个参数回来,ZERO FIRST,second是这两个变量值拼接
second第一层if要匹配的正则表达式是 Yeedo|wants|a|girl|friend|or|a|flag ,意思是只要出现这几个单词中的一个就可以过
第二层if要匹配的是…|flag,是…或者flag,意思second不能带…或者flag
first变量匹配\|\056\160\150\x70
\056是ascii编码,就跟c语言中char a=97,a是字符’a’一样,056 160 150是8进制,x70是16进制,不好理解可以把它转成十进制再转换
转换出来就是.php
关于双重转义,在匹配正则时,字符串会先转义,然后再去匹配正则,\|\056\160\150\x70,字符串会被转义成|.php交给正则匹配器匹配,匹配的结果就是含有|.php
的字符串可以被接受(只有给正则匹配器的是\|.php才是\或者.php)
因此可以开始构造
1.zero是flag的base64编码,first从第六个字串开始是.php aabb|.php
flag的base64编码是ZmxhZw==
构造?zero=ZmxhZw==&first=aabb|.php
2.zero flag.编码 ZmxhZy4=
first aab|.php
同样可以得到flag
只要正则过得去,随便构造
参考视频链接: https://www.bilibili.com/video/BV1zq4y1s7W7/

你可能感兴趣的:(安全)