WP | easyphp 攻防世界 web

 

 

 

1、点击进入题目场景后显示一大段php代码,初步可判断本题的解题方向主要为代码审计

 

 

2、仔细浏览一遍源代码,可以大致分为两部分:

(1)第一部分:

a和b的值均已GET请求方式传参,我们的目的是绕过重重判断即if语句让变量key1被赋值1。

 

先来简单讲一下php语言中这几个函数的含义:

isset(): 检测变量是否设置

intval(): 获取变量的整数值

strlen(): 返回字符串的长度

substr(string,start,length): 返回字符串的一部分

 

 

这句语句的含义是变量a长度不大于3并且大于6000000,我们可以通过科学计数法来进行绕过,随机取7e7

 

 

要求变量b的md5加密后的值的前六位为 ‘8b184b’ ,可以通过编写php脚本来得出合适的值进行绕过

 

变量b的值为53724

 

 

(2)第二部分:

1、变量c要求是数组并且存在m不为数字且m大于2022

is_numeric(): 检测变量是否为数字或数字字符串

is_array(): 判断是否为数组

 

2、$c存在数组n并且n的长度为2并且array[n][0]是二维数组

 

3、在数组n里寻找“DGGJ”,若找到则返回键值;否则返回false

 

 

array_search()采取弱类型比较的特点,因为“DGGJ”开头字符串没有数字,所以转化为数字时为0,则意味着我们构造数组n里非零下标也需要元素0,使得0==0成立,从而绕过该函数

 

构造变量c使用json_decode格式:c={"m":"2023a","n":[[],0]}

 

得到完整的playload为 ?a=7e7&b=53724&c={"m":"2023a","n":[[],0]}

 

 

结合前两部分key1和key2,利用谷歌浏览器插件Hackbar使用get请求方式传参,可最终得到flag

 

Flag:cyberpeace{a7a194304e5fc5c7725182aff9beee9d}

posted @ 2022-11-03 17:56  GoxHam23  阅读(323)  评论(0编辑  收藏  举报