freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

正则表达式——靶场操作记录
FreeBuf_351775 2021-09-28 15:28:11 146283

——————————————分析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” )
继续
\转义字符 \/得到/
.尽可能多的字符(贪婪)
\转义字符 \/得到/
/尽可能多的字符/
再继续(keykey)
()代表里面是个整体
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}

# 黑客
本文为 FreeBuf_351775 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
FreeBuf_351775 LV.4
&amp;lt;script&amp;gt;alert(&amp;quot;hello world&amp;quot;)&amp;lt;/script&amp;gt;
  • 14 文章数
  • 3 关注者
子域名收集
2022-03-25
NMAP——进阶使用
2022-03-22
NMAP ——如何使用NMAP
2022-03-19