正则表达式——靶场操作记录<掌控安全>

——————————————分析flag代码————————————
//告诉这是PHP咯
<?php
$key=’flag{**}’;
$Regular= preg_match(“/zkaq.key.{2,9}:\/.\/(keykey)/i”, trim($_GET[“id”]), $match);
if( $Regular ){
die(‘key: ‘.$key);
} //if结尾咯(但是为什么没有‘?>’结尾呢)
——————————————分析flag代码2————————————
$key=’flag{**}’;
定义一个变量$key等于这一串32个字符咯(flag长度是32还是?)
继续
——————————————分析flag代码3————————————
$Regular= preg_match(“/zkaq.
key.{2,9}:\/.\/(keykey)/i”, trim($_GET[“id”]), $match);
preg_match_all()学了preg_match是啥搜一下
preg_match 只匹配一次,preg_match_all是全文匹配,即所有跟表达式一致的都找出来。

 

以下我们看案例

1、取出符号里的字符。preg_match_all(“/(\w)+/“,”abc”,$search);

 
  1. print_r($search);

  显示结果为

  

Array
(
[0] => Array
(
[0] => abc
)

 
  1. [1] => Array
  2. (
  3. [0] => c
  4. )

)

  2、preg_match(“/(\w)+/“,”abc”,$search);print_r($search);

  显示结果

  Array( [0] = a [1] = a)

总结:

两个函数的区别就是:preg_match_all()搜索匹配全部情况;preg_match()搜索匹配到一个后终止。

preg_match() 返回 pattern 所匹配的次数。要么是 0 次(没有匹配)或 1 次,因为 preg_match() 在第一次匹配之后将停止搜索。preg_match_all() 则相反,会一直搜索到 subject 的结尾处。如果出错 preg_match() 返回 FALSE。

_all就是多次
没有all就是一次或0次咯

——————————————分析flag代码4————————————
“/zkaq.key.{2,9}:\/.\/(keykey)/i”怎么匹配的
看总体内容/zkaq.
key.{2,9}:\/.\/(keykey)/i(i不区分大小写可以不看)
/zkaq.key.{2,9}:\/.\/(keykey)/看里面的内容
zkaq.
key.{2,9}:\/.\/(keykey)
z就是匹配z k就是k a就是a q就是q 咯!q.是什么(搜一下

所以.对于他前面的没有任何作用!毛都没有)
所以q还是q
zkaq
.是任意字符那就随便填
是尽可能多的匹配
那.
就是尽可能多的任意字符咯
k就是K e就是e y就是y
目前解析得:(zkaq尽可能多的任意字符key)
继续
.任意字符 .{区间数量字符} {2,9}两次到九次
.{2,9}任意字符两个或九个之间如123456789 12 123 等等。
:(顿号是个什么毛线?搜一下

没有单独的:出现那应该是其本身或者
:的编码是什么


那就是:或者65306咯还或者是二进制


-1)
继续
目前解析得:(zkaq尽可能多的任意字符key任意字符两个或九个之间“ :/65306/-1” )
继续
\转义字符 \/得到/
.尽可能多的字符(贪婪)
\转义字符 \/得到/
/尽可能多的字符/
再继续(key
key)
()代表里面是个整体
ke就是ke y*匹配尽可能多的y 如y yy yyyyy。
key就是key
得到:(zkaq尽可能多的任意字符key任意字符两个或九个之间“ :/65306/-1” /尽可能多的字符/key‘多个y’key)
zkaq723key723:/723/keyyykey
zkaq723key72365306/723/keyyykey
zkaq723key723-1/723/keyyykey

——————————————分析flag代码5————————————
trim($_GET[“id”])
上面匹配的内容来自哪里
trim()是什么(搜一下

此处为移除空白字符没有预定义)
$_GET[“id”]
以get的方式传参内容来自id
$match
执行正则匹配

if( $Regular ){
die(‘key: ‘.$key);

如果$Regular==id==


die(‘key: ‘.$key); 代码执行中断并输出
key:(内容)

————————————————尝试验证——————————————
zkaq723key723:/723/keyyykey (可 行)
zkaq723key72365306/723/keyyykey(不可行 没有:6后面加上:可行 前面72365306共八位数未超过九位可行)
zkaq723key723-1/723/keyyykey(不可行 加上:不可行 加上:去掉负号可行 )

得出s
flag{regular_god_code}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chick&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值