我是小白一个,所以从i春秋最简单的题目开始做,在这里做日常笔记!!
爆破1
爆破2
爆破3
爆破1
首先可以看到一段代码,
1、$_REQUEST属于PHP的超级全局变量,PHP $_REQUEST 用于收集HTML表单提交的数据,
这里的意思就是接受get或post提交的hello并赋予给a变量,
2、if的条件是a变量的值符合/^W*$/正则匹配的字符,即^从一行的开头开始匹配,$是结束,w是匹配包括下划线的任何单词字符,
*是前面表达的任意次
3、如果满足正则匹配就输出$$a变量,$a=hello,$$a=$hello
4、了解到超全局变量$GLOBALS
,用来引用全局作用域中可用的全部变量。这样就会打印出当前定义的所有变量,也包括 include 的文件中的变量,
flag 也存在在这些变量中。
5、然后传入参数hello,令hello=GLOBALS,payload为:?hello=GLOBALS
爆破2
首先可以看到一段源码
提示说flag不在变量中,那可能就在注释或者回显中
var_dump函数是将变量内容输出来之后加上变量的类型,因为最外层是eval函数,说明如果变量内容是命令的话也是可以执行的,
构造payload:?hello=file_get_contents(‘flag.php‘)
我们也可以传入一句话,然后用菜单连接查找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秒内来十次也就出来啦,也可以写脚本跑
1 import requests
2 url="http://53d7f749ec88496ba93f03712603cc854df8304118f64172.changame.ichunqiu.com/"
3 s = requests.Session()
4 h = s.get(url + '?value[]=ea').text
5 for i in range(10):
6 h=s.get(url + '?value[]=' + h[0:2]).text
7 if 'flag{.*}' in h:
8 break
9 print(h)