[鹤城杯 2021]EasyP

[鹤城杯 2021]EasyP wp

参考博客:

basename()绕过小结

request导致的安全性问题分析

源码分析

首先进入题目,看到代码:

<?php
include 'utils.php';

if (isset($_POST['guess'])) {
    $guess = (string) $_POST['guess'];
    if ($guess === $secret) {
        $message = 'Congratulations! The flag is: ' . $flag;
    } else {
        $message = 'Wrong. Try Again';
    }
}

if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) {
    exit("hacker :)");
}

if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){
    exit("hacker :)");
}

if (isset($_GET['show_source'])) {
    highlight_file(basename($_SERVER['PHP_SELF']));
    exit();
}else{
    show_source(__FILE__);
}
?> 

其中第一段代码是让我们传入一个 GET 参数 guess 。这个参数值先会经过转义然后跟 $secret 强比较。我没有办法绕过,也猜不到 $secret 的值是多少,所以这段代码的作用相当于没有。

第二段代码对 $_SERVER['PHP_SELF'] 进行了正则匹配:
if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) {
    exit("hacker :)");
}
$_SERVER['PHP_SELF']

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。

PHP_SELF 获取当前执行脚本的文件名,与 document root 有关。

例如,在地址为 http://example.com/foo/bar.php 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /foo/bar.php。FILE 常量包含当前(例如包含)文件的完整路径和文件名。 如果 PHP 以命令行模式运行,这个变量将包含脚本名。

