当前位置: 首页 > news >正文

[Zer0pts2020]Can you guess it?1

打开题目

看到信息随便输入一个数,显示错误

查看源代码

看到php代码,代码审计

<?php
include 'config.php'; // FLAG is defined in config.php

if (preg_match('/config\.php\/*$/i', $_SERVER['PHP_SELF'])) {
  exit("I don't know what you are thinking, but I won't let you read it :)");
}

if (isset($_GET['source'])) {
  highlight_file(basename($_SERVER['PHP_SELF']));
  exit();
}

$secret = bin2hex(random_bytes(64));
if (isset($_POST['guess'])) {
  $guess = (string) $_POST['guess'];
  if (hash_equals($secret, $guess)) {
    $message = 'Congratulations! The flag is: ' . FLAG;
  } else {
    $message = 'Wrong.';
  }
}
?>
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Can you guess it?</title>
  </head>
  <body>
    <h1>Can you guess it?</h1>
    <p>If your guess is correct, I'll give you the flag.</p>
    <p><a href="?source">Source</a></p>
    <hr>
<?php if (isset($message)) { ?>
    <p><?= $message ?></p>
<?php } ?>
    <form action="index.php" method="POST">
      <input type="text" name="guess">
      <input type="submit">
    </form>
  </body>
</html>

 basename()

会返回路径重的文件名部分。比如/index.php/config.php使用basename()之后返回config.php
basename()会去掉文件名开头的非ASCII值。

看到提示,有config.php目录,跳转一下看看。

得到

我们要想访问config,但是config.php被正则过滤了

本题目利用的是basename()漏洞

用不可显字符绕过正则(后面加 %80 – %ff 的任意字符)

我们构造payload:/index.php/config.php/%ff?source

访问得到flag

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python | 字符串编码问题怎么破
  • 在Ubuntu 14.04上安装LAMP【快速入门】
  • Spring Boot发送邮件带附件功能怎么实现?
  • Vim多文件操作
  • 我叫:堆排序【JAVA】
  • 动手学深度学习7.6 残差网络(ResNet)-笔记练习(PyTorch)
  • 【MySQL】数据库约束和多表查询
  • 数学基础 -- 函数的平均值定理与定积分的中值定理
  • Redis合集 第二章 redis客户端 第一节 jedis
  • 点燃体育赛场新火花,IM与AI共启赛场新范式!
  • BGP实验
  • 基于linux下的mplayer播放器项目
  • 使用webpack搭建个本地项目
  • 版本更新 《坚持学习计时器》软件V3.2更新内容:增加删除指定数据的功能
  • Servlet的三种写法
  • JS 中的深拷贝与浅拷贝
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • ➹使用webpack配置多页面应用(MPA)
  • Angular2开发踩坑系列-生产环境编译
  • DOM的那些事
  • ES10 特性的完整指南
  • HTML-表单
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 奇技淫巧
  • Javascript基础之Array数组API
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • React中的“虫洞”——Context
  • 阿里云前端周刊 - 第 26 期
  • 编写符合Python风格的对象
  • 第2章 网络文档
  • 判断客户端类型,Android,iOS,PC
  • 使用common-codec进行md5加密
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 收藏好这篇,别再只说“数据劫持”了
  • 听说你叫Java(二)–Servlet请求
  • 详解NodeJs流之一
  • 详解移动APP与web APP的区别
  • 小李飞刀:SQL题目刷起来!
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​MySQL主从复制一致性检测
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (Matlab)使用竞争神经网络实现数据聚类
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (实战篇)如何缓存数据
  • (转载)从 Java 代码到 Java 堆
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Framework .NET Core与 .NET 的区别
  • .net 发送邮件
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • @Bean, @Component, @Configuration简析