nginx反向代理400绕过学习


昨天出了grafana的LFI

payload 

GET /public/plugins/welcome/../../../../../../../../etc/passwd HTTP/1.1
Host: localhost:3000
Connection: close

当然payload的方法有很多,本文重点不在于payload。重点在于grafana或其他业务基本上都是通过nginx去进行反向代理出去的,所以通过nginx访问会返回400。

nginx或者apache这些常见反向代理中间件会对url进行normalize的操作,简单来说就是会在转发前将'../'这些去掉,而当去掉后的路径超出web根目录的限制就会直接返回400错误而不会把请求转发到grafana,因此就会导致复现失败(引用公众号:赛博回忆录)

nginx 主要参考文章(https://www.codenong.com/cs110392483/)

所以漏洞稍微变得鸡肋了一些,今天刚好在朋友圈看到chybeta发的nginx 400反代绕过,学习了一些姿势,进行记录

在payload加上,即可,个人感觉是让nginx以为走前端路由,绕过了normalize(猜测,未实证)

/#/../

学习一波,记录一下,后续的其他payload构造还是有很大帮助的,

最后官网也临时做了升级:

https://grafana.com/blog/2021/12/07/grafana-8.3.1-8.2.7-8.1.8-and-8.0.7-released-with-high-severity-security-fix/

也可以进行升级了

资料:

https://t.zsxq.com/I6ujE6q

https://mp.weixin.qq.com/s/dqJ3F_fStlj78S0qhQ3Ggw