漏洞产生的根本原因是因为混用了cookie和session。
先看几行对于cookie和session处理的类。
CCookieSession实现SessionHandlerInterface接口,接管了php对于session的处理,用cookie进行包装。
其中读取session时是使用CCookieHelper
从cookie中base64回来拿到session
zabbix对于伪造session的处理是另一个类CEncryptedCookieSession,他继承了CCookieSession
重写了CCookieSession的extractSessionId函数,加了一个checkSign的函数。
那么只要不调用CEncryptedCookieSession的extractSessionId函数,或者干脆不用CEncryptedCookieSession而找使用CCookieSession管理session的地方就可以伪造了。
此时再来看index_sso.php
直接从session也就是cookie中取出saml_data中的username_attribute,如果查到了用户名,则set一个sessionid,造成绕过鉴权。
sonarsource的漏洞演示中使用了两次登录,套用了原来的sessionid和sign参数,其实不设置这两个参数也可以。
{"saml_data":{"username_attribute":"Admin"},"sessionid":"","sign":""}
zabbix在一些特定的配置下可以控agent,这些参考Wfox的 Zabbix 攻击面挖掘与利用
文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。