信息收集—架构、搭建、WAF等
知识点
在安全测试中,信息收集是非常重要的一个环节,此环节的信息将影响到后续的成功几率,掌握信息的多少将决定发现漏洞机会大小,换言之决定着是否能完成目标的测试任务。
CMS识别技术
概念
CMS指Content Management System,即内容管理系统,是一种用于管理网站内容的软件工具。而CMS识别技术则是通过对网站页面进行分析,自动提取其中的数据信息,并根据预设规则将其归类整理。
该技术在自媒体上的应用
1.内容采集:CMS识别技术可以帮助自媒体从海量信息中快速准确地找到需要的内容,并进行采集整合。
2.内容分类:通过对采集到的内容进行分类整理,可以让自媒体更好地管理和利用这些信息资源。
3.内容推荐:CMS识别技术可以根据用户的浏览行为和兴趣偏好,为其推荐相关内容,提高用户粘性和体验。
4.内容分析:通过对采集到的数据进行分析,可以为自媒体提供更多的决策支持和业务发展方向。
站点搭建分析
搭建习惯-目录型站点
同一网站下的目录和二级目录是两个完全不同的网站,则这两个网站是同一服务器上的不同目标,一个有漏洞,另一个也会遭殃。
搭建习惯-端口类站点
同一IP下不同的端口是完全不同的网站,则这两个网站是同一服务器上的不同目标,一个有漏洞,另一个也会遭殃。
搭建习惯-子域名站点
同一域名下不同的子域名是完全不同的网站时,如果它们在同一IP上,那么这两个网站是同一服务器上的不同目标,一个有漏洞,另一个也会遭殃;如果它们在同一网段,那么它们的安全有一定相关性。
搭建习惯-类似域名站点
有些企业和组织可能有不止一个域名,这些域名同属于一个业务网,它们的安全有一定相关性。
同属一家公司的域名一般有相关性,可能中间不同,可能后缀不同。可以尝试爆破一下。
非法类网站可能多个域名对应的同一套源码,使用该方法意义不大。
搭建习惯-旁注,C段站点
旁注:同服务器不同网站。当对方是多站点服务器时,可以通过搞定同服务器的另一个网站,跳转回测试网站
C段:不同服务器不同网站,通过搞定同网段的其他网站,通过内网到达测试网站
搭建习惯-搭建软件特征站点
很多人使用搭建软件(如:宝塔、phpstudy)来搭建网站
搭建软件可以从响应标头看出,其server项会有很具体的数据回显,可以凭经验推测搭建平台。搭建软件会有默认账号密码和默认界面,可以尝试从这些角度攻击
WAF防护分析
什么是WAF应用?
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
如何快速识别WAF?
工具:wafw00f
链接: 工具
响应标头:X-Powered-By:WAF
识别WAF对于安全测试的意义?
-
若目标网站使用了WAF,而渗透者在没有识别的状态下直接使用工具进行扫描,有可能会导致WAF将IP地址拉入黑名单而不能访问。识别WAF在于有针对性地绕过。不同WAF存在不同的绕过思路。
-
知道对方有waf后,可以判断产商尝试绕过知道对方有waf后,不要直接用扫描工具扫描,容易被禁ip。
信息收集-app及其他资产
在安全测试中,若WEB无法取得进展或无WEB的情况下,我们需要借助app或其他资产在进行信息收集,从而开展后续渗透,那么其中的信息收集就尤为重要。
app提取一键反编译
漏了个大洞使用方法
点开result,然后找到反编译的那个APP,里面的文件都是需要一些java代码基础的才能看懂,这里就不去过多的解释;
这些是从apk中提取出来的url地址,可以通过这几种网站进行安全测试;
把apk放到“apk数据提取/apps”目录下,运行apkAnalyser.exe自动提取
“apk数据提取/result/(与apk同名)/files”下是反编译文件
“apk数据提取/result/(与apk同名)”下的其他文件是从apk提取出来的数据
渗透思路总结
用什么→找什么→找到后怎么做
渗透思路Tips
- 信息收集时,注意做笔记
- 搜索域名相关的信息时去掉www,能搜索到更多信息
- 阿里云有的网站打不开,可能是阿里云把你屏蔽了
- 查看网站,查看源码、标头、网站各处
- 正常收集信息记得使用一切可用的工具
- 搜索引擎可能搜到之前地址的缓存,得到原始地址
- 域名里面找问题,备案里面查问题
信息收集-资产监控拓展
Github监控
常见的方法和工具
-
使用Github提供的Webhooks功能:Github的Webhooks功能允许您将实时事件通知发送到外部应用程序。通过设置Webhooks,可以接收到关于仓库的各种事件,如push、pull request、issue等的更新通知。可以编写一个接收这些事件的服务器端应用程序,并将其与Webhooks绑定起来,以获得实时通知。
-
使用第三方工具:有一些第三方工具专门用于监控Github仓库的更新。其中一种称为"Github Watcher",它可以监控仓库的提交、分支和标签的变化,并通过电子邮件或Slack等方式通知您。可以在Github Marketplace上找到和评估其他类似工具,以选择适合您需求的监控工具。
-
轮询检查更新:可以编写一个定时任务来轮询检查Github仓库的更新情况。可以使用Github的API来获取相关信息,比如获取最新的commit、pull request和issue等。然后,可以编写脚本来定期运行这个任务,并在检测到更新时进行相应的处理。
GitHub是搞计算机使用较多的平台,有很多项目,我们监控他可以:
便于收集整理最新exp或poc(POC全称是Proof of Concept,中文译作概念验证。它是专门为了验证漏洞是否真的存在的脚本。而EXP全称是Exploit,中文译作漏洞利用程序。它是对POC验证结果的一种漏洞利用脚本。)
便于发现相关测试目标的资产
监控最新的EXP及其发布(地址:使用地址)
使用代码,有几个python库需要自己安装一下;
# Title: wechat push CVE-2020
# Date: 2020-5-9
# Exploit Author: weixiao9188
# Version: 4.0
# Tested on: Linux,windows
# cd /root/sh/git/ && nohup python3 /root/sh/git/git.py &
# coding:UTF-8
import requests
import json
import time
import os
import pandas as pd
time_sleep = 60 # 每隔 20 秒爬取一次
while (True):
headers1 = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"}
# 判断文件是否存在
datas = []
response1 = None
response2 = None
if os.path.exists("olddata.csv"):
# 如果文件存在则每次爬取 10 个
df = pd.read_csv("olddata.csv", header=None)
datas = df.where(df.notnull(), None).values.tolist()
# 将提取出来的数据中的 nan 转化为 None
requests.packages.urllib3.disable_warnings()
response1 = requests.get(url="https://api.github.com/search/repositories?q=CVE-2020&sort=updated&perpage = 10",headers=headers1,verify=False)
response2 =requests.get(url="https://api.github.com/search/repositories?q=RCE&ssort=updated&per_page=10", headers = headers1, verify = False)
else:
# 不存在爬取全部
datas = []
requests.packages.urllib3.disable_warnings()
response1 = requests.get(url="https://api.github.com/search/repositories?q=CVE-2020&sort=updated&order=desc",headers=headers1, verify=False)
response2 =requests.get(url="https://api.github.com/search/repositories?q=ctcms&ssort=updated&order=desc", headers=headers1,verify=False)
data1 = json.loads(response1.text)
data2 = json.loads(response2.text)
for j in [data1['items'], data2['items']]:
for i in j:
s = {"name": i['name'], "html": i['html_url'], "description": i['description']}
s1 = [i['name'], i['html_url'], i['description']]
if s1 not in datas:
# print(s1)
# print(datas)
params = {
"text": s["name"],
"desp": "链接:" + str(s["html"]) + "\n简介" + str(s["description"])
}
print("当前推送为" + str(s) + "\n")
# print(params)
requests.packages.urllib3.disable_warnings()
requests.get("https://sct.ftqq.com/SendKeySCT70049T99iUjjK1W7SP73HNAz1vbgNd.send", params=params, headers=headers1, timeout=10, verify=False)
time.sleep(1)
# 以防推送太快
print("推送成功!\n")
datas.append(s1)
else:
pass
print("数据已经存在!")
pd.DataFrame(datas).to_csv("olddata.csv", header=Nonne, Index=None)
time.sleep(time_sleep)
各种子域名查询
- 通过DNS解析记录
看域名上曾经有哪些东西被解析过。
2.通过HTTPS证书日志搜集
通过证书也可以查到域名信息;
3.通过搜索引擎
比如谷歌、百度这种正经点的搜索网站,或者使用fofa、shodan、zoomeye等这些黑暗引擎来查询一些信息;
4.枚举
就是采用暴力破解,关键是字典、速度—多线程、dns服务器选择;
5.利用漏洞
不常使用,讲解较少;
6.从主站爬取
在一些网站的下面会有一些导航,这个导航可能会把一些网站的子域名导航出来;