once-more

http://www.shiyanbar.com/ctf/1805

1.ereg(),对比解析函数,与大小写有关,看两个字符串是不是相等的。

2.strpos()
函数查找字符串在另一字符串中第一次出现的位置。strpos(string,find,start)

3.strlen(),返回字符串的长度。

4.在科学计数法中,为了使公式简便,可以用带”E”的格式表示。例如103乘10的6次方,可简写为”103E+6”的形式


分析一下题,第一个if,要求password不为空,这个就不说了

::: {.image-package}
\

::: {.image-caption}
:::
:::

第二个if,不太熟悉啊。。对比大小写的全部英文字母加十个数字,如果===表示恒等,要求字符串的值和类型完全相等。后面的FALSE是什么意思,是恒等还是不等的时候输出”你的密码必须为字母或数字”?那我们就试试吧。

哦,好像是要求我们密码必须为字母或者数字,如果加了什么奇奇怪怪的符号就会显示下图的结果。

::: {.image-package}
\

::: {.image-caption}
:::
:::

第三个else
if,要求密码长度小于8,数值大于9999999,而7位数最大也就是七个9,要大于它,就用科学记数法。

第四个if,要求密码里包含*-*,

据说ereg()函数,在遇到%00时候就会停止。

构造1E7%00*-*(10的7次方,由于浏览器解码将%00当成十六进制的一个字符,前面三个加这一个加后面*-*,总共7个字符。)

于是提交password=1E7%00*-*
:::
:::
:::