指纹识别技术
FB招聘站
分类阅读
专栏
公开课
FIT 2019
企业服务
用户服务
搜索
投稿
登录
注册
浅析国内指纹识别技术(附带小工具) 金乌实验室认证作者2017-03-27现金奖励共907330人围观 ,发现 30 个不明物体 WEB安全
*原创作者:北风飘然@金乌网络安全实验室,本文属FreeBuf原创奖励计划,未经许可禁止转载
前言
初学web安全的时候,找漏洞都是用北极熊扫描器扫出来的网站title来有目的性的‘刷’漏洞,后来随着网络主机的交替,ip的改变,北极熊扫出来的title也越来越不准确了。
大约在一月初开始打算扫全网的80端口,其中半个月时间调用了差不多7、8台服务器去扫描,扫了接近一半的中国ip段。但是发现结果不是特别满意,后来又在GitHub上找到了一个项目:
https://github.com/nanshihui/Scan-T
这个就很不错,可惜只是Django和Nmap结合起来,模仿了类似Shodan的东西,但是只有主机信息识别,也不是很满足。
构思
最近在构思一个想法,现有的扫描器像awvs,AppScan,Nessus等都是基于web爬虫,然后根据爬取的地址去扫描。这样会给网站造成很大的负担,并且容易触发防火墙,被限制拒绝访问。
但是现有的poc有很多,如果扫描器开始是基于web指纹识别,如果识别出web指纹,然后针对web框架使用poc去验证,反而效果会更好。
那么问题来了,怎么识别web指纹呢?
1. 基于web网站独有的favicon.ico的md5 比对网站类型;
2. 基于规则识别web站特征去识别;
3. 基于爬虫爬出来的网站目录比对web信息。
利弊
再说说这三种方法的利弊。
第一种速度最快,但也是最不准确的一种。因为大部分的favicon.ico都可以去更改,那么就会造成很大的误差。
1.png
第二种特征去识别可以寻找网站的css 、js代码的命名规则,也可以找关键字,以及head cookie等等,但是弊端是收集这些规则会耗费很久的时间。
2.png
第三种感觉准确性比较高,但是如果改了目录结构就会造成问题,而且一部分网站有反爬虫机制,会造成一些困扰。
总体来看,最好的是三种结合在一起。但是想做成轻量级的,于是选择了第二种。
分析
首先规则是个问题,但是国内与Shodan,钟馗之眼相同的搜索引擎就很开源的把规则放了出来。
3.png
然后用爬虫爬下来。
4.png
大概有1412中可识别出来的。
这样就简单了。
url = input('输入要识别的网址')
if url.startswith('http://'):
url = url
else:
url = 'http://'+url
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.0.1471.914 Safari/537.36'}
response = requests.get(url=url,headers=headers)
bresponse = BeautifulSoup(response.text,"lxml")
title = bresponse.findAll('title') #title
for i in title:
title = i.get_text()
head = response.headers
response = response.text
header = ''
for key in head.keys(): #将 header集合
header = header+key+':'+head[key]
print('收集主页信息完毕')
先把信息收集出来,分成title、body以及header。
body = {'content="WordPress':'WordPress','wp-includes':'WordPress',
'pma_password':'phpMyAdmin',
'AdaptCMS':'AdaptCMS',
'TUTUCMS':'tutucms','Powered by TUTUCMS':'tutucms',
'Powered by 1024 CMS':'1024 CMS','1024 CMS (c)':'1024 CMS',
'Publish By JCms2010':'捷点 JCMS',
'webEdition':'webEdition',
'Powered by phpshe':'phpshe','phpshe':'phpshe',
'/theme/2009/image&login.asp':'北京清科锐华CEMIS',
'css/25yi.css':'25yi','Powered by 25yi':'25yi',
'/bundles/oroui/':'oroCRM',
'Powered by SeaCms':'海洋CMS','seacms':'海洋CMS',
'/images/v7/cms.css':'qibosoft v7',
'opac_two':'北创图书检索系统',
'dayrui/statics':'dayrui系列CMS',
'upload/moban/images/style.css':'ASP168 欧虎','default.php?mod=article&do=detail&tid':'ASP168 欧虎',
'Powered by FineCMS':'FineCMS','dayrui@gmail.com':'FineCMS','FineCMS':'FineCMS',}
写一个rule的模块,里面分别把body、title、header以字典的形式分开来。
def scan_head():
headrule = rule.head
web_information = 0
for key in headrule.keys():
if '&' in key:
keys = re.split('&',key)
if re.search(keys[0],header,re.I) and re.search(keys[1],response,re.I) :
web_information = headrule[key]
break
else:
continue
else:
req = re.search(key,header,re.I)
if req:
web_information = headrule[key]
break
else:
continue
return web_information
比对关键字输出。
最后结果如下。
import requests
from bs4 import BeautifulSoup
import re
import rule
import sys
url = input('输入要识别的网址')
if url.startswith('http://'):
url = url
else:
url = 'http://'+url
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.0.1471.914 Safari/537.36'}
response = requests.get(url=url,headers=headers)
bresponse = BeautifulSoup(response.text,"lxml")
title = bresponse.findAll('title') #title
for i in title:
title = i.get_text()
head = response.headers
response = response.text
header = ''
for key in head.keys(): #将 header集合
header = header+key+':'+head[key]
print('收集主页信息完毕')
def scan_title():
titlerule = rule.title
web_information = 0
for key in titlerule.keys():
req = re.search(key,title,re.I)
if req:
web_information = titlerule[key]
break
else:
continue
return web_information
def scan_head():
headrule = rule.head
web_information = 0
for key in headrule.keys():
if '&' in key:
keys = re.split('&',key)
if re.search(keys[0],header,re.I) and re.search(keys[1],response,re.I) :
web_information = headrule[key]
break
else:
continue
else:
req = re.search(key,header,re.I)
if req:
web_information = headrule[key]
break
else:
continue
return web_information
def scan_body():
body = rule.body
web_information = 0
for key in body.keys():
if '&' in key:
keys = re.split('&',key)
if re.search(keys[0],response,re.I) and re.search(keys[1],response,re.I):
web_information = body[key]
break
else:
continue
else:
req = re.search(key,response,re.I)
if req:
web_information = body[key]
break
else:
continue
return web_information
def main():
web_information = scan_title()
if web_information == 0:
web_information = scan_head()
if web_information == 0:
web_information = scan_body()
if web_information == 0:
print('无能为力了')
sys.exit()
else:
print(web_information)
else:
print(web_information)
else:
print(web_information)
if __name__ == '__main__':
main()
规则如下
body = {'content="WordPress':'WordPress','wp-includes':'WordPress',
'pma_password':'phpMyAdmin',
'AdaptCMS':'AdaptCMS',
'TUTUCMS':'tutucms','Powered by TUTUCMS':'tutucms',
'Powered by 1024 CMS':'1024 CMS','1024 CMS (c)':'1024 CMS',
'Publish By JCms2010':'捷点 JCMS',
'webEdition':'webEdition',
'Powered by phpshe':'phpshe','phpshe':'phpshe',
'/theme/2009/image&login.asp':'北京清科锐华CEMIS',
'css/25yi.css':'25yi','Powered by 25yi':'25yi',
'/bundles/oroui/':'oroCRM',
'Powered by SeaCms':'海洋CMS','seacms':'海洋CMS',
'/images/v7/cms.css':'qibosoft v7',
'opac_two':'北创图书检索系统',
'dayrui/statics':'dayrui系列CMS',
'upload/moban/images/style.css':'ASP168 欧虎','default.php?mod=article&do=detail&tid':'ASP168 欧虎',
'Powered by FineCMS':'FineCMS','dayrui@gmail.com':'FineCMS','FineCMS':'FineCMS',
'ASPCMS':'ASPCMS',
'/index.php/clasify/showone/gtitle/':'O2OCMS',
'CmsEasy':'CmsEasy',
'damicms':'大米CMS','大米CMS':'大米CMS',
'/Include/EcsServerApi.js':'易创思ecs',
'Osclass':'Osclass',
'm_ctr32':'IdeaCMS','Powered By IdeaCMS':'IdeaCMS',
'bit-xxzs':'Bit','xmlpzs/webissue.asp':'Bit',
'/css/mymps.css':'mymps','mymps':'mymps',
'ycportal/webpublish':'全国烟草系统',
'bx_css_async':'Dolphin',
'/tpl/Home/weimeng/common/css/':'微门户',
'DianCMS_用户登陆引用':'易点CMS','DianCMS_SiteName':'易点CMS',
'r/cms/www':'unknown cms rcms',
'技术支持:云因信息':'yunyin','\
'':'大汉系统(Hanweb)','/jcms_files/jcms':'大汉系统(Hanweb)',
'bigSortProduct.asp?bigid':'北京阳光环球建站系统',
'content="NIUCMS':'niucms',
'index.php\?ac=link_more&index.php\?ac=news_list':'TCCMS', #未找到实例
'publico/template/&zonapie':'360webfacil 360WebManager','360WebManager Software':'360webfacil 360WebManager',
'labelOppInforStyle':'地平线CMS','search_result.aspx&frmsearch':'地平线CMS',
'FoxPHPScroll':'FoxPHP','FoxPHP_ImList':'FoxPHP','content="FoxPHP':'FoxPHP',
'var webroot=':'sdcms','/js/sdcms.js':'sdcms',
'/wcm/app/js':'TRS WCM','0;URL=/wcm':'TRS WCM','window.location.href = "//wcm";':'TRS WCM','forum\.trs\.com\.cn&wcm':'TRS WCM',
'/wcm" target="_blank':'TRS WCM','/wcm" target="_blank">管理':'TRS WCM',
'/templates/default/css/common.css&selectjobscategory':'74cms','Powered by =80);
123权重<=40(1条中靶)并且456权重<=50(总权重<=90),加入附选7(耗时判断,加入7后,权重>=80中靶);
大面积脱靶时(权重<50 OR 存在返回但无法判断),列举已发现信息供人工干预(手动决定是否进行耗时的爆破,或弃权)。 四、规则库归档方法: 服务类型 -> 环境类型(系统类型) -> CMS类型 -> 版本 -> 规则
比如:
webServer -> php -> wordpress -> 4.7.3 -> readme.html blablabla…
|———-> asp -> aspcms -> 2.x.x -> /asp_admin/install/install.lock blablabla…
Firewall -> linux -> Barracuda -> 5.x.x -> blablabla…
Camra -> busybox -> hikvision -> 3.x.x -> blablabla…
|——> busybox -> 360 -> 2.1.x -> blablabla…
规则收集和流程优化是最麻烦的……反正这个工具我是写不下去了,再说twoB小姐姐4月就上steam了。
项目什么的先荒废一哈,等刷完一周目再来写完吧……
人造人小姐姐!(╯‵□′)╯︵俺来啦!
亮了(4)
浅风飘雪 (1级) 2017-03-27回复
@ evil7 没有没有 我也没啥宏观理想 做着玩的 哥们你这个 感觉太沉重了 另外twoB小姐姐是什么啊 私信我带我开车
亮了(1)
yege0201 (3级) 2017-03-27回复
@ 浅风飘雪 尼尔:机械纪元的主角
亮了(0)
evil7 专栏作者(5级) 入梦落樱满熏香,梦醒犹记四月谎 2017-03-27回复
@ 浅风飘雪 尼尔小姐姐都不认识,兄弟得吊销驾照啊~
亮了(0)
pine (4级) 2017-03-27回复
@ evil7 好车
亮了(1)
qiudai 2017-03-28回复
@ 浅风飘雪 steam求带,发链接加个友谊吧
亮了(1)
pine (4级) 2017-03-28回复
@ qiudai 其实steam我就玩个饥荒 哈哈 别的加友谊还行
亮了(0)
the other 2017-03-27回复 8楼
漏了一种情况,
没favicon.ico标签时,浏览器默认寻找跟目录下的favicon.ico
例如apple.com
亮了(1)
Mxhacks (2级) 2017-03-27回复 9楼
git地址呢
亮了(1)
土豆 2017-03-27回复 10楼
全网ip扫描,默认端口以及全端口服务识别,获取网页标题,网页底部文字,网页关键字,入库分类,再去exp轮奸web,批量get/post注入,top2000端口字典爆破,自动提权。仅供参考。
亮了(1)
pine (4级) 2017-03-28回复
@ 土豆 可以的 扫描的脚本我都已经写好了
亮了(0)
土豆 2017-03-28回复
@ pine 加Q1307822230
亮了(1)
pine (4级) 2017-03-28回复
@ 土豆 干嘛==
亮了(0)
陆小凤传奇 2017-03-28回复
@ 土豆 该项目已完成
亮了(0)
jin16879 (3级) 2017-03-28回复 11楼
表示看不懂
亮了(0)
fofa 2017-03-28回复 12楼
全是fofa的规则,完全不提fofa,这样好吗?
亮了(0)
pine (4级) 2017-03-28回复
@ fofa 啊没提么 不好意思 微博私信过赵武大大了 github上也声明了~~~
亮了(0)
test 2017-03-28回复
@ pine github地址能发出来嘛,我想看下,谢谢。
亮了(0)
pine (4级) 2017-03-29回复
@ test https://github.com/cuijianxiong/cmscan
亮了(0)
skyer 2017-03-28回复 13楼
"首先规则是个问题,但是国内与Shodan,钟馗之眼相同的搜索引擎就很开源的把规则放了出来。"
然后下面放的爬虫的图是爬的fofa的规则吧,这样好吗
亮了(1)
nancyy (1级) 2017-03-29回复 14楼
https://github.com/nanshihui/Scan-T 只是开源了 扫描的框架,具体的指纹模型和攻击模型,还未公开, 你从截图就可以看得出来,只有nmap 是根本达不到截图中的效果
亮了(1)
生活的屁 2017-03-30回复 15楼
默默地问小工具在哪里啊
亮了(0)
天明二号 (2级) 2017-04-14回复 16楼
同问
亮了(1)
昵称
请输入昵称
必须您当前尚未登录。登陆?注册邮箱
请输入邮箱地址
必须(保密)表情插图
有人回复时邮件通知我
金乌实验室
金乌实验室认证作者
金乌网络安全实验室官方账号
6
文章数
0
评论数
最近文章
通过结构化异常处理绕过CFG
2017.04.06
浅析国内指纹识别技术(附带小工具)
2017.03.27
隐私泄露:查开房网站的背后
2017.03.07
浏览更多
相关阅读
CERT发布Linux安全工具Triage Tools 1.0浅析国内指纹识别技术(附带小工具)
基于机器学习的WebShell检测方法与实现(上)真实网站劫持案例分析如何攻击WEB应用程序(连载一)
特别推荐
关注我们 分享每日精选文章
活动预告
11月
FreeBuf精品公开课·双11学习狂欢节 | 给努力的你打打气
已结束
10月
【16课时-连载中】挖掘CVE不是梦(系列课程2)
已结束
10月
【首节课仅需1元】挖掘CVE不是梦
已结束
9月
【已结束】自炼神兵之自动化批量刷SRC
已结束
FREEBUF免责声明协议条款关于我们加入我们广告及服务寻求报道广告合作联系我们友情链接关注我们
官方微信
新浪微博腾讯微博Twitter赞助商
Copyright © 2018 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号
css.php0daybank
文章评论