web入门128
call_user_func — 把第一个参数作为回调函数调用
为了让if条件成立,f1中不能有数字,字母,但是f1也要是个函数
看了看payload
_()==gettext() 是gettext()的拓展函数,开启text扩展
在当前域中查找信息
f2我们可以用get_defined_vas,返回所有已知变量的数组
(因为有call_user_func在我们就不用加括号,f1,f2会被直接调用)
web入门129
那就是要找到flag.php
?f=/ctfshow/../var/www/html/flag.php
既然readfile找的是文件,那么也可以:?f=php://filter/ctfshow/resource=flag.php
( PHP对无法使用的filter过滤器只会抛出warning而不是error )
web入门130
'/.+?ctfshow/is' 后面的i表示大小写匹配,s表示忽略换行符,单行匹配
在不加转义字符的前提下,前面的点表示任意字符,而“+?”表示非贪婪匹配,即前面的字符至少出现一次
直接f=ctfshow
因为
是强比较,所以stripos返回的0不会==fakse
也可以用数组绕过
web入门131
在php中正则表达式进行匹配有一定的限制,超过限制直接返回false
官方的payload:
echo str_repeat('very', '250000').'36Dctfshow';
运行这个代码,然后把结果复制post提交
也可以用py:
import requests
url = "http://67219da3-035a-4874-b480-66ba27e2c2ad.challenge.ctf.show/"
s = '666' * 333333 + '36dctfshow'
print(len(s))
data = dict(f=s)
response = requests.post(url, data=data).text
print(response)
web入门132
后台扫描 /robots.txt ,再访问/admin,得到原码
辑运算符优先级不同,四个符号的优先级从高到低分别是: &&、||、and、or
x && y 当x为false时,直接跳过,不执行y; x||y 当x为true时,直接跳过,不执行y
所以只要保证username=admin就可以让
成立,所以payload:?username=admin&password=&code=admin