首页 > 其他分享 >[极客大挑战 2019]BuyFlag 1(两种解法)

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

时间:2023-11-10 19:00:40浏览次数:30  
标签:传参 极客 money 22% BuyFlag 2019 字符串 POST password

题目环境:<br />image.png<br />image.png<br />image.png

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

F12瞅瞅源代码:<br />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进行抓包<br />password=404a&money=100000000<br />image.png

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

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

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

修改user=1<br />继续Send进行重放<br />image.png

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

使用科学计数法绕过money:<br />password=404a&money=1e9<br />image.png<br />当money=1时<br />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';
  else
    print 'Nember lenth is too long';
}
?>

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

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

得到flag:<br />flag{cb3acdc3-dcda-49d0-9597-b7247f9c6ff0}

原文链接:https://blog.csdn.net/m0_73734159/article/details/134339328?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22134339328%22%2C%22source%22%3A%22m0_73734159%22%7D

标签:传参,极客,money,22%,BuyFlag,2019,字符串,POST,password
From: https://blog.51cto.com/u_16306712/8306713

相关文章

  • CSP-2019-S 题解
    做了这套题,如果是让现在的我当时去考的话应该一共可以有450分,格雷码,括号树,树的重心都可以做,树上的数可以有10分,Emiya至少可以有76分,划分也可以有64分。看OIerDB上可以有166名的好成绩。我的代码合集:洛谷/云剪贴板[CSP-S2019]格雷码首先是格雷码有一个很好的生......
  • [BalticOI 2019 Day2] 汤姆的餐厅
    [BalticOI2019Day2]汤姆的餐厅题目背景译自BalticOI2019Day2T1.Tom'sKitchen题目描述Tom'sKitchen是一家非常受欢迎的餐厅,其受欢迎的原因之一是每份菜都由至少$K$名厨师进行准备。今天有$N$份菜需要准备,第$i$份菜的准备时间是$A_i$小时。Tom可以......
  • Math.round(-2019.5)的结果是 -2019
    Math.round()函数返回一个数字四舍五入后最接近的整数如果参数的小数部分大于0.5,四舍五入到相邻的绝对值更大的整数如果参数的小数部分小于0.5,四舍五入到相邻的绝对值更小的整数如果参数的小数部分等于0.5,四舍五入到相邻的在正无穷(+∞)方向上的整数。例:x=Math.round(2019.49);......
  • 通过一道题目带你深入了解WAF特性、PHP超级打印函数、ASCII码chr()对应表等原理[RoarC
    题目环境:<br/>依此输入以下内容并查看回显结果1+11'index.phpls<br/><br/>到这里没思路了F12查看源代码<br/>一定要仔细看啊,差点没找到,笑哭访问calc.php文件<br/>果然有点东西PHP代码审计error_reporting(0);关闭错误报告通过GET方式传参的参数numsho......
  • [ZJCTF 2019]NiZhuanSiWei 1
    1.进入页面2.从代码中可以看出要求,以get方式传递text,file,password三个参数。3.第一层验证if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf"))  传入text,而且file_get_contents($text,'r')之后内容为“welcometothezjctf”  利用php伪协......
  • 1-visio studio2019使用
    1、visiostudio2019安装及使用1)下载地址:https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/2)选择社区版进行下载3)安装环境:win10-X64①勾选使用C++桌面开发②除默认选项外,勾选适用于最新v142生产工具的C++MFC③勾选windows10SDK(10.0.17763.0)④自定义安......
  • [极客大挑战 2019]PHP 1
    题目环境:注意这四个字“备份网站”,让我想到了之前自己做网站的时候,有一次上传FTP网站文件,不小心把全部网站文件清空了,我伤心欲绝没有做网站备份文件,自此以后我就把网站文件在本地备份了一份,每更新网站有一次就在本地备份一次,备份格式是ZIP格式,比较节省空间,所以我这猜测它网站后台......
  • 记一次经典SQL双写绕过题目[极客大挑战 2019]BabySQL 1
    题目环境:<br/>作者已经描述进行了严格的过滤做好心理准备进行迎接判断注入类型admin1'字符型注入<br/><br/>万能密码注入admin1'or'1'='1报错<br/>已经是字符型注入了,所以的话只有or这里存在了过滤联想到buuctf里面还没有碰到双写绕过的题目所以这里斗胆......
  • WPF开发的小巧、美观桌面快捷工具GeekDesk开源项目--极客桌面
    今天给大家推荐一个基于WPF开发的,专门为程序员定制的桌面快捷工具。项目简介这是基于.Net+WPF开发的,一个小巧、UI美观的快捷工具。此项目发布以来就受到大家的喜欢,代码结构清晰非常适合用来学习。项目还在持续迭代中,有部分小问题,用来学习、体验完全没问题。作者一直在迭代升级......
  • P5323 [BJOI2019] 光线
    P5323[BJOI2019]光线题目描述当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收。设对于任意\(x\),有\(x\timesa_i\%\)单位的光会穿过它,有\(x\timesb_i\%\)的会被反射回去。现在\(n\)层玻璃叠在一起,有\(1\)单位......