攻防世界新手模式例题(Web)

PHP2

首先我们查看页面,查看前端代码

发现均没有什么有效信息,由题目可知,此问题与php相关,于是我们可以看一下他的index.php文件

查看时用?index.phps

补充知识:phps文件就是php的源代码文件,通常用于提供给用户(访问者)查看php代码,因为用户无法直接通过Web浏览器看到php文件的内容,所以需要用phps文件代替。

得到了php源码,判断此处应该是代码审计问题。

这一段代码表明,经过url解码后的id不能等于admin,否则将会直接退出

而这一段代码表名,经过一次urldecode解码后的内容要等于admin

于是我们可以将admin经过两次url加密,这样便可以绕过第一次比较,经过第二次解码后得到flag

补充知识:urlencode()与urldecode()函数

urlencode():原理就是首先把中文字符转换为十六进制,然后在每个字符前面加上一个标识符%,一般用在url链接地址编码

urldecode():与上述函数原理相反用于解码已编码的URL字符串,其原理就是把十六进制字符串转化为字符

浏览器在接受url时,会首先进行一次urldecode的解码

easyupload

显然是一个文件上传问题,我们开始用应对白名单的绕过

首先上传.user.ini的文件(因为是上传头像,所以必定只能放过image类型的文件)

我们在此处直接上两个绕过,一个是通过抓包改变content-type

另一个是在文件内容前加上GIF89a,绕过对文件内容的检测

一句话木马同样采用上述绕过方式

最后通过中国蚁剑连接,得到flag文件

easyphp

首先我们通过页面判断,此题为一个代码审计问题

通过这段代码我们可以得知要想得到flag,要使key1,key2同时非零

然后我们在上边找给key赋值的操作

补充知识:isset()函数用于检查一个变量是否已经设置并且非null,返回true或false。

intval()函数用于将一个变量转换为整数类型。

如果参数是一个整数或者一个字符串表示的整数(比如"123"),则直接返回这个整数值。

如果参数是一个浮点数,则返回它的整数部分(即向下取整)。

如果参数是一个字符串,但不是一个有效的整数表示(比如"abc"),则返回0。

如果参数是一个布尔值,true会被转换为1,false会被转换为0。

如果参数是一个数组或者对象,则返回0。

如果参数是null,则返回0。

也就是说我们要同时满足a有值,a转变为整数类型后值要大于6000000,并且a的字符串长度要小于等于3

显然第二三个条件是相反的,此处但我们可以通过科学计数法写。比如9e9(此处考察在低版本php中科学计数法的长度是按字符串来算的),则我们便绕过了第一个限制

补充知识:

在PHP中,substr()函数用于返回字符串的一部分。它的语法如下:

substr(string $string, int $start, ?int $length = null): string

其中:

$string 是要处理的字符串;

$start 是要截取的起始位置,如果是负数,表示从字符串末尾开始计算;

$length 是可选的参数,表示要截取的长度。如果未指定,则截取从起始位置到字符串末尾的所有字符。

在PHP中,字符串从末尾算起第一个字符的索引是-1。

所以我们要使b经过md编码后的倒数六个字符依次为8b184b

此时我们要通过脚本暴力破解

补充知识:

m = hashlib.md5(): 创建一个 MD5 哈希对象 m,但此时还没有对任何数据进行哈希计算。

m.update(str.encode('utf-8')): 将输入的字符串 str 转换为字节编码(UTF-8 编码),然后更新哈希对象 m,将这个字节编码添加到哈希对象的内部缓冲区中。

return m.hexdigest(): 计算哈希对象 m 中所有输入的哈希值,并以十六进制字符串的形式返回结果。这里的hexdigest()方法会返回一个32位的十六进制字符串,表示MD5哈希值。

跑出来的结果是53724,于是我们绕过了第二个条件判断

此时我们已经使key1的的值为真

补充知识:

jason_decode(): 用于将 JSON 格式的字符串转换为 PHP 变量。它接受一个 JSON 格式的字符串作为参数,然后返回对应的 PHP 变量。如果转换失败,会返回 null

