攻防世界做题

news2024/12/27 14:00:06

xff_referer

进来之后显示ip地址必须为123.123.123.123

抓包看一下

要求ip是123.123.123.123

就可以用xff伪造即X-Forwarded-For: 123.123.123.123

得到显示:

 说必须来自google,伪造referer Referer: https://www.google.com

我的要在右边的 inspector中加才可以

得到flag

http请求头中Referer的含义和作用_referer头的作用_小刘学安卓的博客-CSDN博客

这里引用一篇大佬的博客给大家解释Referer是什么

web2 

这段代码主要是一个使用逆向加密算法的 PHP 脚本

下面来解析一下:

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";//定义了一个变量 $miwen,它包含了一个加密后的字符串

function encode($str){//定义了一个名为 encode 的函数,该函数接受一个字符串作为参数并返回加密后的结果
    $_o=strrev($str);//通过 strrev 函数对输入字符串进行反转操作,将其赋值给变量 $_o
    // echo $_o;
        
    for($_0=0;$_0<strlen($_o);$_0++){//使用一个 for 循环遍历 $_o 中的每个字符
       
        $_c=substr($_o,$_0,1);//使用 substr 函数从 $_o 中取出当前位置的字符,并将其赋值给变量 $_c
        $__=ord($_c)+1;//通过 ord 函数获取 $_c 的 ASCII 值,并将其加一
        $_c=chr($__);//使用 chr 函数将加一后的 ASCII 值转换为对应的字符,并将其赋值给 $_c
        $_=$_.$_c;  // $_c 添加到变量 $_ 的末尾   
    }
    return str_rot13(strrev(base64_encode($_)));//使用 base64_encode 函数进行 Base64 编码,然后使用 strrev 函数进行反转,最后使用 str_rot13 函数进行 ROT13 编码
}

highlight_file(__FILE__);//这行代码用于在浏览器中显示当前文件的源代码
/*
   逆向加密算法,解密$miwen就是flag
*/
?>

先时将flag字符串逆序,

然后每一个ascii码数值+1,

然后base64加密,

然后逆序,

然后再rot13加密

得到加密的密文:a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws

根据这个思路把他反过来就可以了

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";//定义了变量 $miwen,其中包含了经过加密的密文字符串
$miwen=base64_decode(strrev(str_rot13($miwen)));//使用 str_rot13 函数进行 ROT13 解码,然后使用 strrev 函数对解码后的字符串进行反转
 
//echo $miwen;
 
$m=$miwen;//将解密后的字符串赋值给变量 $m
 
for($i=0;$i<strlen($m);$i++){//使用一个 for 循环遍历 $m 中的每个字符
 
$_c=substr($m,$i,1);//使用 substr 函数从 $m 中取出当前位置的字符,并将其赋值给变量 $_c
$__=ord($_c)-1//使用 ord 函数将 $_c 转换为对应的 ASCII 值,并将其减一
$__=chr($__);//chr 函数将减一后的 ASCII 值转换为对应的字符,并将其添加到变量 $_ 的末尾
 
$_=$_.$__;//使用 strrev 函数对 $_ 进行反转操作
 
}
 
echo strrev($_);//反转字符串
?>

 得到flag

warmup

查看源代码得到:

<?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)//定义了一个名为 emmm 的类,其中包含了一个静态方法 checkFile,该方法用于检查指定文件是否在白名单中定义了一个白名单数组 $whitelist,其中包含了允许包含的文件名
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//定义了一个白名单数组 $whitelist,其中包含了允许包含的文件名
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;//检查传入的 $page 参数是否存在且为字符串类型,如果不存在或者不是字符串类型,则输出 "you can't see it" 并返回 false
            }

            if (in_array($page, $whitelist)) {
                return true;//$page 在白名单中,则直接返回 true
            }

            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );//使用 mb_substr 和 mb_strpos 函数对 $page 进行处理,去除可能存在的查询字符串部分
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );//使用 urldecode 函数对 $page 进行解码,并再次使用 mb_substr 和 mb_strpos 函数处理 $_page
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }

    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])//首先检查是否存在名为 file 的请求参数,并且该参数是一个字符串类型
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;//如果满足条件,并且通过 emmm::checkFile 方法检查文件名是否在白名单中,则使用 include 函数包含指定的文件,并终止脚本执行
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";//如果条件不满足,则输出一张图片,并显示 "you can't see it"
    }  
?>

 进入hint.php

输入这个文件发现被限制了

 构造payload有三个条件:

第一个:检查一个变量是否为空

第二个:是否为字符串

第三个:通过函数checkFile来检查

 这个函数是分三步来检查是否满足白名单的

