No one knows regex better than me

server/2025/1/11 19:37:35/

 No one knows regex better than me

代码分析,传了两个参数zero,first,然后$second对两个所传的参数进行了拼接

好比:?zero=1&first=2

传入后就是: 12

然后对$second进行了正则匹配,匹配所传入的参数是否包含字符串Yeedo|wants|a|girl|friend|or|a|flag且忽略字母大小,如果匹配到了字符串就会继续执行,且$key=$second,再对$key进行了匹配,如果匹配到了..和flag就会输出Noooood hacker!,且代码结束执行。

反之,如果没有匹配到..和flag就会把$third赋值为$first;同时对$third进行匹配,检查 $third 是否包含以下字符或字符串(忽略大小写):

|

\\(反斜杠)

.(点号,由 ASCII 编码 \056 表示)

php(由 ASCII 编码 \160\150\x70 表示)

如果匹配到了,就会继续执行$end=substr($third,5);

会把$third所传入的参数从第5个进行截取,也就是说,当传入Yeedols时会截取为ls;

接着会高亮显示base64_decode($zero).$end的内容

那么是不是base64_decode($zero).$end的内容就可以是一个文件名,题目提示了flag.php,

那么是不是就可以highlight(flag.php);这样就可以高亮显示flag.php文件的内容

但是不能够有flag字符串,利用到base64_decode($zero)#注:decode是解码,会把$zero的内容进行base64解码。

我们把flag进行base64编码,ZmxhZw==

构造:?zero=ZmxhZw==&first=

flag解决了,那么就差.php,对正则匹配进行绕过,首先含有字符串Yeedo|wants|a|girl|friend|or|a|flag;而且还要有

  • 反斜杠 \竖线 |
  • 点号 .
  • 字符串 php(不区分大小写)。

 如果传入Yeedo|wants|friend,那么截取后就不能够满足第二个匹配,flag又不能够存在

 剩下的就是a|girl|or|a

构造?zero=ZmxhZw==&first=girl|.php,这样就会截取为?zero=ZmxhZw==&first=.php

zero再通过base64解码就会成为flag,再经过拼接就是flag.php,这样就会高亮显示flag.php的内容

那么为什么不能够用反斜杠呢?

\.在传入后会进行转义,转义后\. 会被解释为字面上的点号。

同样不能使用点号,不然就会构成..,这是被正则匹配了的。

这个题的大体意思就是:高亮显示通过base64解码后的$zero和$end所拼接的内容(拼接后的就是文件名),这是漏洞的成因,然后对三次正则匹配进行绕过就可以。


http://www.ppmy.cn/server/157560.html

相关文章

Python使用pip安装Caused by SSLError:certificate verify failed

最近公司电脑受限,安装conda好像有点问题,不让安装。只能pip硬装了: 使用pip安装的时候一直报错: “ Could not fetch URL https://pypi.org/simple/pyplot/: There was a problem confirming the ssl certificate: HTTPSConne…

android进入fastboot

安装windows驱动。android进入fastboot模式后,需要Windows驱动来跟adb通信,所以需要预先安装Windows usb驱动,否则进入fastboot模式后,无法使用adb连接手机。 下载网址:https://developer.android.com/studio/run/win-…

jenkins入门12-- 权限管理

Jenkins的权限管理 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,我们使用Role-based Authorization Strategy 插件,安装完插件,security授权策略,多了role-based strategy,设…

java中 如何从jar中读取资源文件?

在Java中,从JAR文件中读取资源文件通常使用类加载器(ClassLoader)或者通过getClass().getResourceAsStream()方法。以下是几种常见的方法: 方法一:使用 getClass().getResourceAsStream() 这是最常见和推荐的方法&am…

【微服务】6、限流 熔断

线程隔离与容错处理 本视频主要讲解了在购物车业务中,因商品微服务响应慢导致的问题及解决方案,重点介绍了线程隔离后查询购物车业务不可用的情况,以及如何通过Fallback逻辑进行缓解,包括配置Feign调用为簇点资源、添加Fallback逻…

【Spring Boot 应用开发】-04 自动配置-数据源

深入讲解 Spring Boot 自动配置中的数据源配置 为了更好地理解 Spring Boot 中的自动配置机制,我们以数据源配置机制为例,按照以下顺序进行讲解: 不使用任何框架来连接数据源的方式使用 Spring MVC 连接数据源的方式使用 Spring Boot 自动配…

bash相关习题复习

1、由于 ~/.bash_history 仅能记录指令,我想要在每次注销时都记录时间,并将后续的指令 50 笔记录下来, 可以如何处理? [rootptivitic ~]# vim ~/.bash_logout date >> ~/.myhistory history 50 >> ~/.myhistory 2…

conntrack iptables 安全组

centos 安装yum install conntrack-tools 1. conntrack状态 NEW: 新建连接(第一次包)。 ESTABLISHED: 已建立连接,正在传输数据。 RELATED: 与已有连接相关的连接,如 FTP 数据连接。 INVALID: 无效连接,无法识别或不…