[极客大挑战 2019]BuyFlag
- 一、解题步骤
- 二、总结
- 2.1 [is_numeric](https://www.runoob.com/php/php-is_numeric-function.html)函数的使用
- 2.2 [PHP弱类型](https://blog.csdn.net/qq_41617034/article/details/92796769?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168638774516800186535461%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168638774516800186535461&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-92796769-null-null.142%5Ev88%5Econtrol_2,239%5Ev2%5Einsert_chatgpt&utm_term=php%E5%BC%B1%E7%B1%BB%E5%9E%8B&spm=1018.2226.3001.4187)
- 2.3 Cookie
- 2.3 科学计数法
- 2.4 strcmp函数
一、解题步骤
-
点开题目连接,全部是一些简介。右上角有一个【MEMU】功能,点开有两个【链接】:

-
查看源码,也看到这个两个【连接】分别打开两个不同的页面。直接点开【pay.php】

-
在pay.php页面中是一些关于Flag的说明:

-
查看网页源码,得到了一段有用的信息:必须提交money和password 两个参数。并且password不可以为纯数字,但是它要与404相等。
<!-- ~~~post money and password~~~ if (isset($_POST['password'])) { $password = $_POST['password']; if (is_numeric($password)) { echo "password can't be number</br>"; }elseif ($password == 404) { echo "Password Right!</br>"; } } --> -
通过代码,我们要了解is_numeric函数的使用与PHP弱类型。
-
使用BurpSuite拦截页面访问,发现Request Header 有一个Cookie值,user = 0 ,将他修改成1,然后把请求修改1,添加请求参数password=404a 和money=100000000

-
Response 信息中提示了Nember lenth is too long。我们要科学计数法,money=1e9。得到flag。

二、总结
2.1 is_numeric函数的使用
2.2 PHP弱类型
PHP中有== 和 ===两种比较方法,前者比较之前会把等号两边的数据类型转换成相同的,后者在比较之前要先判断数据类型是否相同,我们称前者为PHP的弱类型,因为很容易发生“意外情况”。
var_dump(“a”==0); //true;
var_dump(“1a”==1); //true;
var_dump(“a1”==1) //false;
var_dump(“a1”==0) //true;
以这几个为例,我们可以看到字符直接被转换成了0,如果字符前面有数字则字符串等于数字,这种弱类型经常出现在ctf的题中。
还有一个特殊一点的:
var_dump(“0e123456”==“0e4456789”); //true
因为科学计数法0的任意次方都等于0,所以这种类型也相等。
2.3 Cookie
2.3 科学计数法
2.4 strcmp函数
看别人的WP,知道Money的比较实用strcmp函数。
- strcmp(a,b):
- 如果a<b返回负数,
- 如果a>b返回正数,
- 如果a=b返回0。
- 如果a,b的类型不匹配,它会报错返回0。
- 所以将money以数组形式上传也可以得到flag。

本文详细介绍了参加极客大挑战2019时遇到的BuyFlag问题的解决过程。通过分析源码,发现需要提交money和password参数,其中password不能为纯数字但须等于404。利用PHP的is_numeric函数和弱类型特性,以及科学计数法成功绕过限制。在请求中修改Cookie值,并以money=1e9和password=404a提交,最终获取到flag。此外,文章还总结了PHP的is_numeric、弱类型、Cookie、科学计数法以及strcmp函数的使用技巧。

897

被折叠的 条评论
为什么被折叠?



