[极客大挑战 2019]BuyFlag 1(两种解法)

题目环境:
image.png
image.png
image.png

FLAG NEED YOUR 100000000 MONEY
flag需要你的100000000元

F12瞅瞅源代码:
image.png

if (isset($_POST['password'])){   
$password = $_POST['password'];   
if (is_numeric($password)) 
{   
echo "password can't be number"
}
elseif ($password == 404){  echo "Password Right!} } 

PHP代码审计:

两个通过POST方式传参的参数password和money
isset函数判断参数是否存在以及值是否为空,存在及不为空则返回TRUE
is_numeric() 函数用于检测变量是否为数字或数字字符串;这里需要注意数字字符串的意思就是字面意思通过数字组成的字符串,比如:“123456789”
如果是数字或者是数字字符串就会输出"password can’t be number"
如果password是404则密码就是正确的

当password是404的时候虽然满足了第二个elseif语句但是不满足第一个if语句
因为404是数字和数字字符串
想要满足第一个简单,让password成为普通字符串就可以,404a、404b、404c、404%10、404,%20、404%30等等
这样第二个条件也顺便满足了,为什么呢?(在比较的时候把值转换成了数字字符串)
"=="是PHP弱比较逻辑运算符

PHP弱比较:

PHP中的弱比较(Weak comparison)是一种比较两个值是否相等的方法,但它不会对两个值进行严格的全等比较。相反,它允许某些类型的值在比较时进行自动类型转换。
弱比较使用以下规则:

  1. 如果两个值都是布尔值,则它们被认为是相等的,只要它们都是 true 或 false。
  2. 如果两个值都是整数或浮点数,则它们被认为是相等的,只要它们的值相等。
  3. 如果两个值都是字符串,则它们被认为是相等的,只要它们的长度和字符序列相同。
  4. 如果两个值是数组或对象,则它们被认为是相等的,只要它们具有相同的结构(键和值)和相同的顺序。
  5. 如果两个值是 null,则它们被认为是相等的。
  6. 对于其他类型的值,弱比较使用 PHP 的 == 操作符进行比较。

传参并使用burpsuite进行抓包
password=404a&money=100000000
image.png

先通过火狐浏览器插件Max HackBar进行POST传参,再抓包,这样数据包就是POST传参方式,如果直接在数据包里面把GET方式传参改为POST方式传参的话,可能依旧是GET方式传参,这点需要注意。

image.png
鼠标右键Repeater->Send进行重放
image.png
image.png

仅学生用户可以购买FLAG
注意Cookie:user=0
user是用户,0通常代表flase(错误),1通常代表true(正确)
咱们将user修改为1使后台程序可以正常运行

修改user=1
继续Send进行重放
image.png

用户和密码都绕过了
Nember lenth is too long
你的数字太长了
到这里想到了使用科学计数法绕过
1e9代表1的后面有9个0 => 1000000000 > 100000000 (要大于题目要求的money值!)
既满足了条件,数字长度也不长

使用科学计数法绕过money:
password=404a&money=1e9
image.png
当money=1时
image.png

you have not enough money,loser
你没有足够的钱

经过给money参数分情况测试,有3种输出结果

  • 当 money => 100000000
    • 输出"Nember lenth is too long"
  • 当 money < 100000000
    • 输出"you have not enough money,loser"
  • 当 1e9 <= money <= 1e999999(说着当money变为数组时)
    • 输出"flag值"

猜测用到了函数strcmp()用来比较两个字符串,同时还可以比较两个字符串的字符数

strcmp(string1,string2)

  • 0 - 如果两个字符串相等
  • <0 - 如果 string1 小于 string2
  • 0 - 如果 string1 大于 string2

所以当过滤不当不全时,可以通过将参数变为数组的方式进行绕过,这样的话就无法比较,直接返回true

这里大胆猜测他的后台源码:

<?php
$flag=100000000;
$Flag='flag{0c531ed2-9c1e-479a-adcb-d975b1376ca6}'
if (isset($_POST['money'])) {       if (strcmp($_POST['money'],$flag) == 0)#比较money和flag的值和字符数,"=="PHP弱比较逻辑运算符           echo $Flag;       elseif(strcmp($_POST['money'],$flag) < 0)           print 'you have not enough money,loser';elseprint 'Nember lenth is too long';
}
?>

通过数组绕过money:
password=404a&mony[]=0
image.png

中途我2023版Burp里面的Repeater消失不见了,这里问下师傅们,现在不知道怎么回事,所以我又用2021版本Kali做题了,苦涩

得到flag:
flag{cb3acdc3-dcda-49d0-9597-b7247f9c6ff0}

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

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

相关文章

VNC连接服务器实现远程桌面 --以AutoDL云服务器为例

VNC连接服务器实现远程桌面 --以AutoDL云服务器为例 针对本地机为Windows 云服务器租显卡跑些小模型很方便&#xff0c;但是当你想做可视化的时候&#xff0c;可能会遇到麻烦&#xff0c;云服务器没有显示输出界面&#xff0c;无法可视化一些检测任务的结果&#xff0c;或者可…

什么叫做云安全?云安全有哪些要求?

云安全(Cloud Security)是一种基于云计算的安全防护策略&#xff0c;旨在保护企业数据和应用程序的安全性和完整性。云安全利用云计算的分布式处理和存储能力&#xff0c;以更高效、更灵活的方式提供安全服务。 云安全的要求主要包括以下几个方面&#xff1a; 数据安全和隐私保…

Python | 机器学习之数据清洗

​ &#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《人工智能奇遇记》&#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 目录结构 1. 机器学习之数据清洗概念 1.1 机器学习 1.2 数据清洗 2. 数据清洗 2.1 实验目的…

Apache Airflow (六) :DAG catchup 参数设置

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

从0到0.01入门React | 010.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

【C/PTA——8.数组2(课外实践)】

C/PTA——8.数组2&#xff08;课外实践&#xff09; 7-4 矩阵运算7-2 方阵循环右移7-3 螺旋方阵7-4 数组-杨辉三角7-5 数组-对角线求和7-6 数组-矩阵最小值 7-4 矩阵运算 #include<stdio.h> int main() {int n, i, j;int a[10][10] { 0 };scanf("%d", &n)…

电脑技巧:推荐基于浏览器的远程桌面访问控制工具

一、软件简介 Getscreen.me是一个基于浏览器的远程桌面访问控制工具&#xff0c;可以轻松地远程访问控制特定设备。并且注册登录账户实现允许设置具有永久访问权限的设备&#xff0c;可以通过一键进行快速连接访问&#xff0c;无需共享 ID、密码或任何内容。 Getscreen.me采用…

Linux可以投屏到电视吗?用网页浏览器就能投屏到电视!

Linux系统的电脑如果要投屏到安卓电视屏幕上&#xff0c;可以使用投屏工具AirDroid Cast的网页版和TV版一起实现。 首先&#xff0c;在Linux系统的电脑里用chrome浏览器或edge浏览器打开webcast.airdroid.com。这就是AirDroid Cast的网页版。你可以看到中间白色框框的右上角有个…

ARPG----C++学习记录04 Section8 角色类,移动

角色类输入 新建一个角色C&#xff0c;继承建立蓝图,和Pawn一样&#xff0c;绑定输入移动和相机. 在构造函数中添加这段代码也能实现。打开UsePawnControlRotation就可以让人物不跟随鼠标旋转 得到旋转后的向前向量 使用旋转矩阵 想要前进方向和旋转的方向对应。获取当前控制…

2.3 Windows驱动开发:内核字符串转换方法

在内核编程中字符串有两种格式ANSI_STRING与UNICODE_STRING&#xff0c;这两种格式是微软推出的安全版本的字符串结构体&#xff0c;也是微软推荐使用的格式&#xff0c;通常情况下ANSI_STRING代表的类型是char *也就是ANSI多字节模式的字符串&#xff0c;而UNICODE_STRING则代…

图论14-最短路径-Dijkstra算法+Bellman-Ford算法+Floyed算法

文章目录 0 代码仓库1 Dijkstra算法2 Dijkstra算法的实现2.1 设置距离数组2.2 找到当前路径的最小值 curdis&#xff0c;及对应的该顶点cur2.3 更新权重2.4 其他接口2.4.1 判断某个顶点的连通性2.4.2 求源点s到某个顶点的最短路径 3使用优先队列优化-Dijkstra算法3.1 设计内部类…

Vue 小黑记事本组件板

渲染功能&#xff1a; 1.提供数据&#xff1a; 提供在公共的父组件 App.vue 2.通过父传子&#xff0c;将数据传递给TodoMain 3.利用 v-for渲染 添加功能&#xff1a; 1.收集表单数据 v-model 2.监听事件&#xff08;回车点击都要添加&#xff09; 3.子传父&#xff0c;讲…

Redis解决缓存问题

目录 一、引言二、缓存三、Redis缓存四、缓存一致性1.缓存更新策略2.主动更新 五、缓存穿透六、缓存雪崩七、缓存击穿1.基于互斥锁解决具体业务2.基于逻辑过期解决具体业务 一、引言 在一些大型的网站中会有十分庞大的用户访问流量&#xff0c;而过多的用户访问对我们的MySQL数…

原生JS实现视频截图

视频截图效果预览 利用Canvas进行截图 要用原生js实现视频截图&#xff0c;可以利用canvas的绘图功能 ctx.drawImage&#xff0c;只需要获取到视频标签&#xff0c;就可以通过drawImage把视频当前帧图像绘制在canvas画布上。 const video document.querySelector(video) con…

Nginx 使用笔记大全(唯一入口)

Linux服务器因为Nginx日志access.log文件过大项目无法访问 项目处于运行状态下无法访问&#xff0c;第一步查看磁盘状态 1、查看磁盘状态 df -h 2、查找100M以上的文件 find / -size 100M |xargs ls -lh 3、删除文件 rm -rf /usr/local/nginx/logs/access.log 4、配置nginx.…

LabVIEW中如何在网络上使用远程VI服务器

LabVIEW中如何在网络上使用远程VI服务器 如何在网络上使用远程VI服务器&#xff1f; 解答: 首先&#xff0c;需要在远程的计算机上打开一个在VI服务器上的LabVIEW应用程序的引用。这可以通过“Open ApplicationReference“函数实现。然后用“Open VI Reference”函数打开一个…

Js 保留关键字

JavaScript 关键字用于标识要执行的操作&#xff0c;和其他任何编程语言一样&#xff0c;JavaScript 保留了一些关键字为自己所用&#xff1b;这些关键字有些在目前的版本中可能没有使用&#xff0c;但在以后 JavaScript 扩展中会用到。 以下是JS中最重要的保留关键字&#xf…

【数据结构】堆(Heap):堆的实现、堆排序

目录 堆的概念及结构 ​编辑 堆的实现 实现堆的接口&#xff1a; 堆的初始化&#xff1a; 堆的打印&#xff1a; 堆的销毁&#xff1a; 获取最顶的根数据&#xff1a; 交换&#xff1a; 堆的插入&#xff1a;&#xff08;插入最后&#xff09; 向上调整&#xff1a;&#xff0…

Linux---(六)自动化构建工具 make/Makefile

文章目录 一、make/Makefile二、快速查看&#xff08;1&#xff09;建立Makefile文件&#xff08;2&#xff09;编辑Makefile文件&#xff08;3&#xff09;解释&#xff08;4&#xff09;效果展示 三、背后的基本知识、原理&#xff08;1&#xff09;如何清理对应的临时文件呢…

layui table合并相同的列

table.render({elem: #samples,url: /index/Develorderss/samplelists?od_idod_id //数据接口,page: { //支持传入 laypage 组件的所有参数&#xff08;某些参数除外&#xff0c;如&#xff1a;jump/elem&#xff09; - 详见文档layout: [prev, page, next, count,skip,limit]…