is_array(): 用于判断一个变量是否是数组。如果变量是数组,则返回 true,否则返回 false

is_numeric(): 用于判断一个变量是否是数字或数字字符串。如果变量是数字或数字字符串,则返回 true,否则返回 false

count(): 用于统计数组中的元素个数,或者统计对象中的属性个数。它接受一个数组或对象作为参数,返回其元素个数。

die(): 用于输出一条消息并终止脚本的执行。通常用于在程序中发现错误或异常情况时,输出错误信息并停止程序的执行。

第一个绕过,首先满足c是一个数组,并且键m对应的值不是数字,同时还要大于2022,可以写成2022c进行绕过

补充知识:php的弱类型比较,php的数字与字符串比较的时候会自动进行解析其会将字符串从第一个非数字处截断,将截断前的字符串当作数字进行比较。

第二个绕过,满足键n对应的是一个含有两个元素的数组,且第一个元素也是数组

"n":[ [] ,0]

补充知识:php中数组的形式大概是(“键名”=>"值")这样的形式,此处写作{ },是因为它进行了json形式解码

最终payload:

fileclude

首先判断是白盒的代码审计

关键是这个include函数

所以首先要这样构建?file1=php://filter/read=convert.base64-encode/resource=flag.php

让flag.php文件以base64编码的形式显示到屏幕上

第二个便是需要绕过,file2=php://input这里采用简单的写入,利用bp抓包

使file_get_contents()返回的值为“hello ctf”

最后得到base64编码的flag

解密得到flag

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

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

相关文章

算法之位运算