只要我们传的参数是source.php或者hint.php则返回真(因为这一步写死了参数只能为白名单的值,所以无法利用)

如果满足继续往下判断

看mb_strpos的第一个参数是:$page.'?',这结果就是在参数后面拼接一个'?'

接着第二个参数'?',就是要查找第一个参数字符串中首次出现'?'的下标,如下图

获得下标就是为了利用mb_substr提取page参数中第一个?前面的字符串

如果还满足继续往下判断 

先把传进的参数做urldecode

接着就和第二步一样

都不满足就输出"you can't see it"并且返回假

总结:我们需要得到checkFile函数返回true且需要带上

所以构造payload的时候,就需要一步一步绕过

先绕过第二步:

source.php/?file=hint.php?

绕过第三步:

/../../../../../../ffffllllaaaagggg

用这个的原因:

先看include定义(官方)

重点:

被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照include_path 指定的目录寻找。

如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略

include_path,简单理解就是类似系统中的PATH环境变量,在文件包含在没有指出路径就会在前面补充这个include_path,从而形成完整的绝对路径

比如:include_path设置为/var/www/,在执行include "flag.txt",路径就是/var/www/flag.txt

由于我们构造的payload:”source.php?/../../../../../../ffffllllaaaagggg“包含路径

所以会忽略include_path直接按照我们路径去寻找。没错虽然这个payload很奇怪但对于include来说就是一个路径,由于不是/开头,所以还是个相对路径,过程如下

假设source.php所在目录为:/1/2/3/4/5/var/www/html/source.php

1、"source.php(或hint.php)?/":进入这个目录,是的哪怕这个目录不存在,因为include会一直尝试到最后才会报错。这样我们当前路径为:"/1/var/www/html/source.php?/"

2、"../":返回上一级,当前目录为"/1/var/www/html/",回到了php所在路径

3、"../":同理,当前路径为"/1/var/www/"

4、"../":同理,当前路径为"/1/var/"

5、"../":同理,当前路径为"/1/"

6、"../":同理,当前路径为"/",回到根目录,最后找到ffffllllaaaagggg这个文件

所以这里可以用/../../../../../../ffffllllaaaagggg来找flag

得到flag

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

报错处理:解决Linux上Nginx启动报错:Worker Processes Sleeping

大家好&#xff0c;今天我来分享一个我在运维过程中遇到的问题&#xff0c;关于Linux上Nginx启动时出现的“Worker Processes Sleeping”报错&#xff0c;以及如何解决这个问题的。 首先&#xff0c;让我们来看看这个报错信息。当你在启动Nginx时&#xff0c;如果你看到类似以下…

如何用ArkUI实现一个加入购物车效果?

关键词&#xff1a;ArkUI的动效能力&#xff0c;动效开发&#xff0c;ArkUI动画 我们在购买商品时&#xff0c;往往习惯将商品先加入购物车&#xff0c;然后在购物车里确认后再下订单&#xff0c;这是一个典型的访问者模式。对于这个高频场景&#xff0c;增添一些动效可以增加a…

基于springboot+vue的老年一站式服务平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【kafka】可视化工具KAFKA EAGLE安装分享

目录 准备&#xff1a; 开始&#xff1a; 1.解压 2.环境变量配置 3.生效环境变量配置文件 3.修改配置文件 1.修改zookeeper集群信息 2.修改mysql配置信息 4.启动 5.异常排查 6.页面 创作不易&#xff0c;你的动力是我创作的动力&#xff0c;如果有帮助请关注我&…

Java面向对象(1)

static静态变量 public class Student {static String name;private double score;public Student(){};public Student(double score) {this.score score;}public double getScore() {return score;}public void setScore(double score) {this.score score;} }public class t…

Flink状态

8.1 Flink中的状态 8.1.1 概述 状态的分类 1&#xff09;托管状态&#xff08;Managed State&#xff09;和原始状态&#xff08;Raw State&#xff09; Flink的状态有两种&#xff1a;托管状态&#xff08;Managed State&#xff09;和原始状态&#xff08;Raw State&#…

【自学记录】深度学习入门——基于Python的理论与实现(第3章 神经网络)

3.4.3 3层神经网络Python实现 实现的是这个网络 **init_network()**函数会进行权重和偏置的初始化&#xff0c;并将它们保存在字典变量network中。这个字典变量network中保存了每一层所需的参数(权重和偏置)。 **forward()**函数中则封装了将输入信号转换为输出信号的处理过程…

CSS 选择器的几种方法

CSS 选择器的几种方法 业余选手爱记笔记示例代码用否定伪类伪元素用代数式法同胞选择符 ~相邻同胞选择符 业余选手爱记笔记 CSS权威指南&#xff08;第四版&#xff09;是一本好书&#xff0c;看了一遍第二章的选择符有些受益&#xff0c;记录一点读后感和练习。我已将该书电…

