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

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

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

相关文章

网络工程师 (11)软件生命周期与开发模型

一、软件生命周期 前言 软件生命周期&#xff0c;也称为软件开发周期或软件开发生命周期&#xff0c;是指从软件项目的启动到软件不再被使用为止的整个期间。这个过程可以细分为多个阶段&#xff0c;每个阶段都有其特定的目标、任务和产出物。 1. 问题定义与需求分析 问题定义…

深度学习练手小例子——cifar10数据集分类问题

CIFAR-10 是一个经典的计算机视觉数据集&#xff0c;广泛用于图像分类任务。它包含 10 个类别的 60,000 张彩色图像&#xff0c;每张图像的大小是 32x32 像素。数据集被分为 50,000 张训练图像和 10,000 张测试图像。每个类别包含 6,000 张图像&#xff0c;具体类别包括&#x…

力扣257. 二叉树的所有路径(遍历思想解决)

Problem: 257. 二叉树的所有路径 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 利用先序遍历的思想&#xff0c;我门用一个List变量path记录当前先序遍历的节点&#xff0c;当遍历到根节点时&#xff0c;将其添加到另一个List变量res中&…

力扣第149场双周赛

文章目录 题目总览题目详解找到字符串中合法的相邻数字重新安排会议得到最多空余时间I 第149场双周赛 题目总览 找到字符串中合法的相邻数字 重新安排会议得到最多空余时间I 重新安排会议得到最多空余时间II 变成好标题的最少代价 题目详解 找到字符串中合法的相邻数字 思…

算法题(54):插入区间

审题&#xff1a; 需要我们把newinterval的区间与interval的区间合并起来&#xff0c;并返回合并后的二维数组地址 思路&#xff1a; 方法一&#xff1a;排序合并区间 我们可以先把newinterval插入到interval中&#xff0c;进行排序然后复用合并区间的代码 方法二&#xff1a;模…

网工_HDLC协议

2025.01.25&#xff1a;网工老姜学习笔记 第9节 HDLC协议 9.1 HDLC高级数据链路控制9.2 HDLC帧格式&#xff08;*控制字段&#xff09;9.2.1 信息帧&#xff08;承载用户数据&#xff0c;0开头&#xff09;9.2.2 监督帧&#xff08;帮助信息可靠传输&#xff0c;10开头&#xf…

[免费]微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序智能商城系统(uniappSpringboot后端vue管理端)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序智能商城系统(uniappSpringboot后端vue管理端) Java毕业设计_哔哩哔哩_bilibili 项目介绍…

nth_element函数——C++快速选择函数

目录 1. 函数原型 2. 功能描述 3. 算法原理 4. 时间复杂度 5. 空间复杂度 6. 使用示例 8. 注意事项 9. 自定义比较函数 11. 总结 nth_element 是 C 标准库中提供的一个算法&#xff0c;位于 <algorithm> 头文件中&#xff0c;用于部分排序序列。它的主要功能是将…

CF 581A.Vasya the Hipster(Java实现)

题目分析 红色袜子数量a&#xff0c;蓝色袜子数量b&#xff0c;题目是个潮哥儿&#xff0c;首先选择两种袜子混搭&#xff0c;搭不出来就纯色 思路分析 混搭数量取决于最小数量&#xff0c;剩余的纯色数量取决于哪个还有剩余且数量要/2 代码 import java.util.*;public class…

C基础寒假练习(6)

一、终端输入行数&#xff0c;打印倒金字塔 #include <stdio.h> int main() {int rows;printf("请输入倒金字塔的行数: ");scanf("%d", &rows);for (int i rows; i > 0; i--) {// 打印空格for (int j 0; j < rows - i; j) {printf(&qu…

Python在线编辑器

from flask import Flask, render_template, request, jsonify import sys from io import StringIO import contextlib import subprocess import importlib import threading import time import ast import reapp Flask(__name__)RESTRICTED_PACKAGES {tkinter: 抱歉&…

ASP.NET Core 中间件

目录 一、常见的内置中间件 二、自定义中间件 三、中间件的执行顺序 四、其他自动逸中间件案例 1. 身份验证中间件 2、跨域中间件&#xff08;CORS&#xff09; ASP.NET Core 中&#xff0c;中间件&#xff08;Middleware&#xff09;是处理 HTTP 请求和响应的组件链。你…

LevelDB 源码阅读:写入键值的工程实现和优化细节

读、写键值是 KV 数据库中最重要的两个操作&#xff0c;LevelDB 中提供了一个 Put 接口&#xff0c;用于写入键值对。使用方法很简单&#xff1a; leveldb::Status status leveldb::DB::Open(options, "./db", &db); status db->Put(leveldb::WriteOptions…

2007-2019年各省科学技术支出数据

2007-2019年各省科学技术支出数据 1、时间&#xff1a;2007-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、科学技术支出 4、范围&#xff1a;31省 5、指标解释&#xff1a;科学技术支出是指为促进科学研究、技术开发…

2025年1月22日(网络编程 udp)

系统信息&#xff1a; ubuntu 16.04LTS Raspberry Pi Zero 2W 系统版本&#xff1a; 2024-10-22-raspios-bullseye-armhf Python 版本&#xff1a;Python 3.9.2 已安装 pip3 支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480) 已安装 vim 已安装 git 学习…

如何对系统调用进行扩展?

扩展系统调用是操作系统开发中的一个重要任务。系统调用是用户程序与操作系统内核之间的接口,允许用户程序执行内核级操作(如文件操作、进程管理、内存管理等)。扩展系统调用通常包括以下几个步骤: 一、定义新系统调用 扩展系统调用首先需要定义新的系统调用的功能。系统…

当卷积神经网络遇上AI编译器:TVM自动调优深度解析

从铜线到指令&#xff1a;硬件如何"消化"卷积 在深度学习的世界里&#xff0c;卷积层就像人体中的毛细血管——数量庞大且至关重要。但鲜有人知&#xff0c;一个简单的3x3卷积在CPU上的执行路径&#xff0c;堪比北京地铁线路图般复杂。 卷积的数学本质 对于输入张…

深度学习的应用

目录 一、机器视觉 1.1 应用场景 1.2 常见的计算机视觉任务 1.2.1 图像分类 1.2.2 目标检测 1.2.3 图像分割 二、自然语言处理 三、推荐系统 3.1 常用的推荐系统算法实现方案 四、图像分类实验补充 4.1 CIFAR-100 数据集实验 实验代码 4.2 CIFAR-10 实验代码 深…

Flutter常用Widget小部件

小部件Widget是一个类&#xff0c;按照继承方式&#xff0c;分为无状态的StatelessWidget和有状态的StatefulWidget。 这里先创建一个简单的无状态的Text小部件。 Text文本Widget 文件&#xff1a;lib/app/app.dart。 import package:flutter/material.dart;class App exte…

mysqldump+-binlog增量备份

注意&#xff1a;二进制文件删除必须使用help purge 不可用rm -f 会崩 一、概念 增量备份&#xff1a;仅备份上次备份以后变化的数据 差异备份&#xff1a;仅备份上次完全备份以后变化的数据 完全备份&#xff1a;顾名思义&#xff0c;将数据完全备份 其中&#xff0c;…