Bugku-Web23

发布时间 2023-08-30 09:04:03作者: KAKSKY

images

这个题目告诉我,正则表达式还要好好的学一下;;

images

<?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*

images