**Bugku __ game1**
*题目作者: [ [硝基苯爸爸](https://ctf.bugku.com/user/info/id/6030.html)](https://ctf.bugku.com/user/info/id/2.html)*
题目描述:正则好像没有想象中那么简单
### 1、打开网页 ovo
是php代码,题目说是正则,我去查了一手,
正则表达式在ctf中,我理解来就是一个过滤手段,我们只要在代码中发现他的过滤手段就可以绕过得到答案
### 2、下面代码审计:
$second需要有字符串`"Yeedo" "wants" "a" "girl" "friend" "or" "flag"`其中一个
key中不能出现..和flag且要出现|php字符串,并且third的第五个字符之后被赋给end,同时zero的值被base64编码了,
最后的最后有一个提示`//maybe flag in flag.php`是不是暗示我们zero的值应该是flag,
因为如果third是由四字符+|.php拼接的话
zero的值就是字符串+.php了
而正好需要flag出现在second之中
### 3、所以构造:
zero=flag&first=girl|php,zero的值需要经过base编码
也就是:zero=ZmxhZw==&first=girl|.php
得到答案
(
至于为什么是GET请求,这个无所谓的,POST也可以,因为php都收得到而且,
1. **方便测试**:直接在浏览器地址栏改参数就能测。
2. **`$_REQUEST` 默认包含 GET**:不需要额外工具。
3. **CTF 题目里默认用 GET**:方便快速验证。
4. )
二、后面还有一道正则的题目基本上一样但是多出来了点知识点
| . | 匹配除 "\n" 之外的任何单个字符 |
| --- | --- |
| * | 匹配它前面的表达式 0 次或多次,等价于 |
| . | 匹配 4 到 7 个任意字符 |
| / | 匹配 /,\ 是为了转义 |
| [a-z] | 匹配所有小写字母 |
| [:punct:] | 匹配任何标点符号 |
| /i | 表示不分大小写 |

这就是构造出来的payload:http://160.202.254.160:18350/?id=keykeyaaaakey:/a/akeya;