常见的位运算操作: 首先先熟悉一下常见的位运算操作: 1. 基础位运算 左移<<, 右移>>, 按位与&, 按位或|, 按位异或^, 按位取反~ 注意: 异或其实是一种无进位相加. 2. 给定一个 n, 确定它的二进制表示中第x位是 0 还是 1 n & (1<<x) 或者 (n>…

消费者组大观:5种状态,1场分布式奇迹

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 消费者组大观&#xff1a;5种状态&#xff0c;1场分布式奇迹 前言EmptyDead状态处理 Dead 状态的策略&#xff1a;防范和恢复&#xff1a; PreparingRebalance处理 "PreparingRebalance" 状…

【Leetcode-102.二叉树的层序遍历】

题目详情&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例…

Linux软件管理(1)

软件管理 下载 wget Linux wget是一个下载文件的工具&#xff0c;它用在命令行下。 wget工具体积小但功能完善&#xff0c;它支持断点下载功能&#xff0c;同时支持FTP和HTTP下载方式&#xff0c;支持代理服务器和设置起来方便简单。 1.语法 wget [选项]……[URL]…… 2、…

React - 实现菜单栏滚动

简介 本文将会基于react实现滚动菜单栏功能。 技术实现 实现效果 点击菜单&#xff0c;内容区域会自动滚动到对应卡片。内容区域滑动&#xff0c;指定菜单栏会被选中。 ScrollMenu.js import {useRef, useState} from "react"; import ./ScrollMenu.css;export co…

【MATLAB源码-第165期】基于matlab的科莫多巨蜥算法(KMA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 科莫多巨蜥算法&#xff08;Komodo Mlipir Algorithm&#xff0c;简称KMA&#xff09;是一种受到印尼科莫多岛上独特生物——科莫多巨蜥启发的创新算法。尽管这个算法的名称听起来很有趣&#xff0c;但实际上它并不是一个公认…

写论文matplotlib使用同一色系的颜色

推荐网站 Colorsinspo - All in one resource for finding everything about colors | Colorsinspo 网页直接可以复制颜色 除此之外&#xff0c;自己还试了一个色系&#xff08;可惜不理想&#xff0c;看着不均匀&#xff09;&#xff0c;先存到这里 color_name [lightgr…

数据结构从入门到精通——直接插入排序

直接插入排序 前言一、直接插入排序的基本思想&#xff1a;二、直接插入排序的实例三、直接插入排序的动图展示四、直接插入排序的具体代码test.c 前言 直接插入排序是一种简单的排序算法&#xff0c;其工作原理是逐个将待排序元素插入到已排序序列中的适当位置&#xff0c;直…

7-初识Keras:轻松完成神经网络模型搭建

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享&#xff0c;严禁他用&#xff01;&#xff01;如有侵权&#xff0c;请联系删除 目录 一、知识引入 &#xff08;一&#xff09;矩阵和向量 1、向量 2、矩阵 &#xff08;二&#xff…

java Flink(四十三)Flink Interval Join源码解析以及简单实例

背景 之前我们在一片文章里简单介绍过Flink的多流合并算子 java Flink&#xff08;三十六&#xff09;Flink多流合并算子UNION、CONNECT、CoGroup、Join 今天我们通过Flink 1.14的源码对Flink的Interval Join进行深入的理解。 Interval Join不是两个窗口做关联&#xff0c;…

001_【基础篇】SpringBoot入门案例创建与实现

要求&#xff1a;使用 Springboot 开发一个 web 程序&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串 hello springboot 使用 springboot 只需要引入一个起步依赖 <dependency><groupId>org.springframework.boot</groupId><artifac…

STP环路避免实验(思科)

华为设备参考&#xff1a;STP环路避免实验&#xff08;华为&#xff09; 一&#xff0c;技术简介 Spanning Tree Protocol&#xff08;STP&#xff09;&#xff0c;即生成树协议&#xff0c;是一种数据链路层协议。主要作用是防止二层环路&#xff0c;并自适应网络变化和故障…

个人网站制作 Part 9 添加发布、管理博客功能 | Web开发项目

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加博客功能&#x1f528;使用Express和MongoDB&#x1f527;步骤 1: 创建博客模型&#x1f527;步骤 2: 创建博客路由 &#x1f528;使用前端框架&#x1f527;步骤 3:…

什么是零日攻击?

一、零日攻击的概念 零日攻击是指利用零日漏洞对系统或软件应用发动的网络攻击。 零日漏洞也称零时差漏洞&#xff0c;通常是指还没有补丁的安全漏洞。由于零日漏洞的严重级别通常较高&#xff0c;所以零日攻击往往也具有很大的破坏性。 目前&#xff0c;任何安全产品或解决方案…

OxyPlot 导出图片

在 OxyPlot 官方文档 https://oxyplot.readthedocs.io/en/latest/export/index.html 中查看 这里用到的是导出到 PNG 文件的方法&#xff0c;不过用的 NuGet 包最新版&#xff08;2.1.0&#xff09;中&#xff0c;PngExporter 中并没有 Background 属性&#xff1a; 所以如果图…

字符函数与字符串函数

前言 本次博客可以说内容最为多的一次博客&#xff0c;讲解同样很细致大家好好看看 1字符函数 在讲解字符函数时,大家得了解什么是字符吧 普通字符a b c 1 转义字符 \n 换行‘ \t’ 水平制表符\r回车 大家了解即可 在C语言中字符也可以有分类 所以我们先来看看…

软件测试经验与教训

大概在18年的时候&#xff0c;就看过《软件测试经验与教训》的纸制版&#xff0c;里面的一些观点深刻的影响了我&#xff0c;也影响了后来我对测试的思考。最近又一次快速阅读了电子版&#xff0c;还是收获满满。下面精选出10条&#xff0c;和大家分享。 一、测试人员是项目的…

testng测试类第2步

创建xml文件并编写xml文件 并学习其中的参数 1、创建 xml文件 在测试包->右键找到creat TestNG XML 创建xml文件 如果报错就可以粘贴过来 认识原始文件 这里首行是标识&#xff0c;其次是2个参数&#xff0c;name是测试套件的名称&#xff0c;谁的测试套件一般是公司名称…

JAVA实战手册-开篇总述

该专题以实战为出发点&#xff0c;总结概述了实际工作中常用的java知识点&#xff0c;掌握了这些知识点&#xff0c;日常工作开发以及面试都不在话下。 话不多说&#xff0c;直入正题&#xff0c;以下为JAVA知识点概括总结&#xff08;总计涵盖了10大类78小项&#xff09; 针对…