src域名监控实践

前言

我们在挖洞过程中,少不了域名的信息收集,有的是走接口,有的是dnslog爆破,已经很多人开始实践了,这里整理一篇域名监控实践,主要功能是每天更新监控到的src新的域名信息到钉钉提醒。

思路

之前自动化挖洞初步构想就提过,采用的是FeeiCN/ESD,通过dnslog爆破的方式来尽可能的来获取新的域名信息,然后通过对比昨天和今天的记录,把新的域名信息发回来。

具体代码:

def urlTolist(path):
    li=[]
    for pmd,dirs,files in os.walk(path):
        for i in files:
            i=path+'/'+i
            with open(i,'r') as f:
                for i in f.readlines():
                    url=i.strip().split()[0]
                    li.append(url)

    li = list(set(li))
    return li

#这里是扫描的域名保存的文件,我是以时间排序的
btime = 'zidata/'+str(datetime.date.today())
atime = 'zidata/'+str(getYesterday())

#读取文件中的列表
a=urlTolist(atime)
b=urlTolist(btime)

#返回新的域名信息
c=[x for x in b if x not in a]
print(len(c))

#如果有新域名信息,发给钉钉接口函数
if len(c):
    dingcall(len(c),c)

扫描域名

下载
FeeiCN/ESD
然后用系统命令调用此工具来进行扫描:

with open('url.txt','r') as f:
    for i in f.readlines():
        #print(i.strip())
        url=i.strip()
        dd='mkdir zidata/$(date +"%Y-%m-%d")'
        os.system(dd)
        aa='python subDomainsBrute.py %s -o zidata/$(date +"%%Y-%%m-%%d")/%s'%(url,url)
        os.system(aa)

以上代码扫描完不会超过6个小时,所以可以使用日期文件对比来发现新的域名信息

钉钉接口:

申请机器人api即可:


src域名监控实践_第1张图片
image.png

钉钉api接口目前需要一些sign和timestamp参数的验证


src域名监控实践_第2张图片
image.png

这里给出接口函数:

def dingcall(longs,data):
    timestamp = round(time.time() * 1000)
    secret = '你机器人的签名'
    secret_enc = secret.encode('utf-8')
    # 把timestamp+"\n"+密钥当做签名字符串
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    # 使用HmacSHA256算法计算签名
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    # 进行Base64 encode把签名参数再进行urlEncode
    sign = parse.quote(base64.b64encode(hmac_code))

    url = 'https://oapi.dingtalk.com/robot/send?access_token=你机器人的token×tamp=%s&sign=%s' \
              % (timestamp, sign)

    header = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
    }
    data1='共发现: %s \n'%longs
    for i in data:
        data1 = data1+str(i)+'\n'
    senddata = {
        "msgtype": "text",
        "at": {
            "isAtAll": True  # @全体成员(在此可设置@特定某人)
        },
        "text": {
            "content": data1  # 抓取数据发送的内容放到alldata
        }

    }

    res = requests.post(url,headers=header,json=senddata,verify=False)
    print(res.text)

填好配置之后,直接调用函数即可

部署时间

找一台服务器,然后可以看代码相应的部署
最好进行一天的测试,在进行每天定时启动脚本部署

nohup python3 urltiqu.py > 123.log 2>&1 &

钉钉测试:

只是测试


src域名监控实践_第3张图片

结尾

一定要动手去做,看过不一定就会了。借用某大神的话,看的多未必get到多,看的少未必就get到少。
比如编程语言,还有很多人在争论谁用的语言好,却很少人在研究编程范式,比如lisp编程。
这是不是变相的体现出我们急功近利的浮躁心态。

你可能感兴趣的:(src域名监控实践)