正则解读
/utils\.php\/*$/i
  • /utils\.php\/*$/i : 正则表达式的开始和结束都有斜杠(‘/’)表示正则表达式的开始和结束。
  • utils\.php : 该部分用于匹配字符串 ‘utils.php’。‘.’ 表示匹配点字符,点字符在正则表达式中具有特殊意义,因此需要转义。
  • \/*$ : 该部分用于匹配可选的斜杠(‘/’)。‘/*’ 表示匹配零个或多个斜杠,‘$’ 表示匹配字符串的结尾。
  • i : 该部分表示在匹配时忽略大小写。

综上所述:就是匹配以 utils.php+0个或多个 / 结尾 的字符串。

第三段代码对 $_SERVER['REQUEST_URI'] 做了一个正则匹配:
if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){
    exit("hacker :)");
}
REQUEST_URI

URI 用来指定要访问的页面。例如访问地址:http://www.baidu.com/index.html?a=1&b=1 。

那么 $_SERVER['REQUEST_URI'] 获取到的值就是 /index.html?a=1&b=1

此外 $_SERVER['REQUEST_URI'] 在获取 URL 编码字符时不会进行 URL 解码。利用这一点可以进行绕过。

这里可以参考博客:

PHP中$_SERVER[“QUERY_STRING”]函数

正则解读

这段正则就是输入的 URL 链接中不能有 “show_source” 字符串。、

最后一段代码:
if (isset($_GET['show_source'])) {
    highlight_file(basename($_SERVER['PHP_SELF']));
    exit();
}else{
    show_source(__FILE__);
}

获取一个 GET 参数 show_source ,将 $_SERVER['PHP_SELF'] 的值经过 basename 函数处理后显示出来。

basename() 函数

basename() 函数返回路径中的文件名部分。

语法

basename(path,suffix)
参数描述
path必需。规定要检查的路径。
suffix可选。规定文件扩展名。如果文件有 suffix,则不会输出这个扩展名。

举例

<?php
$path = "/testweb/home.php";

//显示带有文件扩展名的文件名
echo basename($path);

//显示不带有文件扩展名的文件名
echo basename($path,".php");
?> 

输出:

home.php
home
basename() 函数绕过

basename 函数有这样一个特性:在使用默认语言环境设置时,basename() 会删除文件名开头的非 ASCII 字符。

比如:

$_SERVER['PHP_SELF'] 获取到的值basename() 函数处理后的结果
/dir/index.phpindex.php
/dir/%ffindex.phpindex.php
/dir/index.php/%ffindex.php
/dir/index.php/%2b+

上面的 %ff 就是一个非 ASCII 字符。而当路径的最后为 ASCII 字符时,basename 函数就会返回该字符。

具体可以去看:basename()绕过小结

绕过

经过上面的分析,GET 传入的参数 show_source 会被匹配到,因此对 “show_source” 做一个 URL 编码后再传入。

此外,在页面请求时传入 /index.php/utils.php/大

服务器会认为请求的页面是 index.php ,因此可以正常返回页面;

$_SERVER['PHP_SELF'] 获取到的值是 /index.php/utils.php/大 ,因为不是以 utils.php/ 结尾,所以可以绕过正则;

因为中文是非 ASCII 字符,所以经过 basename 函数处理后得到的结果就是 utils.php ;

这样就可以读到 utils.php 文件的内容。

测试发现:直接传入 /utils.php/大 的话没有回显。

payload
http://node4.anna.nssctf.cn:28806/index.php/utils.php/大?%73%68%6f%77%5f%73%6f%75%72%63%65=1

返回结果:

在这里插入图片描述

拿到 flag 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/289176.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

条款16:成对使用 new 和 delete 时要采用相同形式

下面程序的行为是未定义的。至少&#xff0c;stringArray指向的100个string对象中有99个不太可能被正确地析构。 被delete的指针指向单个对象还是一个对象数组&#xff1f;内存数组通常包括数组的大小&#xff0c;delete可以知道需要调用多少个析构函数。 使用delete时使用了方…

解读 $mash 通证 “Fair Launch” 规则,将公平发挥极致

Solmash 是 Solana 生态中由社区主导的铭文资产 LaunchPad 平台&#xff0c;该平台旨在为 Solana 原生铭文项目&#xff0c;以及通过其合作伙伴 SoBit 跨链桥桥接到 Solana 的 Bitcoin 生态铭文项目提供更广泛的启动机会。有了 Solmash&#xff0c;将会有更多的 Solana 生态的铭…

最新能让老外对口型讲中文的AI 视频教程,免费开源AI工具——Wav2Lip

本期就来教大家制作海外大佬们新年祝福视频吧&#xff01;对口型视频一直在全网都非常的火爆&#xff0c;随便一个视频都是几千赞以上&#xff0c;简直堪称涨粉利器&#xff01; 是不是很有意思&#xff0c;口型完全对得上&#xff0c;表情也很自然逼真&#xff0c;不懂内行的人…

后端杂七杂八系列篇一

后端杂七杂八系列篇一 ① MySQL选择合适的数据类型① Char与Varchar② Text与Blob ② EqualsAndHashCode(callSuper true)的作用③ mybatis-plus 相关① 主键生成策略② 使用Model实现CRUD③ Wrapper的用法① Wrapper的继承关系② 项目中最常用的warpper [LambdaQueryWrapper]…

ElasticSearch数据同步

文章目录 ElasticSearch数据同步1. 同步调用2. 异步通知3. 监听binlog4. 工作中处理同步的问题 ElasticSearch数据同步 ElasticSearch中酒店数据来自于mysql数据库&#xff0c;因此MySQL数据发生改变时&#xff0c;ElasticSearch也必须跟着改变&#xff0c;这个就是ElasticSear…

轻量级性能测试工具 wrk 如何使用?

项目设计之初或者是项目快要结束的时候&#xff0c;大佬就会问我们&#xff0c;这个服务性能测试的结果是什么&#xff0c;QPS 可以达到多少&#xff0c;RPS 又能达到多少&#xff1f;接口性能可以满足未来生产环境的实际情况吗&#xff1f;有没有自己测试过自己接口的吞吐量&a…

Node.js+Express 获取前端get请求参数值

前端请求&#xff1a; http://localhost:3002/api/user/login?username002&password002 后端响应 router.get(/api/user/login, (req, res) > {let username req.query.username;let password req.query.password;const sqlStr SELECT * FROM sys_user where use…

UI自动化测试框架搭建

今天给大家分享一个seleniumtestngmavenant的UI自动化&#xff0c;可以用于功能测试&#xff0c;也可按复杂的业务流程编写测试用例&#xff0c;今天此篇文章不过多讲解如何实现CI/CD&#xff0c;只讲解自己能独立搭建UI框架&#xff0c;需要阅读者有一定的java语言基础&#x…

西北工业大学计算机组成原理实验报告——verilog前两次

说明 为了有较好的可读性&#xff0c;报告仅仅粘贴关键代码。该PDF带有大纲功能&#xff0c;点击大纲中的对应标题&#xff0c;可以快速跳转。 实验目标 掌握单周期CPU执行指令的流程和原理&#xff1b;学习使用verilog HDL语言实现单周期CPU, 并通过功能仿真&#xff1b;提…

【BIAI】Lecture2-Visual system

Lecture 2 - Visual System 专业术语 central nervous system(CNS) 中枢神经系统 pupil 瞳孔 iris 虹膜 cornea 角膜 retina 视网膜 fovea 中央凹 或 黄斑区 kens 晶状体 optic nerve 视神经 Bipolar cells 双极细胞 Ganglion cells 神经节细胞 rods 杆状细胞 cones 锥状细胞 …

uniapp中组件库的Textarea 文本域的丰富使用方法

目录 #平台差异说明 #基本使用 #字数统计 #自动增高 #禁用状态 #下划线模式 #格式化处理 API #List Props #Methods #List Events 文本域此组件满足了可能出现的表单信息补充&#xff0c;编辑等实际逻辑的功能&#xff0c;内置了字数校验等 注意&#xff1a; 由于…

2023-12-17 LeetCode每日一题(使用最小花费爬楼梯)

2023-12-17每日一题 一、题目编号 746. 使用最小花费爬楼梯二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你…

【鸿蒙杂谈①】——鸿蒙基础介绍及应用领域

1.前言 小伙伴们大家好&#xff0c;最近被复习整的痛苦无比&#xff0c;所以今天咱们了解 一点轻松的东西&#xff0c;至于高并发就先放放吧。好了&#xff0c;废话不多说&#xff0c;咱们进入正题。 相信小伙伴们都已经看到了最近鸿蒙的势头了&#xff0c;那鸿蒙究竟是怎么发…

邀请函 | 通付盾出席第四期移动互联网App产品安全漏洞技术沙龙

为深入贯彻落实《网络产品安全漏洞管理规定》&#xff0c;规范移动互联网 App 产品安全漏洞发现、报告、修补和发布等行为&#xff0c;提升网络产品提供者安全漏洞管理意识&#xff0c;探索最前沿的漏洞技术发展趋势和创新应用&#xff0c;搭建权威、专业、深度、创新的交流平台…

springboot整合webservice使用总结

因为做的项目中用到了webservice,所以在此总结一下。 一、webservice简介 Web Service也叫XML Web Service, WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求&#xff0c;轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务&#xff0c;使…

【计算机毕业设计】SSM场地预订管理系统

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 用户角色包含以下功能&#xff1a; 按分类查看场地,用户登录,查看网站公告,按分类查看器材,查看商品详情,加入购物车,提交订单,查看订单,修改个人信息等功能。 管理员角…

CSS 顶部位置翻转动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ rotate-hor-top: isAnimating }"><!-- 元素内容 --><…

matplotlib绘制折线图

代码 import matplotlib.pyplot as plt import numpy as npdef get_data(txt_path: str , epoch: int 100, target: str , target_data_len: int 5): # 函数介绍 # https://blog.csdn.net/LQ_001/article/details/130127681?csdn_share_tail%7B%22type%22%3A%22blog%22%2…

【C++】引用、内联函数、auto关键字、基于范围的for循环、指针空值nullptr

文章目录 前言引用引用概念引用特性常引用使用场景传值、传引用效率对比引用和指针的区别 内联函数概念特性 auto关键字auto概念auto的使用细则auto不能推导类型的场景 基于范围的for循环(C11)范围for的语法形式范围for的使用条件 指针空值nullptr的出现总结 前言 提示&#x…

【VMware】Windows安装MySQL及网络配置---图文并茂详细介绍

目录 目录 一 安装MySQL ① 连接虚拟机传输MySQL压缩包 ②解压MySQL压缩包 ③ my文件拷贝mysql安装根目录下 ④ 修改my文件 ⑤ 5.7版本安装MySQL 5.1 注册mysql服务 5.2 初始化 5.3 启动MySQL 5.4 登入MySQL 5.5 修改默认密码 ⑥ 8版本安装MySQL 6.1 解压压缩包 …
最新文章