攻防世界做题

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.xdnf.cn/news/140055.html

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

相关文章

[学习记录] 设计模式 3. 观察者模式

观察者模式 参考&#xff1a; bugstack 虫洞栈Refactoringhttps://www.cnblogs.com/myseries/p/8735490.htmlhttps://www.jianshu.com/p/4f1cd513a72d 当一个行为发生时传递信息给另外一个用户接收做出相应的处理&#xff0c;两者之间没有直接的耦合关联。 在我们编程开发中也…

计算机视觉: 三维物体生成

三维物体生成与编辑 论文地址: Controllable Mesh Generation Through Sparse Latent Point Diffusion Models 背景 数据是目前数字化和AI领域最宝贵的财富之一&#xff0c;但是对于目前的开发者来说&#xff0c;收集数据都意味着极大的成本。所以建立一个高效的生成模型能极…

Java多线程篇(5)——cas和atomic原子类

文章目录 CASAtomic 原子类一般原子类针对aba问题 —— AtomicStampedReference针对大量自旋问题 —— LongAdder CAS 原理大致如下&#xff1a; 在java的 Unsafe 类里封装了一些 cas 的api。以 compareAndSetInt 为例&#xff0c;来看看其底层实现。 可以发现&#xff0c;最…

GPT,GPT-2,GPT-3,InstructGPT的进化之路

ChatGPT 火遍圈内外&#xff0c;突然之间&#xff0c;好多人开始想要了解 NLP 这个领域&#xff0c;想知道 ChatGPT 到底是个什么&#xff1f;作为在这个行业奋斗5年的从业者&#xff0c;真的很开心让人们知道有一群人在干着这么样的一件事情。这也是我结合各位大佬的文章&…

【AIGC】Stable Diffusion Prompt 每日一练0916

一、前言 1.1 写在前面 本文是一个系列&#xff0c;有点类似随笔&#xff0c;每天一次更新&#xff0c;重点就Stable Diffusion Prompt进行专项训练&#xff0c;本文是第022篇《Stable Diffusion Prompt 每日一练0916》。上一篇《Stable Diffusion Prompt 每日一练0915》 1.…

Android Jetpack Compose之UI的重组和自动刷新

1.概述 我们都知道&#xff0c;在传统的View中&#xff0c;若要改变UI&#xff0c;需要我们修改View的私有属性&#xff0c;比如要修改一个TextView的文字&#xff0c;我们需要通过它的setText(“xxx”)方法去修改。而Compose 则是通过重组来刷新UI。在之前的状态管理的文章中…

基于SSM的田径运动会成绩管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

MySQL详解六:备份与恢复

文章目录 1. 数据库备份的分类1.1 从物理和逻辑上分类1.1.1 物理备份1.1.2 逻辑备份 1.2 从数据库的备份策略角度上分类1.2.1 完全备份1.2.2 差异备份1.2.3 增量备份 1.3 常见的备份方法 2. MySQL完全备份2.1 完全备份简介2.2 优点与缺点2.3 实现物理冷备份与恢复2.3.1 实现流程…

MongoDB(一) windows 和 linux 之 Ubuntu 安装

数据库分类 一、关系型数据库&#xff08;RDBMS&#xff09; mysql 、Oracle、DB2、SQL Server 关系数据库中全都是表 二、非关系型数据库&#xff08;NO SQL&#xff09; MongoDB、Redis 键值对数据库 文档数据库MongoDB 下载 mongoDB https://www.mongodb.com/try/downloa…

渗透中 POC、EXP、Payload、Shellcode 的区别

渗透中 PoC、Exp、Payload、Shellcode 的区别 不同含义&#xff1a; POC Proof of Concept中文意思是“观点证明”。这个短语并非仅仅在漏洞报告中使用&#xff0c;甲方在项目招标过程中也常常要求乙方提供POC&#xff0c;即证明你的方案或者产品能达到声称的功能或性能&…

Tomcat部署、优化、以及操作练习

一.Tomcat的基本介绍 1.1.Tomcat是什么&#xff1f; Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首选。一般来说&#xff0c;T…

详细解释HiveSQL执行计划

一、前言 Hive SQL的执行计划描述SQL实际执行的整体轮廓&#xff0c;通过执行计划能了解SQL程序在转换成相应计算引擎的执行逻辑&#xff0c;掌握了执行逻辑也就能更好地把握程序出现的瓶颈点&#xff0c;从而能够实现更有针对性的优化。此外还能帮助开发者识别看似等价的SQL其…

内存函数 memcpy 和 memmove 的讲解和模拟实现

目录 一.什么是 memcpy 函数 模拟思路 代码实现 二.什么是 memmove 函数 模拟思路 代码实现 一.什么是 memcpy 函数 我们打开 cplusplus 官网查看&#xff1a; memcpy - C Reference (cplusplus.com) 官方文本显示&#xff1a; 内存复制块 将 num 字节的值从源指向的位置…

去耦电路设计应用指南(一)MCU去耦设计介绍

&#xff08;一&#xff09;MCU去耦设计介绍 1. 概述2. MCU需要去耦的原因2.1 去耦电路简介2.2 电源噪声产生的原因2.3 插入损耗2.4 去耦电路简介 参考资料来自网上&#xff1a; 1. 概述 我们经常看到单片机或者IC电路管脚常常会放置一个或者多个陶瓷电容&#xff0c;他们主要…

安防监控视频云存储平台EasyNVR对接EasyNVS时,一直不上线该如何解决?

视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入&#xff0c;并能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。 近期有用户在使用安防视频平台EasyNVR对接上级平台EasyNVS时&#xff0c;出现了一直不上线…

mysql事务测试

mysql的事务处理主要有两种方法1、用begin,rollback,commit来实现 begin; -- 开始一个事务 rollback; -- 事务回滚 commit; -- 事务提交 2、直接用set来改变mysql的自动提交模式 mysql默认是自动提交的&#xff0c;也就是你提交一个sql&#xff0c;它就直接执行&#xff01;我…

Windows 基于Visual Studio 开发Qt 6 注意事项

前提条件&#xff1a; 1、Visual Studio 2022 社区版(免费版) 2、Qt-6.5.1版本 Qt Vistual Studio Tools下载 先打开Visual Studio 2022 社区版 &#xff1a; 点击扩展-》管理拓展按钮后&#xff0c;在搜索框中输入Qt&#xff0c;点击这里第一个扩展安装。 Qt Visual Stud…

计算机毕设 图像识别-人脸识别与疲劳检测 - python opencv

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业…

云计算战略:选择适合你业务的云平台

文章目录 云计算的概述选择云平台的关键因素1. 业务需求2. 预算3. 性能要求4. 数据隐私和合规性 示例&#xff1a;选择适合的云平台业务需求预算性能要求数据隐私和合规性 代码示例&#xff1a;使用云平台服务结论 &#x1f389;欢迎来到云计算技术应用专栏~云计算战略&#xf…

Linux下ThinkPHP5实现定时器任务 - 结合crontab

实例一&#xff1a; 1.在/application/command创建要配置的PHP类文件&#xff0c;需要继承Command类&#xff0c;并重写configure和execute两个方法&#xff0c;例如: <?php namespace app\command; use think\console\Command; use think\console\Input; use think\cons…