ShipMaker船舶协同设计软件介绍

作者简介&#xff1a; 有将近20年的软件开发经验&#xff0c;包括15年CAD&#xff08;7年船舶和8年建筑CAD软件&#xff09;软件开发和5年高性能服务器开发。精通CAD建模平台底层架构和服务器开发技术&#xff0c;包括对象存储管理及拷贝、图形对象渲染、文件保存及升级、事务…

C语言自定义类型详解(2)位断、枚举、联合知识汇总

本篇概要 本篇主要讲述C语言位断、枚举。联合的相关知识&#xff0c;包括哥哥自定义类型的基本声明&#xff0c;使用、优点。计算等相关知识。 文章目录 本篇概要1.位断1.1什么是位断&#xff1f;1.2 位段的内存分配1.3 位段的跨平台问题1.3 位段的应用 2.枚举2.1 枚举类型的声…

堆的基本操作和PriorityQueue接口

目录 堆的插入 堆的删除 PriorityQueue接口 PriorityQueue的注意事项: PriorityQueue常用接口介绍 1. 优先级队列的介绍 2. 扩容 3. 插入/删除/获取优先级最高的元素 Java对象的比较 1.基本类型的比较 2.对象比较的问题 3.对象比较的方法 Top- k问题 堆的插入 堆的插入…

asp.net core openxml读取word内容

安装包 OpenXMLSDK-MOT System.IO.Packaging 编写代码测试 using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using System; using System.Linq; using System.Text;namespace WordReader {internal class Program{static void Main(…

【Python从入门到进阶】37、selenium关于phantomjs的基本使用

接上篇《36、Selenium 动作交互》 上一篇我们介绍了selenium操作网页的动作内容。本篇我们来学习有关phantomjs的相关知识。 一、selenium的缺点 在介绍PhantomJS之前&#xff0c;让我们先讨论一下直接使用Selenium的一些缺点。 1、显示浏览器窗口&#xff1a;Selenium通常需…

管理类联考——数学——汇总篇——知识点突破——几何——平面几何——记忆

文章目录 整体记忆宫殿角度/分类/串联线——从小到大角度/分类/串联线2——求长度&#xff0c;面积&#xff0c;角度 局部数字编码口诀法五大模型/共角定理、风筝模型、蝴蝶模型 转化图像法特点法公式推导法&#xff1a;公式推导掌握数学公式射影定理共角定理燕尾定理蝴蝶定理/…

Mysql高级——数据库设计规范(1)

数据库设计规范 1. 为什么需要数据库设计 数据库设计是为了有效地组织和管理数据。它是一个重要的步骤&#xff0c;用于创建一个结构良好、高效和可靠的数据库系统。以下是一些需要数据库设计的原因&#xff1a; 数据组织&#xff1a;数据库设计帮助我们将数据按照一定的结构…

Android 引入FFmpeg

1.安装 CMake 首先&#xff0c;需要下载 CMake 相关工具&#xff0c;在 Android Studio 中依次点击 Tools->SDK Manager->SDK Tools &#xff0c;然后勾选 CMake : CMake 构建工具 NDK : NDK 环境 最后依次点击 OK->OK->Finish &#xff0c;开始下载&#xff0…

科技资讯|苹果获批手机“Touch Bar”新专利,苹果Find My依旧火爆

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果获得了一项 iPhone 专利&#xff0c;在机身侧面装上一个“Touch Bar”&#xff0c;用于显示电量等信息&#xff0c;并支持相关的交互操作。 这项专利最早于 2011 年提交&#xff0c;并于 2014 年…

OJ练习第180题——颠倒二进制位

颠倒二进制位 力扣链接&#xff1a;190. 颠倒二进制位 题目描述 颠倒给定的 32 位无符号整数的二进制位。 提示&#xff1a; 请注意&#xff0c;在某些语言&#xff08;如 Java&#xff09;中&#xff0c;没有无符号整数类型。在这种情况下&#xff0c;输入和输出都将被指…

FPGA 图像缩放 千兆网 UDP 网络视频传输,基于B50610 PHY实现,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择IT6802解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包UDP…

Spring | 异常处理最佳实践

引言 在快速迭代和持续交付的今天&#xff0c;软件的健壮性、可靠性和用户体验已经成为区别成功与否的关键因素。特别是在Spring框架中&#xff0c;由于其广泛的应用和丰富的功能&#xff0c;如何优雅地处理异常就显得尤为重要。本文旨在探讨在Spring中如何更加高效、准确和优…