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

2.攻防世界PHP2及知识点

进入题目页面如下

意思是你能访问这个网站吗?

ctrl+u、F12查看源码,什么都没有发现

用kali中的dirsearch扫描根目录

命令如下,根据题目提示以及需要查看源码,扫描以php、phps、html为后缀的文件

dirsearch -u http://61.147.171.105:58249/ -e php,phps,html

知识点

/index.php:

是一个常见的 PHP 脚本文件。PHP 是一种广泛用于 Web 开发的服务器端脚本语言,.php文件通常包含 PHP 代码,用于生成动态网页内容、与数据库交互、处理表单数据等。当 Web 服务器接收到对/index.php的请求时,它会执行其中的 PHP 代码,并将生成的结果以 HTML 等格式返回给客户端浏览器。例如,一个网站的用户登录系统可能就是通过index.php文件中的 PHP 代码来处理用户输入的用户名和密码,与数据库中的数据进行比对,然后根据结果决定是否允许用户登录。

服务器需要正确配置 PHP 环境,以便能够解析和执行.php文件。通常需要安装 PHP 解释器,并在服务器配置文件(如 Apache 的.conf文件或 Nginx 的配置文件)中进行相应的设置,以告诉服务器如何处理.php文件的请求。

/index.phps:

.phps文件通常是 PHP 源代码文件的一种特殊形式,主要用于提供 PHP 脚本的源代码展示或下载等用途。一般情况下,它可能包含与/index.php相同或类似的 PHP 代码,但服务器对.phps文件的处理方式可能与.php文件不同。有些服务器配置可能会将.phps文件视为纯文本文件,直接展示其源代码内容,而不是像处理.php文件那样执行其中的代码。

默认情况下,服务器可能不会像处理.php文件那样对.phps文件进行特殊的处理。如果需要对.phps文件进行特定的处理,比如将其作为下载文件提供给用户,或者对其进行语法高亮显示等,需要在服务器配置中进行额外的设置。

发现/index.phps文件,并访问

发现源码,进行代码审计

<?php
// 开始检查 $_GET 数组中名为 'id' 的参数是否严格等于字符串 "admin"
if("admin"===$_GET[id]) {
    // 如果严格相等,意味着参数 'id' 的值就是 "admin"
    echo("<p>not allowed!</p>");
    // 输出提示信息,表示不允许该操作
    exit();
    // 终止当前脚本的执行
}

// 对 $_GET 数组中 'id' 参数的值进行 URL 解码操作
$_GET[id] = urldecode($_GET[id]);

// 再次检查经过 URL 解码后的 'id' 参数的值是否等于字符串 "admin"
if($_GET[id] == "admin")
{
    // 如果相等,意味着经过解码后 'id' 的值为 "admin"
    echo "<p>Access granted!</p>";
    // 输出提示信息,表示访问已被授权
    echo "<p>Key: xxxxxxx </p>";
    // 输出一个密钥信息
}
?>

可以利用 URL 二次编码来绕过最初的严格比较。可以传入经过 URL 二次编码的 "admin",这样在第一次严格比较时,由于编码后的字符串与 "admin" 不相等,会通过检查。而第二步中经过 URL 解码后,就会变成 "admin",从而通过第二次非严格比较,获取flag

在 ASCII 编码中,字符 a 的十进制 ASCII 码值是 97,转换为十六进制就是 61;字符 d 的十进制 ASCII 码值是 100,十六进制为 64;字符 m 的十进制 ASCII 码值是 109,十六进制是 6D;字符 i 的十进制 ASCII 码值是 105,十六进制为 69;字符 n 的十进制 ASCII 码值是 110,十六进制是 6E。所以,字符串 "admin" 经过 URL 编码后就变成了 %61%64%6D%69%6E

再次编码,可以利用这个在线工具URL 编码/解码 - 锤子在线工具进行URL编码

通过get传参,构造payload

?id=%2561%2564%256D%2569%256E

最终得到flag


http://www.kler.cn/a/533044.html

相关文章:

  • Android 使用ExpandableListView时,需要注意哪些细节
  • 毫秒级响应的VoIP中的系统组合推荐
  • NOTEPAD++编写abap
  • 【人工智能】基于Python的机器翻译系统,从RNN到Transformer的演进与实现
  • 自研有限元软件与ANSYS精度对比-Bar3D2Node三维杆单元模型-央视大裤衩实例
  • 进程的环境变量
  • Nginx的配置文件 conf/nginx.conf /etc/nginx/nginx.conf 笔记250203
  • Vue3 完整学习笔记 - 第四部分
  • TCP 丢包恢复策略:代价权衡与优化迷局
  • LeetCode:583.两个字符串的删除操作
  • [leetcode·回溯算法]回溯算法解题套路框架
  • Kubernetes学习之网络
  • Github 2025-02-04 Python开源项目日报 Top10
  • Rust语言的并发编程
  • 青少年编程与数学 02-008 Pyhon语言编程基础 18课题、标准模块
  • 详解u3d之AssetBundle
  • CCF-GESP 等级考试 2023年12月认证C++八级真题解析
  • 2.7学习记录
  • 基于python的体育新闻数据可视化及分析
  • 6. k8s二进制集群之各节点部署
  • 神经网络常见激活函数 1-sigmoid函数
  • 11.8 LangChain记忆系统设计解析:BaseMemory与BaseChatMessageMemory的继承体系与实战应用
  • 大模型高级工程师实践 - 将课程内容转为视频
  • 司库建设:财务资金管理制度及风险管控要点
  • 数据库课程设计使用Java+JDBC+MySQL+Swing实现的会议预约管理系统源代码+数据库
  • 第二十三章 MySQL锁之表锁