打开靶场发现是一串意义不明的字符,在进行抓包和查看源代码无果后,我把目光转向了URL,开始觉得有点奇怪,传了line和filename两个参数,filename后接的是一串base64编码,解码后为keys.txt,访问该文件后还是一串意义不明的字符
此时注意到了filename可能是需要访问的文件名,如果能够访问index.php里的内容得到源代码,就能进行下一步操作了,因为URL是将文件名进行了base64编码后再进行访问的,我也如法炮制,将index.php进行base64编码:aW5kZXgucGhw再进行访问
发现没有任何回显,发现好像漏掉了一个line参数,先随意将其赋值为1,发现有了回显
在对line进行了赋值测试之后,发现line参数的作用是指定回显的代码函数,逐个测试太麻烦了,这里运用了脚本来将其代码全部回显
接下来进行代码审计,一共有17行:
第3行首先用了一个条件运算符?:对filename和line进行一个检测
第5行如果filename为空,那么通过headers函数重定向到初始页面headers(“location:path”)
第6行创建一个数组共有2个元素
第10行就是和该题目相关的,检测cookie是否设置,且是否设置为margin=margin,如果是这样那么向file_list数组中加入一个新元素keys.php,显然flag在该文件中
第13行in_array()测试$file_list的键值是否在数组中,第14行的file(),是将文件分割成一行一行的并存储在数组中
keys.php的base64编码为a2V5cy5waHA=
接下来进行payload构造:http://114.67.246.176:11511/index.php?line=&filename=a2V5cy5waHA=
然后再进行抓包设置cookie值,即可得出flag