MATCH (u:User {name:{user}}), (target:Group {name: {group}}), p=shortestPath((u)-[*]->(target)) RETURN p
Run Code Online (Sandbox Code Playgroud)
当我在Neo4j Web UI中运行上述查询时,将显示结果路径的下降图。
但是,当我使用neo4j-python驱动程序运行相同的查询时,仅Path返回信息有限的对象
<Path start=479557 end=404582 size=1>
Run Code Online (Sandbox Code Playgroud)
如何使用Cypher和python获取完整的路径详细信息,包括所有节点以及连接它们的关系?
取决于您要如何返回数据,但是您可以尝试这样的操作
MATCH (u:User {name:{user}}), (target:Group {name: {group}}),
p=shortestPath((u)-[*]->(target)) RETURN nodes(p),relationships(p)
Run Code Online (Sandbox Code Playgroud)
感谢大家的帮助!作为参考,这是我的完整示例,它将路径转换为人类可读的字符串以用于控制台或电子邮件输出。
def find_paths_from_standard_user_to_domain_admins(standard_user, domain_admins_group):
"""Returns a list of paths that a standard user could take to get domain admin credentials"""
results = []
query = "MATCH (u:User {name:{user}}), (target:Group {name: {group}})," \
"p=allShortestPaths((u)-[*]->(target)) RETURN p"
with driver.session() as session:
with session.begin_transaction() as tx:
for record in tx.run(query, user=standard_user, group=domain_admins_group):
relationships = record["p"].relationships
nodes = record["p"].nodes
path = ""
for i in (range(len(relationships))):
path += "{0}-[{1}]->".format(nodes[i]["name"], relationships[i].type)
path += nodes[-1]["name"]
results.append(path)
return results
Run Code Online (Sandbox Code Playgroud)
这是对Bloodhound项目生成的图的查询,该项目构建 Active Directory 结构的图。它对于域管理员、系统架构师、网络防御者和渗透测试人员非常有用。
| 归档时间: |
|
| 查看次数: |
553 次 |
| 最近记录: |