这个题目告诉我,正则表达式还要好好的学一下;;
<?php
highlight_file('2.php');
$key='flag{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IM ){
die('key is: '.$key);
}
?>
关键应该是这段话::
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
把这个理解了问题就不大了::
/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i
拆分::
key
.*
key
.{4,7}
key:
\/
.
\/
(.*key)
[a-z]
[[:punct:]]
key就是普通的字符
.是除了换行的任意字符,假设就是a *匹配0或多个正则表达式,假设有2个
key又是一个普通字符
.{4,7}就是匹配4-7个任意字符(包括4,不包括7),假设有5个a
key普通字符
:又是普通字符
\反斜杠进行转义,此处取/的原意
.任意字符,假设取a
/同上,取/原意
()改变逻辑顺序,此处不影响,按.*key顺序正则匹配
假设两个a和key
[a-z]取a-z中任意一个字符,假设取a
[:punct:]就是特殊字符的意思,[[:punct:]]就是在特殊字符里取一个,假设是;(当然也可以是@#等等)
自己写的payload:keyaskeyasdfgkey:/a/keya*