Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Matrix-Cain/webxml

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

4 Commits

Repository files navigation

webxml

介绍

这是一个简单的利用neo4j进行污点分析的练习项目, 主要是为了简单上手neo4j。 这个demo通过读取java web应用中的web.xml文件,解析其中的filter和servlet等信息。并将其以节点的形式保存在neo4j数据库中,通过neo4j的数据可视化后,我们可以直观的查看一个web应用的路由结构(这里只考虑了web.xml中的路由,通过注解指定的路由无法解析)

例如:在非verbose模式下到处对应的web.xml数据存入neo4j中,在neo4j bloom中执行 MATCH p=()-[]->() RETURN p

image-1

通过简单查看可以发现存在一些鉴权filter,例如图中选中的CheckIsLoggedFilter

假设对代码进行代码审计后,我们发现某些servlet存在命令执行风险,例如一个名为evalServlet, 这时开启verbose模式,先在neo4j中执行

MATCH (n) DETACH DELETE n

删除先前插入数据,再导入数据。通过执行

MATCH path=()-[r:evalServlet]->()
RETURN path

或者(需要安装neo4j的apoc拓展)

match (source:App) // 添加where语句限制source函数
match (sink:Servlet {name:"evalServlet"}) // 添加where语句限制sink函数
call apoc.algo.allSimplePaths(source, sink, 'evalServlet>', 20) yield path // 查找具体路径,20代表深度,可以修改
return path

image-2

image-3

可以看到存在一条路径绕开了CheckIsLoggedFilter这个鉴权filter。通过此方式辅助查找未授权等漏洞

我们也可以在情况更加复杂的情况下执行

MATCH (n:Filter WHERE n.name="CheckIsLoggedFilter")<-[rels:evalServlet]-()
with collect(rels) as rels
MATCH path=()-[r:evalServlet where none (r1 in rels where r.url=r1.url)]->()
return path

筛选未经过CheckIsLoggedFilter节点的可达路径

image-4

同理如果我们要查找经过CheckIsLoggedFilter的路径,我们可以执行

MATCH (n:Filter WHERE n.name="CheckIsLoggedFilter")<-[rels:evalServlet]-()
with collect(rels) as rels
MATCH path=()-[r:evalServlet where not none(r1 in rels where r.url=r1.url)]->()
return path

image-5

About

webxml is a web config visualization tool used to find mis-configuration on servlet endpoint

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /