[Zer0pts2020]Can you guess it?1

点击Source,去看一下.

开始审计.

php 复制代码
<?php  
// 包含配置文件,其中定义了FLAG常量  
include 'config.php';   
  
// 检查当前请求的脚本路径是否以'config.php/'结尾(不区分大小写,且'/'可以是0个或多个)  
// 如果匹配,则退出并显示一条消息,防止直接访问包含敏感信息的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 :)");  
}  
  
// 如果URL中存在'source' GET参数  
if (isset($_GET['source'])) {  
  // 使用basename函数获取当前脚本的基本名称(即去除任何路径信息),并高亮显示其源代码  
  // 这可能导致信息泄露,因为攻击者可以看到部分源代码  
  highlight_file(basename($_SERVER['PHP_SELF']));  
  exit(); // 在显示源代码后退出  
}  
  
// 生成一个随机的64字节秘密,并将其转换为十六进制字符串  
$secret = bin2hex(random_bytes(64));  
  
// 如果POST请求中包含了'guess'参数  
if (isset($_POST['guess'])) {  
  // 将'guess'参数的值转换为字符串  
  $guess = (string) $_POST['guess'];  
  // 使用hash_equals函数比较猜测和秘密(防止时间攻击)  
  if (hash_equals($secret, $guess)) {  
    // 如果猜测正确,显示FLAG  
    $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)) { ?>  
    <!-- 如果设置了$message变量,则显示它 -->  
    <p><?= $message ?></p>  
<?php } ?>  
    <!-- 提供一个表单,允许用户通过POST请求提交他们的猜测 -->  
    <form action="index.php" method="POST">  
      <input type="text" name="guess">  
      <input type="submit">  
    </form>  
  </body>  
</html>

这部分就不用想了,他每次出现的数字是随机的.

看看上面的.

一个正则表达式,一个highlight_file(basename($SERVER"PHP_SELF")).

知识点 :

basename漏洞,basename可以匹配到可见字符,但是无法匹配不可见字符

示例:

书接上回,我们可以通过 highlight_file(config.php)来读取flag.

而basename($SERVER"PHP_SELF") <=>config.php的实现就用上面的basename漏洞来实现

同时我要还需要绕过正则表达式.

我们通过分析**'/config\.php\/*$/i',**可知正则表达式匹配条件为:

以 config.php 结尾,后面跟着零个或多个斜杠,且不区分大小写

所以我们在后面+点东西就可以绕过了,而+的东西就是不可见字符.

示例

理论成立开始实操

拿到flag,游戏结束~

相关推荐
Json____2 小时前
PHP 突发严重安全漏洞,AI 开始改变网络安全的攻防方式
人工智能·web安全·php·it学习·wwwoop.com
catchadmin2 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
Web极客码3 小时前
我用 Claude 分析 Redis 哨兵日志,实现跨机房数据不一致自动对齐
数据库·redis·php
xuefeiniao4 小时前
PHP2Shell漏洞修复
运维·服务器·php
ServBay4 小时前
AI说代码没漏洞?马上被 PHP 打脸了
aigc·php·ai编程
其实防守也摸鱼6 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
tq10866 小时前
对PHP漏洞的思考
php
wangruofeng7 小时前
黑色十月:AI 找到的漏洞,两小时数十万次利用
人工智能·安全·php
上海云盾王帅7 小时前
什么是 CC 攻击?原理、特征与防御全解析
网络·web安全
三垣网安8 小时前
漏洞实战|高校虚拟实验平台报错型 SQL 注入漏洞复现
网络·经验分享·sql·安全·web安全·网络安全·水平越权