ProtoPom=>Pom
Dependency
MavenRepo
Named
from ProtoPom pp
select pp.getArtifact(),pp.getGroup(),pp.getShortCoordinate(),pp.getVersionString()
查看POM文件是否包含指定的依赖
import semmle.code.xml.MavenPom
from Dependency dep
where dep.getShortCoordinate() in ["com.alibaba:fastjson"] or
dep.getGroup().getValue() = "org.apache.poi"
select dep,dep.getShortCoordinate(), dep.getVersionString()
在POM文件中,MavenPom::Version.getValue()谓词可以直接识别
<properties>
<fastjson.version>1.2.11</fastjson.version>
</properties>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
getTextValue()方法获得的是${fastjson.version}
getValue()方法获得的是1.2.11
案例
查询POM文件中FastJSON的版本号,如果存在漏洞,则通过调用链构造出入口URL
1、判断版本号
import semmle.code.xml.MavenPom
from Dependency dep
where dep.getShortCoordinate() = "com.alibaba:fastjson" and
dep.getVersion().getValue().regexpMatch("1\\.2\\.[0-4][0-7]")
select dep, dep.getShortCoordinate(), dep.getVersion().getValue()
2、匹配调用链
3、构造入口URL