暗链扫描工具分析

Posted 春告鳥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暗链扫描工具分析相关的知识,希望对你有一定的参考价值。

因为有的网站被攻击之后会被攻击者悄悄挂上暗链,用来提升恶意网站的搜索权重排名,突发奇想看一下暗链扫描工具是咋做的,去github上翻了一下,这次分析Libra

项目地址:https://github.com/rabbitmask/Libra

项目功能:网站篡改、暗链、死链监测平台

这里我们只分析暗链检测

使用

因为这里我想要测试暗链检测的功能,随便找一个18禁网址进行暗链检测

python3 Libra.py -u http://*******

运行结束后就会输出一份报告,并且列出具体结果

实际在运行过程中会有一些问题,我自行在代码里进行了部分修改

原理

暗链检测原理很清晰:

  • 输入待检测网址
  • 获取该网址内的所有URL
  • 获取这些URL的源代码
  • 检测源代码中是否存在暗链关键字
  • 保存结果

下面对每一步进行阐述

输入待检测网址

这里使用argparse库来获取解析用户的输入参数,可以形成我们常见的命令行效果

如果我们输入--help参数就能够查看到使用用法

源代码如下

parser = argparse.ArgumentParser()


parser.add_argument("-u", dest=\'url\',help="The Target Url")

parser.add_argument("-m", dest=\'monitor\',help="Monitor The Target Url")

parser.add_argument("-f", dest=\'file\',help="The List Of Target Urls")

args = parser.parse_args()

看代码可以知道我们 -u 的时候就是输入待检测网址

获取该网址内的所有URL

跟进代码在crawler_api方法里面能够获取网址内的所有URL,这里的方式是通过re.compile直接匹配正则

def crawler_api(url):
    if isinstance(url, str):
        out_link=[]
        in_link=[]
        html=GetData(url)[1]
        href = re.compile(\'href="(.*?)"\')
        src = re.compile(\'src="(.*?)"\')
        res_href = href.findall(html)
        res_src = src.findall(html)
        res_html = res_href+res_src
        in_link.append(url)
        for i in res_html:
            file_ok=True
            for j in file_type_black:
                if j in i:
                    file_ok = False
                    break
            if file_ok and len(i)>0:
                # print(i)
                if i[:4] == \'http\':
                    out_link.append(i)
                else:
                    if i[0]==\'/\':
                        in_link.append(url+i)
                    else:
                        in_link.append(url+\'/\'+ i)

        res=[]
        for i in list(set(out_link+in_link)):
            tmp=[]
            tmp.append(i)
            tmp.append(url)
            res.append(tmp)
        return res

获取这些URL的源代码

在getData方法中获取源代码

def GetData(url):
    try:
        r = requests.get(url, headers=headers, timeout=5)
        r.encoding = \'utf-8\'
        return r.status_code,r.text
    except(requests.exceptions.ReadTimeout,requests.exceptions.ConnectTimeout,requests.exceptions.ConnectionError):
        return \'Timeout\',\'Timeout\'

检测源代码中是否存在暗链关键字

在hlfind方法中检测是否存在暗链关键字

def hlfind(res):
    rules = []
    host = True
    re_rules_list = get_re()
    for re_rules in re_rules_list:
        result = re.findall(r\'\'.format(re_rules[0]), res, re.S)
        if result != []:
            rules.append(re_rules[0])
            host = False
    if host == False:
        return rules
    else:
        pass

保存结果

通过libra_log方法保存检测后的数据

def libra_log(url,master,res_comparer,res_hlfind,res_diedlink,filename):

    if res_comparer or res_hlfind or res_diedlink != 200:
        fw = open(filename, \'a\',encoding="utf-8")

        fw.write(\'### \'+url+\' `\'+str(res_diedlink)+\'` \'+\'\\n\')
        fw.write(\'* Master: `\'+master+\'`\\n\')
        fw.write(\'* Time: `\'+ getDate()+\'`\\n\')
        fw.write(\'```\\n\')

        if res_comparer:
            fw.write(\'========================篡改监测===============================\\n\')
            if push_token:
                push(master, "篡改监测", getDate())
            for i in res_comparer:
                if i[0]==\'+\' or i[0]== \'-\' or i[0] ==\'?\':
                    fw.write(i+\'\\n\')
        if res_hlfind:
            fw.write(\'========================暗链监测===============================\\n\')
            if push_token:
                push(master, "暗链监测", getDate())
            for i in res_hlfind:
                fw.write(i+\'\\n\')
        if res_diedlink != 200:
            fw.write(\'========================死链监测===============================\\n\')
            if push_token:
                push(master, "死链监测", getDate())
            fw.write(url+\' \'+str(res_diedlink)+\'\\n\')
        fw.write(\'==============================================================\\n\')
        fw.write(\'```\\n\\n\')

        fw.close()

总结

代码整体的流程很清晰,但URL提取和关键字列表还有待维护,通过修改数据库中的关键字列表来进行优化即可

本来想自己写一个插件的,逻辑比较简单就算了

END

建了一个微信的安全交流群,欢迎添加我微信备注进群,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注

以上是关于暗链扫描工具分析的主要内容,如果未能解决你的问题,请参考以下文章

警惕!国内已有5000余个网站中招!关于一种大规模的暗链劫持流量的风险提示

警惕!国内已有5000余个网站中招!关于一种大规模的暗链劫持流量的风险提示

墨者靶场(综合)

墨者靶场(综合)

Python处理正则表达式超时的办法

黑帽SEO手法