安全编程|判断目标是否使用CDN脚本编写

安全编程|判断目标是否使用CDN脚本编写_第1张图片

01前言

现在很多大网站基本上都使用了CDN进行加速访问,方便快速响应用户的请求,提高用户访问体验。这种做法对于我们日常的渗透测试来说,CDN的虚假IP确实很干扰我们的测试。所以判断出是否使用CDN对我们来说至关重要。

02基本原理

根据 CDN 的工作原理,如果网站使用了 CDN,那么从全国各地访问网站的 IP 地址是各个 CDN 节点的 IP 地址。在互联网上有许多网站提供 PING 命令的服 务,即从该网站全国各地的节点向目标网站发送 PING 命令,返回目标网站接收 数据包的 IP 地址、IP 归属地和响应时间等信息。以https://www.wepcc.com/为例,如图所 示,对 https://www.baidu.com 进行 PING 命令测试,根据 IP 地址和归属地不同, 可以判断 https://www.baidu.com 使用了 CDN。为了防止信息泄露,将部分 IP 和 归属地信息隐去:
安全编程|判断目标是否使用CDN脚本编写_第2张图片

03脚本程序设计

根据基本原理对脚本程序的设计流程图如下:
安全编程|判断目标是否使用CDN脚本编写_第3张图片

04脚本程序实现

根据程序流程图,实现其程序。如下:

def iscdn(url):
    """
    判断目标url是否存在CDN
    :param url: 目标url
    :return: True or False
    """
    result = []
    headers = get_ua()
    # wepcc.com用于ping测试的服务器id编号
    for i in (34,15,27,1,32,8,21,14,28,7,17,19,4,31,25):
        data = {'node':i,'host':url}
        r = requests.post('https://www.wepcc.com/check-ping.html',headers = headers,data=data)
        l = re.findall(r'\d+.\d+.\d+.\d+', r.text)
        result.append(l[0])
    if len(set(result)) > 1:
        return True
    else:
        return False

其中get_ua()实现请求头的随机配置,实现如下:

from fake_useragent import UserAgent

HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'User-Agent': "",
    'Referer': "",
    'X-Forwarded-For': "",
    'X-Real-IP': "",
    'Connection': 'keep-alive',
}

#产生随机的hearder的部分随机参数值
def get_ua():
    ua = UserAgent()
    key = random.random() * 20
    #产生随机0—好么20位子字符串
    referer = ''.join([random.choice(string.ascii_letters + string.digits) for _ in range(int(key))])
    referer = 'www.' + referer.lower() + '.com'
    ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
    HEADERS["User-Agent"] = ua.random
    HEADERS["Referer"] = referer
    HEADERS["X-Forwarded-For"] = HEADERS["X-Real-IP"] = ip
    return HEADERS

05脚本结果演示

测试站点:

①百度:www.baidu.com 使用了CDN

②我的博客:www.saodi.best 未使用CDN

测试结果:

安全编程|判断目标是否使用CDN脚本编写_第4张图片
安全编程|判断目标是否使用CDN脚本编写_第5张图片

你可能感兴趣的:(安全编程)