i春秋ctf web1

我是小白一个,所以从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)

猜你喜欢

转载自www.cnblogs.com/qie-date/p/12274938.html