漫画最开始的时候,孙悟空一个人待在水帘洞里,他不知道自己在等谁,也不知道等了多久,唐三藏走进水帘洞说,是你呼唤我么?孙悟空说我没有呼唤谁啊。唐三藏沉默了很久说,那你跟我走吧。然后他拉了孙悟空的手,孙悟空就跟他走了。在那个故事里,唐三藏是个使左轮枪的大帅哥而孙悟空是个傻猴子。这个世界上有很多种猴子,有的猴子被唐三藏从水帘洞里领出来之后,就变成聪明猴子了,翻着跟头就跑掉了,而有的猴子就只会跟着唐三藏走。我就是后面那种猴子,我在水帘洞里待的太久了,待傻了。
全文约7.5K字,大致阅读完约10分钟,包含主要知识点:CMS概述与识别的意义、根据页面内容识别CMS类型、根据请求头内容识别CMS类型、根据robots.txt文件识别CMS类型、根据网站文件md5值识别CMS类型、根据指定网页内容识别CMS类型、Python识别CMS代码工程设计实现与拓展、其中关键部位文字使用橙色重点标注,网址使用绿色重点标注,代码以及相关指纹库下载链接在文末。
目录:
-
CMS概述与识别的意义
-
根据页面内容识别CMS类型
-
根据请求头内容识别CMS类型
-
根据robots.txt文件识别CMS类型
-
根据网站文件md5值识别CMS类型
-
根据指定网页内容识别CMS类型
-
Python识别CMS代码工程设计实现与拓展
-
指纹库获取
附言:
最近相关开发文章都需要具有一定的python基础,但是许多朋友没有接触学习过,所以许多地方会觉得这讲的什么鸟玩意儿,其实这种情况是我很不想的。后面时间主要应用于视频课程的录制,从最基础的开始教学到后面完整的开发课程,一步一步的学习,并且将所学内容的功能写成相关工具,现学现用加强理解。其中也有一些个人原因,由于没有录制的经验,会经常笑场导致录制失败….
CMS概述与识别的意义
CMS是Content Management System的缩写,意为"内容管理系统"。可以简单理解为网站的模板,从零开始开发一个完整的网站系统需要大量的时间和人力成本,如果使用现成的模板套用则能节约大量的开发成本和人力资源。因此网络上有大量优秀的CMS模板提供选择使用:
优点:
-
节约开发成本,人力资源
-
快速上线整个网站系统
-
自带多样优秀丰富的插件功能,后台管理系统,提供不同风格的界面
-
简单易上手,能快速搭建网站
缺点:
-
安全性较低,因为使用的统一的模板,如果爆出该相关漏洞,那么你的网站也很可能被入侵
-
使用不当可能会造成版权问题
-
使用模板的话,网站的结构重复度太高,不利于搜索引擎优化
回归到本文的主旨,在渗透测试中检测目标网址是否基于CMS模板开发,判断使用的CMS类型是非常重要的一步,可以查找网上已曝光的CMS程序漏洞,运气好能一步到位拿到权限,如果该CMS系统开源,还能下载相对应的源码进行代码审计。
根据个人经验,总结一下识别网站CMS类型的五种方法,本质上都是根据网页内容或者网页文件的特征进行识别。只是根据不同类型的网页大概分成五类,方便理解和阅读,至于在网上找到在线识别CMS网站的接口然后加到爬虫中,省时省力却不在本文的讨论范围之内,当然会在以后视频课程的爬虫专栏会专门讲。
根据页面内容识别CMS类型
许多CMS系统会在网站的首页加上一些象征该CMS的关键词,举个例子,WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设自己的网站,如果使用该程序搭建网站,会在该网站的首页出现关键词。下图目标网址案例就是使用WordPress搭建:
我们策略判断该网址是使用WordPress系统搭建的,这样我们识别出来后,就继续确认该网站使用Wordpress的版本号,然后搜索该版本是否出现过相关漏洞,方便下一步渗透测试工作的进行。
那么只需要准备一个指纹库,然后访问目标网站后,对照指纹库的内容,如果命中关键词,则直接判断该网址的CMS类型。
指纹库文件需要不断地收集更新整理,本文中整理好的指纹库获取方式放在文末自取。
如果使用代码实现,粗略的大体结构大概就是如下设计:
# -*- coding:utf-8 -*-
import requests
body = {
'content="WordPress':'WordPress',
'wp-includes':'WordPress',
'pma_password':'phpMyAdmin',
'hexo':'hexo',
}
def CheckCmsFromBody(url):
try:
r = requests.get(url)
encoding = requests.utils.get_encodings_from_content(r.text)[0]
url_content = r.content.decode(encoding, 'replace')
for k,v in body.items():
if k in url_content:
print('目标网址:{} 识别CMS为:{}'.format(url,v))
except Exception as e:
print(e)
url = 'http://www.langzi.fun'
CheckCmsFromBody(url)
代码粗略功能就是获取首页的内容,然后从指纹库寻找是否出现关键词判定CMS类型。
根据请求头内容识别CMS类型
除了上文中从网页内容识别CMS类型,还可以从请求头消息中获取相关信息,某些CMS系统返回的请求头信息中也会添加独特的特征码。如下图目标网站就是使用PowerEasy(动易系统)搭建的网站,可以直接从请求头中获取到特征码,从而判断出使用CMS的类型。
所以在渗透测试的信息收集中,对任何地方都不要放过呀~细心谨慎才能挖到更多的信息。
这个使用代码