暗链扫描工具分析

因为有的网站被攻击之后会被攻击者悄悄挂上暗链,用来提升恶意网站的搜索权重排名,突发奇想看一下暗链扫描工具是咋做的,去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

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

GIF GIF

__EOF__

本文作者春告鳥
本文链接https://www.cnblogs.com/Cl0ud/p/17052698.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   春告鳥  阅读(3575)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2022-01-14 VScode配置markdown自定义代码模板
2022-01-14 CodeQL简介及其windows下环境安装
2020-01-14 [BUUCTF 2018]Online Tool
点击右上角即可分享
微信分享提示