攻防世界新手模式例题(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.hqwc.cn/news/549330.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javaweb学习记录(二)web开发入门(请求响应)

第一个基于springboot的web请求程序 通过创建一个带有springboot的spring项目,项目会自动生成一个程序启动类,该类启动时会启动该整个项目,而我们需要写一个web请求类,要求在本地浏览器上发送请求后,浏览器显示Hello&…

Chrome历史版本下载地址:Google Chrome Older Versions Download (Windows, Linux Mac)

最近升级到最新版本Chrome后发现页面居然显示错乱,是在无语, 打算退回原来的版本, 又发现官方只提供最新的版本下载, 为了解决这个问题所有收集了Chrome历史版本的下载地址分享给大家. Google Chrome Windows version 32-bit VersionSizeDate104.0.5112.10279.68 MB2022-05-30…

day03vue学习

day03 一、今日目标 1.生命周期 生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例 2.综合案例-小黑记账清单 列表渲染添加/删除饼图渲染 3.工程化开发入门 工程化开发和脚手架项目运行流程组件化组件注册 4.综合案例-小兔仙首页 拆分模块-局部注册结构样式完善…

【开源】SpringBoot框架开发学生综合素质评价系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能 三、系统展示四、核心代码4.1 查询我的学科竞赛4.2 保存单个问卷4.3 根据类型查询学生问卷4.4 填写语数外评价4.5 填写品德自评问卷分 五、免责说明 一、摘要 1.1 项目介绍 基于J…

DOcker搭建Rancher

简介 Rancher 是供采用容器的团队使用的完整软件堆栈。它解决了管理多个Kubernetes集群的运营和安全挑战,并为DevOps团队提供用于运行容器化工作负载的集成工具。 官网地址:https://www.rancher.cn/ 安装 拉取镜像 docker pull rancher/rancher:stab…

CSS元素定位(学习笔记)

一、 z-index 1.1 作用 规定元素的堆叠顺序,取值越大,层级越往上 1.2 属性值 属性值为数字,可以取负值,不推荐 默认值:auto(跟父元素同一层级) 1.3 注意 必须配合定位(static除外)使用,默认情况下,后面的元…

Tomcat Session ID---会话保持

简单拓补图 一、负载均衡、反向代理 7-1nginx代理服务器配置 [rootdlnginx ~]#yum install epel-release.noarch -y ###安装额外源[rootdlnginx ~]#yum install nginx -y[rootdlnginx ~]#systemctl start nginx.service[rootdlnginx ~]#systemctl status nginx.service [ro…

力扣-1351 统计有序矩阵中的负数

给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非严格递减顺序排列。 请你统计并返回 grid 中 负数 的数目。 示例 1: 输入:grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]] 输出:8 解释&…

Unity UGUI之Toggle基本了解

在Unity中,Toggle一般用于两种状态之间的切换,通常用于开关或复选框等功能。 它的基本属性如图: 其中, Interactable(可交互):指示Toggle是否可以与用户交互。设置为false时,禁用To…

敏捷开发——elementUI/Vue使用/服务器部署

1. 创建vue项目 2. 安装element-ui组件库 npm i -S element-ui或 npm install element-ui3. 在main.js中导入element-ui组件 import ElementUI from element-ui import element-ui/lib/theme-chalk/index.css Vue.use(ElementUI)4. 运行 npm run serve后可以使用 ctrc终止进…

房产销售平台|基于Spring cloud+ Mysql+Java+ Tomcat的房产销售平台设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

九宫格日志网站|基于JSP技术+ Mysql+Java+ B/S结构的九宫格日志网站设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…