i春秋web个人刷题记录,防止退化
新手一个,纯记录做法,借鉴了不少文章。话不多说,上题!
注:如果看不懂PHP代码的相关函数可以去PHP手册查找,网站:https://www.php.net/manual/zh/index.php
PHP可在菜鸟快速入门。
hackbar若要收费要许可证,可直接在下方输入asd,即可正常使用。
爆破-1:打开链接,发现PHP代码
题目提示在六位数变量中,明确我们的flag在flag.php这个文件里面以注释或者不外显的形式存在。
hello这个变量是我们可控的,并且只能是全是字符,如果有其他则结束。
"$$a",这里有2个$符号,$a是我们传过去的变量,再加上个$号则又是个变量,
preg_match('/^\w*$/',$a ) 过滤所有小写字母,通过大写字母绕过
eval("var_dump($$a);"); 加上题目解释联想到_SERVER、_COOKIE等变量,测试可以通过,测试GLOABLES,可以打印出全部变量
量。
解法:
二、爆破-2
var_dump函数是会将变量内容输出来并加上变量的类型。
因为其外围有个eval()函数,说明可以我们变量内容如果是一个语句或者命令的话是可以执行的,
所以我们要控制hello里面的值,用它来读出flag.php文件,PHP文件读取方式如下。
构造url:
http://62c123bf4f8a456a870a0b3a3841acde07a12dce89ee48a3.game.ichunqiu.com/?hello=file_get_contents('flag.php')
string(83),是回显了了个83长度的字符串,但是这里并不完全,查看该页面源码即找到flag:
三、爆破-3
这里的require与include基本一样,是调用其他php文件进来的函数,require会生成致命错误然后终止脚本
1、首先创建了一个会话内容,$_SESION 变量用于存储关于用户会话(session)的信息,初始值nums为0,
time为当前时间,whoami为ea。并且这个会话在120秒之后结束。
2、通过get或post请求获取到value的参数,然后随机生成两个字母拼接成字符串
3、如果whoami变量的值是传入value的参数前两位,并且value的md5值的第5个开始长度为4的字符串==0,
这时num++,这时whoami的值是随机的那两个字母组成的字符串
4、循环十次然后输出flag
构造payload:
在这里因为md5不能处理数组,md5()这个函数参数如果为数组就会返回false,也就是满足 == 0,
可以利用数组来绕过md5值等于0的条件:?value[0]=e&value[1]=a
然后就是第一个条件,我们可以手动打,在120秒内来十次也就出来啦,也可以写脚本跑,参考py脚本如下:
import requests url="这里复制你那题目的URL" s = requests.Session() h = s.get(url + '?value[]=ea').text for i in range(10): h=s.get(url + '?value[]=' + h[0:2]).text if 'flag{.*}' in h: break print(h)
本功法来自三千大道(博客园),由小仙:{Hndreamer}创作,本文章均采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,转载请注明源功法及作者链接:https://www.cnblogs.com/Hndreamer/articles/15984597.html