1、never give up
查看源代码,发现1p.html
进入1p.html看看
发现一串base64的密文,解密后
直接去访问f4l2a3g.txt
2、welcome to bugkuctf
查看源代码
分析一下代码
1、三个传参
2、$user存在且不能为空
3、读取$user文件,内容为welcome to the bugkuctf
4、$file要求为hint.php,将其导入
利用php://input:
当传进去的参数作为文件名变量去打开文件时,可以将参数php://传进,同时post方式传进去的值作为文件内容,供php代码执行时当作文件内容读取
发现并没有什么特别的,利用一下文件包含
base64解码得到
经典的_toString事件,但是没有触发条件,肯定是index.php还藏着东西,于是查看
解码
从上面获取的源码可得到以下信息:
(1)hint.php中提示flag.php,index.php中利用preg_match()正则表达式过滤掉了flag
(2)hint.php中定义了一个类Flag,其中有个__toString方法,这个方法可以理解为将这个类作为字符串执行时会自动执行的一个函数
(3)__toString方法执行时,将变量$file作为文件名输出文件内容,结合提示flag.php,猜测屏蔽的flag.php文件在这里打开
(4)在index.php源码中看到了$password的作用
这里应该是利用$password
前面提到Flag方法当作字符串执行时,会自动执行__toString方法,注意到echo函数,只能输出一个或多个字符串,所以只要$password为Flag类型的数据,且其中string类型的变量$file为flag.php
serialize——产生一个可存储的值的表示
unserialize——从已存储的表示中创建PHP的值
自己写个php文件:
执行后得到
将其作为参数$password传进去,抓包可得:
3、过狗一句话
猜测是直接利用一句话
根据题目提示应该是要给s赋值
尝试http://120.24.86.145:8010/?s=phpinfo()
说明s可以输出我们输入的结果
发现成功执行
于是尝试能否执行cmd命令
http://120.24.86.145:8010/?s=system(%27ls%27)
返回空白页面,没有任何信息说明执行失败
猜测是权限被控制了,于是用另一种方法来读取文件(php读取文件列表的方法)
然后读取flag.txt即可