香雨站

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 74|回复: 1

Web萌新Wp尝试-php

[复制链接]

2

主题

5

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2023-2-17 11:38:21 | 显示全部楼层 |阅读模式
最近学的很杂,做题做的也比较少,就发一个之前做过的印象比较深的wp吧!(作者还在 了个 ,要是写错了什么理解一下)


首先我们发现他通过get方式接受了a,b两个参数,然后我们开始寻找敏感词,可以看到在最后有一个echo $flag(猜测flag应该是在Hgfks.php中被定义的),也就是说我们最终的目的是让key1和key2都为true。
那么第一关就是


这里看以看到如果变量a接收到了值且将变量a放入了intval函数中处理,网上搜索到的intval比较杂乱,我总结了一下,具体的功能应该是分为两种情况,第一种是内部参数是字符串,则其会把第一个不是数字的字符前的所有数组所象征的数返回回来,听着有点绕,举个例子,如参数为'40135asdf123'那么其返回的是40135,第二种是比较常规的,内部如果是数字,则会返回其对应的整数(注意是整数)。
对于这道问题,我吐槽一下出题人,他利用了远古版本的php中的strlen函数对于科学计数法的处理是将其当作字符串来处理的“漏洞”,但是对于较高版本来说,我试验了一下,其会返回输入的数所对应的十进制的位数(无论是科学计数法还是普通数据都一样)。
不管怎样,这道题的解法是将a设为1E9,不是很完美的符合了上述的两个条件。
然后就是b,这里要求substr函数从倒数第六个字符开始,选6个(说白了就是最后的六个字符),需要字符内容是8b184b,也就是说b经过md5hash函数处理之后的后6个字符是8b184b,这里可以写一个很简单的php脚本来执行


具体如何运行php脚本,大家方法可能不同,本人使用了phpstudy,所以直接将这个php文件放到了网页根目录下运行,第一关解决了。


最恶心的是c变量,首先c变量(看上去是一个数组)通过json解码后进行判断(这里记住一下,最后使用一个json_encode()函数处理一下就行,之后我就用c1来象征处理前的c变量),c1变量是一个数组,然后他使用了关联数组的概念,这个m就相当于一个数字,指向数组的某一个位置,定义时可以使用数组名=['m'=>'我太难了'],故此时调用数组名['m']就等效于'我太难了',这个位置存储的数据他不是一个数字却比2022要大,注意php是弱类型编程语言,所以如果在数字后面加一个字符,在进行比较的时候数字会被直接忽略,这一点会频繁的出现在弱类型语言的ctf题目中,所以我们在这里使用c1['m']=2023c。
然后看c1['n']数组的中包含的元素为2,当然后面的c1['n'][0]表明c1是一个二维数组,那么我理解所谓的包含元素为2应该指的是c1在['n']这个行引索值的情况下有且只有两个元素,我们只需要让c1['n'][1]和c1['n'][0]都存在就可以了,这里看后面题目要求了c1['n'][0]这个元素本身是一个数组,我们不妨使c1['n'][0]=array(0,1),c1['n'][1]=0。我们继续往后看,array_search函数使==形式搜索,我们先再往下看看要求,这里和c++相似,意思是前面那个语句如果成立(即d变量为false),那么就终止程序并打印no......,故我们需要让d变量为true,也就是说array_search需要能够找到"DGGJ",我再来总结一下array_search函数的特性(基础功能我就不说了,大家可以自行百度):这个搜寻如果是二维数组,如果在参数中的字符串变量中只写a[2]指规定一个维数,则他会搜寻这个2维度下的所有数据,如果这些数据里面还嵌套了数组,其不会搜寻这个数组,如$s["n"][0]=array(0,1);$s["n"][1]=0;array_search("asdf", $s["n"]),最后结果为1而不是2,它找不到嵌套数组中的数据!所以说根据弱类型比较的原则,字母会在与数字的比较中视作0,所以我们只需要保持先前所说的c1['n'][0]=array(0,1),c1['n'][1]=0就可以了。至于为什么不能真正意义上的让数组存储上DGGJ的字符串,可以往下看,foreach函数也不用说了,它会提取出数组中的每一个元素放到val中和"DGGJ"比较,如果存在DGGJ(注意这里是===没有任何技巧可言,就是完全意义上的相同),就会退出程序。所以最后的payload就确定下来了!


这是我在做这道题的时候摸索的试验的过程,payload最终结果我就不写下来了,只需要最后确定a,b,c三个变量的内容后用“&“号隔开,在最前面加一个问号,然后扔到url在线编码那里处理一下直接扔到网页网址后面就可以了。
在这里也想聊一聊学了这么半个学期web的感受,怎么说呢,学了这么久web,语言接触了不少,php,html,python,sql,javascript……但是题目那是两眼一抹黑,除了真正意义上的新手题,所有比赛的所谓”very easy“那是一个不会,到现在为止,我自己真正意义上就做出来过一道比赛题,记得是文件包含。。。不说了,一起努力吧!
回复

使用道具 举报

1

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 昨天 11:02 | 显示全部楼层
为毛老子总也抢不到沙发?!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|香雨站

GMT+8, 2025-3-15 00:36 , Processed in 0.644314 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表