漏洞感知
漏洞分析
漏洞响应
漏洞沉淀
纵深防御
建立企业专属有效的扫描体系
每个web漏洞都有自己的常见签名特征,可以通过对web应用发起http(s)请求的方式,通过其响应
结果进行判断。
线上监控:对于已有漏洞的反复监控
线上预警:对于0Day漏洞的快速检测
检测一个web漏洞主要思考两部分,即http(s)的请求,和对其响应结果的识别
pyQt
QtWebket
Ghost.py
url产生的标签
标签 | 属性 |
---|---|
a,link | href |
script,img | src |
form | action |
object | archive,codebase,data,usemap |
识别超链接
例子 | 解决办法 |
---|---|
https://www.chaojilaji.cn/ | 直接获取 |
//www.chaojilaji.cn/ | 获取后添加协议 |
index.html | 相对路径,获取’该页面’的前缀 |
#top | 锚点,可不管 |
http认证方式:除常见的对参数进行验签,调用方添加Nonce随机值之外;还可以让被调用方生成nonce给
调用方。
爬虫在遇到set-cookie字段的时候需要处理cookie
爬虫策略
名称 | 算法表现 | 缺点 |
---|---|---|
广度优先策略 | 逐层爬取 | 上一层的全部被爬取才能爬取下一层 |
深度优先策略 | 垂直爬取 | 递归爬取,速度慢 |
最佳优先策略 | 改进版逐层爬取 | 网页分析算法比较复杂,不好评价 |
页面跳转
类型 | 表现形式 |
---|---|
客户端跳转 | 301跳转(代表永久移除),302跳转(临时性跳转) |
服务端跳转 | 用户无感知 |
识别错误页面:400+,500+;错误页面一般返回的状态码为301/302/404等
区分url的意义,去重:使用布隆过滤器或哈希表去重。因为漏洞检测主要是针对链接和参数,参数的
取值是没有意义的,所以在有参数的情况下,可以抹去参数的值然后进行存储或者hash运算。
页面相似算法
算法名 | 实现细节 | 缺点 |
---|---|---|
编辑距离 | 由一个串转成另一个串所需的最少编辑次数(支持替换插入删除) | 暂无 |
simhash | 为每个文档创建64位的字节指纹,算海明距离是不是小于3(即异或后算1的个数) | 暂无 |
区别出静态资源文件:rar/zip/ttf/png/gif
对一个url进行拆分
名称 | 例子 | 备注 |
---|---|---|
协议 | http(s) | |
主机名 | www.chaojilaji.cn | |
端口 | 8080 | |
根域名 | chaojilaji.com | |
文件名 | index.html | |
扩展名 | html | |
请求参数 | a=1&b=2&c=3 | 标识的时候可以去掉取值 |
自动填表
建立常见表单字段与内容的对应关系,并生成表单知识库
url去似去含:协议,主机名,端口,资源路径,参数
识别404页面:建立404页面知识库,从状态码和页面内容两个维度进行准确识别
ajax中,一个页面有不同的状态,每个状态代表着不同的页面,需要爬取状态。
遍历当前页面中所有的状态,才能完整地获取当前页面中所有的Url。核心在于页面事件的触发和
页面状态的保持。
存在的难点 | 解决方案 | 备注 |
---|---|---|
执行javascript代码 | puppeteer | google headless框架支持 |
页面dom树操作 | 对dom树解析,并进行动态的操作 | 遍历操作 |
页面事件触发 | 利用puppeteer对页面事件进行模拟触发 | 遍历 |
页面状态保持 | 记录页面状态 | |
重复事件识别 | 记录和识别重复的事件,避免重复触发和爬取 |
页面事件触发:可能存在事件触发栈,即事件内部还需要有事件进行处理,也就是事件深度
按不同的标签进行模拟事件触发,逐层循环遍历a标签
指纹分类
类型 | 描述 | 备注 |
---|---|---|
网络层指纹 | 网关、防火墙、VPN、CDN、DNS、路由器等基础设施指纹 | |
主机层指纹 | 操作系统信息、软件防火墙、服务的指纹 | |
服务层指纹 | web服务、FTP服务、SSH服务等 | |
应用层指纹 | 框架 | |
语言层指纹 | 识别是那种开发语言 |
获取指纹的特征
类型 | 描述 | 备注 |
---|---|---|
内容特征 | 在http响应的正文中 | LNMP识别:利用对探针文件的内容特征进行匹配 |
页面特征 | 页面内容相对固定,根据页面内容的hash值来确定 | 利用thnkphp的Logo对其进行识别 |
headers特征 | 在响应的消息报头中增加自己的报头信息 | 使用nginx时,响应的header中的server会带有nginx字样 |
告诉扫描器如何去检测和审计漏洞
审计漏洞的步骤
1、分析漏洞出现的场景
2、构造出可以覆盖所有漏洞场景的扫描载荷
3、将其转化为扫描器的检测脚本并生成最终的扫描签名
扫描器通过安全漏洞审计流程不断学习新的漏洞和丰富扫描知识库
安全漏洞分类
通用型漏洞
Nday/0day漏洞:前者已经发布补丁的漏洞,后者未发布补丁
sql注入漏洞
场景:通过精心设计的sql,改变原本sql的执行目的
检测方法
类型 | 方法 | 备注 |
---|---|---|
页面比较法 | 构造“恒真”或“恒假”两种状态,比较两种状态的执行结果产生的页面的相似度 | |
时间比较法 | 向数据库注入时间延迟函数,与政策请求的响应时间进行比较 |
通过存储的url,利用对参数构造检测载荷,发起请求,然后进行比较的方法,实现对sql注入漏洞的判定
xss跨站漏洞
类型 | 描述 | 备注 | 检测原理 |
---|---|---|---|
反射型 | 恶意数据在链接里,需要受害者的参与 | 与存储型的区别就是,只生效一次 | 构造扫描载荷,检查输出的内容 |
存储型 | 将恶意数据注入服务端并存储起来 | - | 同上 |
DOM型 | 修改dom树结构 |
命令执行漏洞
符号 | 作用 | 备注 |
---|---|---|
管道符号 | 串联执行,想象成数据流在这几个命令中串联流通 | |
连接符号( | 连接多个命令 | |
逻辑与符号 | 多命令,只有第一个命令成功,才会执行第二个命令 | |
逻辑或符号 | 多命令,只有第一个命令失败,才会执行第二个命令 |
文件包含漏洞
利用代码中的包含指令,例如:include、import等,对引入的文件进行篡改,替换我恶意构造的
具有攻击性的代码段,从而达到攻击的目的。
敏感文件泄漏
rar/zip/bak/swp/old等
检测原理
1、压缩、备份类文件检测
构造url,向目标请求该url,根据http响应中的状态码及文件类型进行判断
2、版本类文件检测
Nday/0day
需要强大的漏洞知识库做支撑
信息收集
IP信息:获取目标的IP或IP段信息,并收集这些IP段对外提供的端口,进而得到其服务
子域收集:即对子域名进行扫描
敏感信息:敏感文件,邮箱账号密码、数据库账号密码,服务器ip和私钥
指纹信息
url超链接信息
漏洞审计
漏洞测试:即利用扫描器进行扫描
漏洞验证:避免误报,提高准确率