正则表达式常识及正则靶场题目解析

gavin_gov   ·   发表于 2023-03-01 17:17:55   ·   学习杂记

JavaScript正则表达式知识点

  1. 1)修饰符
  2. i————执行对大小写不敏感的匹配。
  3. g————执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
  4. m————执行多行匹配。
  5. 2)括号()[]{}:用于查找一定范围的字符串
  6. (x|y)————匹配圆括号之间的xy
  7. [abc]————匹配方括号之间的任意字符
  8. [0-9]————匹配方括号之间0-9之内数字
  9. [a-zA-Z]————匹配26个大小写英文字母
  10. {2,9}————匹配前一字符至少2次,最多9
  11. {3}————匹配前一字符3
  12. 3)其他字符
  13. .—————匹配任意字符1
  14. *————匹配前1个字符0个或多个
  15. .*————匹配任意字符0个或多个
  16. \————转义后面的1个字符为普通字符

题目内容

  1. <?php
  2. $key='flag{*****************************}'; $Regular= preg_match("/zkaq.*key.{2,9}:\/.*\/(key*key)/i", trim($_GET["id"]), $match);
  3. if( $Regular){
  4. die('key: '.$key);
  5. }

题目的意思

  1. 匹配GET的传参,并去掉字符串两侧的空白字符或其他预定义字符(trim),将匹配结果并赋值给match,再赋值给Regular;当Regular有值时,输出key

解题思路

  1. trim————移除字符串两侧的空白字符或其他预定义字符
  2. $_GET["id"]————获取get传入的id的值
  3. /zkaq————斜杠表示此处之后是正则表达式,zkaq表示结果中含有zkaq
  4. .*————为通配符,可以代表任意字符,但不包括换行符。此处代表0个或多个任意字符
  5. .{2,9}————.为通配符,代表任意一个字符,{}为限定符, .{2,9}代表任意2-9个任意字符
  6. :————为普通字符,代表结果中含有:
  7. \/————反斜杠为转义字符,作用是将第二个字符/转变成普通字符解释
  8. .*————为通配符,同上
  9. \/————反斜杠为转义字符,同上
  10. (key*key)————()代表括号内部为一个整体,*代表匹配前一个字符0次或者多次
  11. /i————表示不区分大小写

答案可以是如下结果

  1. id=zkaqkEYoo://kekey
  2. id=zkaqkEYoo://kEkeY
  3. id=zkaqkEYoo:/0123456789/kEkeY
  4. id=zkaqkEY123456789:/0123456789/kEkeY
  5. id=zkaqkEY123456789:/0123456789/kEkeY
  6. id=zkaqkEY123456789:/0123456789/kEkeY

flag

  1. key: flag{regular\_god\_code}

打赏我,让我更有动力~

0 条回复   |  直到 2023-3-1 | 508 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.