而且只有触发报错的时候才会写入部分日志信息,如下:
而直接用url传入php代码,空格会被urlencode
观察日志信息,与及分析代码,可控有蓝色框的请求IP地址,红色圆圈的请求方法,与及后面的host和请求uri
对应代码:
一个个分析一下: ip可以用X-Forwarded-For等,但最后都过滤了
method:
host:
uri:
可以发现可用的选择还挺多的:
method可以用X-HTTP-METHOD-OVERRIDE头,host可以用:X-REAL-HOST,uri 可以用:X-REWRITE-URL
X-REAL-HOST: <?php phpinfo();?> X-REWRITE-URL: <?php phpinfo();?> X-HTTP-METHOD-OVERRIDE: <?php phpinfo();?>
一一对应:
有一点需要注意(看上图),用method头会换成大写,PHP马写进去之后解析可能会出问题,所以建议还是用host和url的两个头
实战场景:Fastadmin 普通用户可以登陆,有模版渲染漏洞,没有开app_debug,无法修改头像,用模版渲染日志文件getshell
0x02 总结 遇到类似的场景时,基于tp5 的文件包含、模板渲染写入PHP代码时可尝试用上述的请求头