挖src实用脚本开发(一)

发布于:2025-03-02 ⋅ 阅读:(101) ⋅ 点赞:(0)


后续完成的工具可能会放在github。文章里面只有功能代码块。

前言

*.example.com

在挖src时,通常会给一个这样的范围或者域名,当我们去手动进行收集时,效率会非常低,这个时候就需要用一些工具,但是网上的工具哪里有自己写的工具好用。

一个简单的edu案例:(我也不知道这么放出来好不好,有问题后面就把图片去掉)
在这里插入图片描述

收集子域名

给我们一个目标 www.example.com,我们需要得到mail.example.com, abc.example.com

技术实现:

1.采用在线网站,这里以https://site.ip138.com/为例,为了更全面也可以多集成几个,然后去重。
2.如果是写fofa这种比较全面的资产测绘平台,建议使用爆破子域名的方式。

这里将收集到的结果放在文本中。(可以根据自己需要修改)
代码实现:

import requests
from bs4 import BeautifulSoup
from prettytable import PrettyTable


def site(domain):
    headers = {
        "Cookie": "__gads=ID=341ce4d90ad15de9:T=1727342274:RT=1727342274:S=ALNI_MYyituak7mQVy6rswygYoyMCqBFeA; __gpi=UID=00000f1e9b049d99:T=1727342274:RT=1727342274:S=ALNI_MZgsPtW0u85I_zJsm30TXyW4WD2ag; __eoi=ID=32b768449d90dbfc:T=1727342274:RT=1727342274:S=AA-AfjaZV1U_VQk4HXhhosSZCFuP; Hm_lvt_6915b6622e4edeaddff40e931334c732=1727342051,1729512851,1729730903; Hm_lvt_aac43b0aec3a1123494f170e0aec4778=1731323025; HMACCOUNT=D9442D93D50467BB; Hm_lvt_ecdd6f3afaa488ece3938bcdbb89e8da=1731323263; Hm_lpvt_ecdd6f3afaa488ece3938bcdbb89e8da=1731323263; HMACCOUNT=D9442D93D50467BB; PHPSESSID=tf9nmnfdgeivisl1pm6vllu1v6; tfstk=fGR-T3XsRmmo274YHJMcx0bd0L0mmBLrq38_tMjudnKvSeJl-e9kRs_CP9OlZUxAdhxNVHLEzwsBAHIHExcMzU5FOcfKsfYzHS6sG3F5AsgC7N2W_-TSXU5FOm0SdOtDzh_Ljy0ROqCf-Nz5OMwSkt_Pc7_QNwZjki7COJ_7FS_f7Ne7VH1IkEsVRvUuyM45vWpHI_7M9v4g9WdAkDSyy-VhkCQReGT5hWNQ5aBRfUsxbA09btTFpBzU9gTWQH76VuiGUe9vDaCKi816kptOuQGg2ZJklFjXWyPeP_p96_9-0-5k2I1XNdUQOECR49QA3unAfQ8X_s6m1VLXg3YyMe4IOZxGcUR59fgNw_s5MZRn07sphpOlU6rSjT8BHnQR1g7vsCLJtljO-8gxkJyFFZumPCXiSVTzKZIio-2ULtbVkG0xkJyFFZ7Ajqc0LJWcu; BAIDU_SSP_lcr=https://cn.bing.com/; Hm_lpvt_aac43b0aec3a1123494f170e0aec4778=1731337977",
        "Sec-Ch-Ua": '"Chromium";v="130", "Microsoft Edge";v="130", "Not?A_Brand";v="99"',
        "Sec-Ch-Ua-Mobile": "?0",
        "Sec-Ch-Ua-Platform": '"Windows"',
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "Sec-Fetch-Site": "same-origin",
        "Sec-Fetch-Mode": "navigate",
        "Sec-Fetch-User": "?1",
        "Sec-Fetch-Dest": "document",
        "Referer": "https://site.ip138.com/",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
        "Priority": "u=0, i",
        "Connection": "close"
    }
    #子域名:
    urldomain = f"https://site.ip138.com/{domain}/domain.htm"
    responsedomain = requests.get(urldomain, headers=headers)
    if responsedomain.status_code == 200:
        soup = BeautifulSoup(responsedomain.text, 'html.parser')
        domain_section = soup.find(id='J_subdomain')
        #print(domain_section)
        if domain_section:
            tabledomain = PrettyTable(['序号','子域名'])
            domain = domain_section.find_all('p')
            with open('srcTargrt.txt','a') as file:
                for i in domain:
                    file.write(i.text.strip()+'\n')
                    #print(i.text.strip())

if __name__ == '__main__':
    site("www.wtu.edu.cn")

在这里插入图片描述

网站标题获取,以及能否访问

当我们获取到这么多子域名,同样还是需要一个一个测,这个时候我们就需要大致分析一下,哪些是可以访问的,大致内容是什么,于是我们写一个python获取每个标题是什么,然后根据我们测试的经验,判断哪些内容容易存在漏洞就去对应页面找,然后再去测其它漏洞,这样的效率会高不少

import chardet
import requests
import re
from openpyxl import load_workbook

def title(scan_url_port):
    try:
        # 请求网页
        r = requests.get(scan_url_port, timeout=10)
        # 检测页面编码
        r_detectencode = chardet.detect(r.content)
        actual_encode = r_detectencode['encoding']
        # 使用正则表达式提取<title>标签内容
        response = re.findall(b'<title>(.*?)</title>', r.content, re.S)
        # 如果没有找到<title>,则打印消息
        if not response:
            print('[*] Website: ' + scan_url_port + '\t\t' + '\n')
        else:
            # 如果找到了<title>标签的内容,进行解码
            res = response[0].decode(actual_encode)  # 先解码为字符串
            banner = r.headers.get('server', 'Unknown')  # 防止 'server' 头缺失,web服务器信息
            code = str(r.status_code)
            #print('[*] Website: (url:)' + scan_url_port + '\t\t(banner)' + banner + '\t\t' + 'Title: ' + res +'\t\t' + "code: " + code +'\n')
            wb = load_workbook('output.xlsx')
            ws = wb.active
            last_row = ws.max_row
            if last_row==1:
                ws.cell(row=last_row, column=1, value="url")
                ws.cell(row=last_row, column=2, value="banner")
                ws.cell(row=last_row, column=3, value="title")
                ws.cell(row=last_row, column=4, value="code")
            ws.cell(row=last_row + 1, column=1, value=scan_url_port)
            ws.cell(row=last_row + 1, column=2, value=banner)
            ws.cell(row=last_row + 1, column=3, value=res)
            ws.cell(row=last_row + 1, column=4, value=code)
            wb.save("output.xlsx")
    except Exception as e:
        # 捕获并打印异常
        print(f"Error: {e}")

def get_target():
    with open('srcTargrt.txt','r') as file:
        for line in file:
            line = line.strip()
            if line:
                title("http://"+line)

#title("http://www.wtu.edu.cn")
get_target()

这段代码是获取刚刚的IP,然后访问,并且记录下页面的title,code,banner。
会生成一个xlxs文件,如:
在这里插入图片描述

当然这些是不够的,但是你再挖src时,如果将补天上的目标丢入,你可以得到这么多扩展目标,比你手测速度快多了。

目前在做漏扫工具,src工具后续还会将会加入cms识别,漏扫探测等。欢迎提出建议和交流。