src挖掘技巧


常见术语

VUL

vulnerability的缩写,泛指漏洞

0 day 已经被发现(可能未被公开),而官方还没有相关补丁的漏洞。通俗的讲就是除了漏洞发现者,没有人知道这个漏洞的存在,并且可以有效的利用,发起的攻击往往具有很大的突发性和破坏性

零日攻击或零时差攻击「zero-day attack」则是指利用这种漏洞进行的攻击,提供该漏洞细节或者利用程序的人通常是该漏洞的发现者。零日漏洞的利用程序对网络安全具有巨大威胁,因此零日漏洞不但是黑客的最爱,掌握多少零日漏洞也成为评价黑客技术水平的一个重要参数。

CVE

CVE 的英文全称是 「Common Vulnerabilities & Exposures」 公共漏洞和暴露,例如 CVE-2015-0057、CVE-1999-0001 等等。CVE 就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。

如果在一个漏洞报告中指明的一个漏洞,有 CVE 名称的话你就可以快速地在任何其它 CVE 兼容的数据库中找到相应修补的信息,解决安全问题。

下面是一些漏洞信息发布平台,在这些平台上可以根据漏洞的 CVE 编号搜索该漏洞的介绍:

https://cve.mitre.org/
https://nvd.nist.gov/
http://www.cnnvd.org.cn/
http://cve.scap.org.cn/

PoC

PoC「Proof of Concept」, 中文译作概念验证。在安全界,你可以理解成为漏洞验证程序。和一些应用程序相比,PoC 是一段不完整的程序,仅仅是为了证明提出者的观点的一段代码。这个术语会在漏洞报告中使用,漏洞报告中的 PoC 则是一段说明或者一个攻击的样例,使得读者能够确认这个漏洞是真实存在的。

Exp

Exp 「Exploit」,中文译作漏洞利用程序。简单讲就是一段可以发挥漏洞价值的程序,比如:目标存在一个 SQL 注入漏洞,然后被你知道了,然后你编写了一个程序,通过这个 SQL 注入漏洞,拿到了目标的权限,那么这个程序就是所谓的 Exp 了。当然,如果你没有使用这个漏洞,它就这么放着,那么这个漏洞,对你来说可以认为是没有价值的。

关于 PoC / Exp 的几个误区

  • 写 PoC 要会 Python

PoC 的存在,只有一个目的:证明漏洞存在。而关于 PoC 的形式,或者说代码实现方式,你想用什么方式,就用什么方式。推荐 Python, 只是说安全界用 Python 的人居多,你写的东西能被更多人看懂,还有 Python 这门语言的灵活,类库强大等特性,给编写的人提供了很大便利。

  • PoC 就是 Exp

严格来讲,PoC 和 Exp 是两个东西。PoC 就是用来证明漏洞存在的,而 Exp 是用来利用这个漏洞的。在很多情况下我们知道了漏洞存在,却不知道具体怎么利用,编写一个 PoC 非常简单,而编写一个 Exp 是相当有挑战性的。

PoC 和 Exp 的区别就有点像你发现了家门口的超市的锁有问题,你给人家证明锁有问题和通过锁有问题这个现象偷到超市的钱这是两码事。

漏洞靶场

漏洞靶场 「Vulnerability Firing Range」 就是一个已经复现了漏洞让你测试漏洞用的环境,一般用虚拟机或者 Docker 来实现的。

如果你想快速构建一个测试用的漏洞靶场,可使用 Vulhub 项目快速部署漏洞测试靶场。Vulhub 是一个基于 docker 和 docker-compose 的漏洞环境集合,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。

Vulhub 项目地址:https://vulhub.org/

CVSS

CVSS 全称是 「Common Vulnerability Scoring System」即通用漏洞评分系统。CVSS 是一个行业公开标准,其被设计用来评测漏洞的严重程度,并帮助确定所需反应的紧急度和重要度。

CVSS 是安全内容自动化协议「SCAP」的一部分,通常 CVSS 同 CVE 一同由美国国家漏洞标准库「National Vulnerabiliy Database」发布,由美国国家基础建设咨询委员会「NIAC」委托制作,是一套公开的评测标准,经常被用来评测企业资讯科技系统的安全性,并受到 eBay、Symantec、Cisco、Oracle 等众多厂商支援。

CVSS 的目标是为所有软件安全漏洞提供一个严重程度的评级,这就意味着 CVSS 旨在为一个已知的安全漏洞的严重程度提供一个数值(分数)。而不管这个安全漏洞影响的软件类型是什么,不管它是操作系统、杀毒软件、数据库、邮件服务器、桌面还是商务应用程序。

由于这个评分范围非常广,这个评分系统把能够完全攻破操作系统层的已知安全漏洞评为基准分数 10.0 分。换句话说,CVSS 基准分数为 10.0 分的安全漏洞一般指能够完全攻破系统的安全漏洞。

典型的结果是攻击者完全控制一个系统,包括操作系统层的管理或者 Root 权限。例如:国家安全漏洞数据库中一个第三方产品中的这种安全漏洞被解释为:攻击者能够安装程序、观看、修改或者删除数据,或者创建拥有用户全部权利的新账户。

CVSS 的主要目的是帮助人们建立衡量漏洞严重程度的标准,使得人们可以比较漏洞的严重程度,从而确定处理它们的优先级。CVSS 得分基于一系列维度上的测量结果,这些测量维度被称为量度「Metrics」。漏洞的最终得分最大为 10,最小为 0。得分 7-10 的漏洞通常被认为比较严重,得分 在 4-6.9 之间的是中级漏洞,0-3.9 的则是低级漏洞。

SCAP

SCAP 「Security Content Automation Protocol」 是一个集合了多种安全标准的框架,它共有六个子元素:CVE,OVAL,CCE,CPE,CVSS,XCCDF。其目的是以标准的方法展示和操作安全数据,SCAP 由 NIST 负责维护。

SCAP 是当前美国比较成熟的一套信息安全评估标准体系,其标准化,自动化的思想对信息安全行业产生了深远的影响。

SCAP主要解决三个问题:

  • 实现高层政策法规等到底层实施的落地。
  • 将信息安全所涉及的各个要素标准化。
  • 将复杂的系统配置核查工作自动化。

参考文档

https://www.google.com
https://poc.evalbug.com/chapter1/1.html
http://blog.csdn.net/wangjianno2/article/details/51339064
http://blog.csdn.net/kellyruan/article/details/51094599

经验

网站cms

网站服务器

前后端代码审计

渗透测试工具(学会利用)

网站结构(架构、中间件、语言、容器)

网站使用的线路

漏洞原理需要掌握(代码层)

木马免杀

绕过防火墙

绕过waf

签名

加密(使用的加密算法、如何解开)

中间人攻击

每一点都有一个基础,在实战用进行深入学习

批量刷漏洞

  • 指纹 【非常容易】
    • web容器 Apache,Nginx,IIS,Tomcat,Weblogic
    • web服务器语言 PHP,Java,.NET,Nodejs
    • web后端框架 Thinkphp,Struts2
    • web前端框架 Vue,angularjs,react,Highcharts
    • web应用 Wordpress,seacms
    • web前端语言 Javascript,less
    • web运营商 移动、联通
    • 第三方内容 YouTube
    • Cdn运营商 阿里云、电信
  • 原始刷漏洞
    • 补天
    • 漏洞盒子
    • CNVD
    • edusrc
  • 刷指定政府、教育
  • 刷CMS
  • 刷众测平台(补天300名以内)

文件上传校验姿势

  • 客户端JavaScript校验(一般只校验后缀名)
  • 服务端校验
    • 文件头content-type字段校验(image/gif)
    • 文件内容头校验(GIF89a)
    • 后缀名黑名单校验
    • 后缀名白名单校验
    • 自定义正则校验
  • WAF设备校验(根据不同的WAF产品而定)

绕过上传漏洞

  • 客户端绕过
  • 服务端绕过
    • 文件类型 content-type
    • 文件头 GIF89a
    • 文件后缀名 jspx jspf php3 cer JsP
  • 配合文件包含漏洞绕过 [先上传一个txt文件类型,内容为一句话木马,之后上传一个php文件,引用该txt文件(内容为该txt文件路径)]
  • 配合服务器解析漏洞绕过
  • CMS、编辑器漏洞绕过
    • 常见文本编辑器有FCKEditor、Ewebeditor、UEditor、KindEditor、HXeditor等,其包含的功能类似,比如:图片上传、视频上传、远程下载等。使用这类编辑器减少了程序开发的时间,但也存在通用性漏洞带来的危害。
    • 有的使用黑名单策略,可能会忽略asa、cer等未知风险的扩展名
  • 配合操作系统文件命名规则绕过
  • 配合其他规则绕过
  • WAF绕过

后门隐藏与维持技巧

运维只管寻找我们shell的方式也有很多种,如

  • 通过文件名、修改时间代销、文件备份比对发现异常
  • 通过WEBSHELL后门扫描脚本发现,如Scanbackdoor.php/Pecker/shelldetect.php以及各种扫描器等等
  • 通过Access.log访问日志发现后门所在
  • 又或者,我们测试一句话还要被WAF拦一下,再来个警告日志等等

方法

  • 404页面隐藏后门(访问404)
  • 变形的一句话
  • 包含(文件、图片、错误日志)
  • 混淆(代码层面)(修改文件时间、文件大小的伪装处理等等)

修复上传漏洞

  • 文件扩展名服务端白名单校验
  • 文件内容服务端校验
  • 上传文件重命名
  • 隐藏上传文件路径

以上基本上可以解决(但是不是绝对安全)

命令执行漏洞

漏洞产生原因:

  • 代码层过滤不严,商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数来调用:system("/bin/program --arg $arg");
  • 系统的漏洞造成命令注入 bash破壳漏洞(CVE-2014-6271)
  • 调用的第三方组件存在代码执行漏洞,如WordPress中用来处理图片的ImageMagick组件 java中的命令执行漏洞(struts2/ElasticsearchGroovy等) ThinkPHP命令执行

漏洞危害

  • 继承web服务程序的权限去执行系统命令或读写文件
  • 反弹shell
  • 控制整个网站甚至控制服务器
  • 进一步内网渗透

利用系统函数实现远程命令执行

在php下,允许命令执行的函数有:

eval()

assert()

preg_replace()

call_user_func()

如果页面中存在这些函数兵器对于用户的输入没有做严格的过滤,那么就可能造成远程命令执行漏洞

其他函数

ob_start() , unserialize() , creat_function()

usort() , uasort() , uksort()

array_filter() array_reduce() , array_map()

XML注入(也称XXE注入)

详情可参考https://xz.aliyun.com/t/6887#toc-0 /

URI:统一资源标识符

代码注入

  • OWASP将其定义为在客户端提交的代码在服务器端接收后当作动态代码或嵌入文件处理
  • Wikipedia将其定义为客户端所提交的数据未经检查就让Web服务器去执行,这个范围比OWASP定义的代码注入范围要广阔的多

XXE漏洞全程XML External Entity Injection 即xml外部实体化注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有进制外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞出发的点往往是可以上传xml文件的位置,没有对上传的xml文件镜像过滤,导致可以上传恶意xml文件。

XML的设计总是时数据传送

一下是一个poc

<?xml version="1.0" encoding="UTF-8"?>
]>
&xxe;
<?xml version="1.0" encoding="UTF-8"?>
]>
&xxe;

CTF POC

<?xml version="1.0" encoding="utf-8"?>

  ]>
&admin;1
<?xml version="1.0" encoding="UTF-8"?>

]>
&xxe;admin

XXE危害1:读取任意文件

XXE危害2:执行系统命令

XXE危害3:探测内网端口

XXE危害4:攻击内网网站

XXE危害5:拒绝服务

XXE漏洞类型:

  • 基础的XXE注入--外部实体注入本地
    • 远程DTD文件--包含带有SYSTEM标识符和“file”处理程序的参数实体。参数实体“file”也可以连接到实体“send”内的URL。
  • 基于盲注的XXE注入--XML解析器在响应中不显示任何错误
    • 抓取数据包时要经常分析请求中是否支持XML,然后再去测试
  • 基于错误的XXE注入--成功解析之后,XML解析器始终显示SAME响应。(即“您的消息已被接收”),因此,我们可能希望解析器将文件的内容“打印”到错误响应中。

思路:

1、客户端发送payload1给web服务器

2、web服务器向vps获取恶意DTD,并执行文件读取payload2

3、web服务器带着回显结果访问vps上特定的FTP或者HTTP

4、通过VPS获得回显(nc监听端口)

ceye.io在测试没有回显的时候使用

SSRF漏洞

SSRF成因

ssrf漏洞出现点

  • 分享:通过URL地址分析网页内容

  • 转码服务

    • 把网页内容通过相关手段转为适合手机屏幕浏览的格式
  • 在线翻译

    • 通过url地址翻译对应文本内容
  • 图片加载与下载:通过URL地址加载或下载图片·

  • 图片、文章收藏功能

  • 未公开的api实现以及其他调用URL的功能

  • 从URL关键字中寻找

SSRF漏洞绕过方法

  • 使用:@ 进行绕过
    • http://abc.com@127.0.0.1利用解析url所出现的问题 3、4利用302跳转
  • 添加端口号
  • 短地址
    • https://0x9me/cuGfd
  • 可以指向任意ip的域名: http://xip.io 192.168.1.1xip.io 会自动重定向到192.168.1.1,因为该方法包含了192.168.1.1,可能会被正则表达式忽略,这个时候,可以使用短地址进行绕过
  • ip地址转换成进制来访问
    • 192.168.0.1 = 3232235521
  • 非HTTP协议: 例如file协议:访问本地计算机文件
  • DNS Rebinding 对于用户请求的url参数,首先,服务端会对其进行DNS解析,然后对DNS服务器返回的ip进行判断,如果在黑名单中就会pass掉。但是在整个过程中,第一次请求DNS服务器进行解析到第二次服务端请求URL之间存在时间差,利用该时间差,我们可以进行DNS重绑定攻击,要完成该攻击,我们需要一个域名并将这个域名解析到我们自己的DNS server上,在我们可控的DNS server上设置TTL为0
    • 服务端获取url参数进行第一次DNS解析【非内网ip】
    • 对于获取IP判断
    • 服务端对URL进行访问。由于DNS服务器设置的TTL为0,所以再次进行DNS解析,这次DNS解析返回的ip地址为内网地址

ssrf漏洞修复建议

  • 限制请求的端口只能为web端口,只允许访问http和https请求
  • 限制不能访问内网的IP,以防止对内网进行攻击
  • 屏蔽返回的详细信息

SSRF实验演示

bWAPP中的SSRF给出了3个小实验来说明SSRF的利用场景

  • 任务1:使用远程文件包含进行端口扫描(内网探测)
  • 任务2:使用XXE获取敏感文件中的内容(文件读取)
  • 使用XXE进行SmartTV的拒绝服务漏洞的利用(漏洞利用)

重放攻击

重放攻击的介绍

重复的会话请求就是重放攻击

可能是因为用户重复发起请求,也可能是因为请求被攻击者获取,然后重新发给服务器

重放攻击的危害

请求被攻击者获取,并重新发送给认证服务器,从而达到认证通过的目的。

我们可以通过加密、签名的方式防止信息泄露,会话被劫持。但是这种方式防止不了重放攻击

防御手段

防止重放攻击的方法是使用不重数

1. 加随机数
该方法优点是认证双方不需要时间同步,双方记住使用过的随机数,如发现报文中有以前使用过的随机数,就认为是重放攻击。缺点是需要额外保存使用过的随机数,若记录的时间段较长,则保存和查询的开销较大。

2. 加时间戳
该方法优点是不用额外保存其他信息。缺点是认证双方需要准确的时间同步,同步越好,受攻击的可能性就越小。但当系统很庞大,跨越的区域较广时,要做到精确的时间同步并不是很容易。

3. 加流水号
就是双方在报文中添加一个逐步递增的整数,只要接收到一个不连续的流水号报文(太大或太小),就认定有重放威胁。该方法优点是不需要时间同步,保存的信息量比随机数方式小。缺点是一旦攻击者对报文解密成功,就可以获得流水号,从而每次将流水号递增欺骗认证端。

在实际中,常将方法(1)和方法(2)组合使用,这样就只需保存某个很短时间段内的所有随机数,而且时间戳的同步也不需要太精确。
对付重放攻击除了使用本以上方法外,还可以使用挑战一应答机制和一次性口令机制,而且似乎后面两种方法在实际中使用得更广泛。

https本身就能防止重放攻击

中间人攻击 采用双向认证没有办法劫持

使用https仍然不安全的原因:

加密是发生在应用层和传输层之间,在传输层看到的数据是经过加密的。加密数据只有在客户端和服务器端才能看到明文,客户端与服务器端的通信过程是安全的。

而在浏览器的调试工具可以看到请求信息,而且还是明文,是因为这里的数据是应用层的,还未经过加密

只要能获取到根证书的信任,且应用程序未加密,那么在应用层段就可以实现中间人攻击

信息收集

服务器

  • DNS信息
  • 端口服务
  • 真实IP

域名

  • whois
  • 备案信息
  • 子域名

网站程序

  • 网站架构
    • 操作系统
    • 中间件
    • 数据库
    • 编程语言
  • 指纹信息
  • 探测waf
  • 敏感目录、敏感信息、源码泄露和脆弱系统
  • 旁站查询
  • C段查询

工具收集

端口、服务探测

? nmap

DNS枚举工具

? nslookup

? dig

? whois

? fierce

目录、文件查询(readme.txt , log.txt , install.txt)

? dirbuster

? Maltego

? Nito

? 御剑

利用搜索引擎工具

? theharvester 【社工工具】

子域名爆破工具

? layer子域名检测

? dmitry

网络搜集

敏感信息外泄
	html源码
		明显的代码
		注释
	DS_store导致文件泄露
	robots.txt
	网站备份压缩文件:zip、rar、bak
	vim编辑器备份文件:生成的swp文件
	WEB-INF/web.xml泄露
	github:邮箱、QQ、主机等用户名密码
	syn:未删除的源码程序
	crossdomain.xml

搜索引擎
	ZoomEye
	shodan
	bing搜索
	FOFA
	谛听(搜索工控设备)
	Google语法
	天眼查
	傻蛋(联网设备搜索系统)

在线工具搜索
	站长工具
	站长帮手
	爱站
	phpinfo(https://phpinfo.me/bing.php)

暴力破解

工具:

  • NMAP、X-scan、CrackDB
  • Ncrack 是一个网络认证破解的开源工具
  • Hydra(九头蛇海德拉)
  • Medusa(美杜莎)
  • 工具之Pkav HTTP Fuzzer 爆破有验证码的后台
  • burp suite

C/S架构 对软件进行破解

B/s架构 对web页面进行破解

explioit-db.com 该网站上有许多插件的漏洞

worldpress 后台登录没有验证码

业务安全top10漏洞挖掘关键点:

  • 身份认证安全
    • 暴力破解
    • cookie&session
    • 加密测试
  • 业务一致性安全
    • 手机号篡改
    • 邮箱和用户名更改
    • 订单id更改
    • 商品编号更改
    • 用户id篡改
  • 业务数据篡改
    • 金额数据篡改
    • 商品数量篡改
    • 最大限制突破
    • 本地js参数修改
  • 用户输入合规性
    • 注入
    • xss
    • fuzz
  • 密码找回漏洞
    • 正常访问,不同找回方式,记录
    • 分析数据包,定位敏感信息
    • 分析找回机制
    • 修改数据包验证
  • 验证码突破
    • 暴力破解
    • 时间、次数突破
    • 回显测试
    • 绕过测试
  • 业务授权安全
    • 未授权访问
    • 越权测试
    • drops.wooyun.org/tips/727
  • 业务流程乱序
    • 顺序执行缺陷
  • 业务接口调用
    • 恶意注册
    • 短信炸弹
    • 内容编辑
  • 失效绕过测试
    • 时间刷新缺陷
    • 时间范围测试

密码找回漏洞挖掘

  • session覆盖
  • 服务器验证
    • 最终提交步骤
    • 服务器验证可控内容
    • 服务器验证验证逻辑为空
  • 用户身份验证
    • 账号与手机号码的绑定
    • 账号与邮箱账号的绑定
  • 找回步骤
    • 跳过验证步骤、找回方式、直接到设置新密码的页面
  • 本地验证
    • 在本地验证服务器的返回信息,确定是否执行重置密码,但是其返回信息是可控的内容,或者可以得到的内容
    • 发送短信等验证信息的动作在本地进行,可以通过修改返回包进行控制
  • 注入
    • 在找回密码处存在注入漏洞
  • Token生成
    • token生成可控
  • 注册覆盖
    • 注册重复的用户名
  • 用户凭证暴力破解
    • 四位或六位纯数字
  • 返回凭证
    • URL返回验证码及token
    • 密码找回凭证在页面中
    • 返回短信验证码
  • 邮箱弱token
    • 时间戳的MD5
    • 用户名
    • 服务器时间
  • 用户凭证的有效性
    • 短信验证码
    • 邮箱token
    • 重置密码token
  • 重新绑定
    • 手机绑定
    • 邮箱绑定

a.找回密码的验证码为四位数字可爆破真实验证码;

b.采用本地验证,可以先尝试修改自己的帐号密码,保存正确的返回包,然后修改他人密码的时候替换返回包;

c.最终修改密码的数据包,以另外的ID作为身份判断(例如userid),而该ID在别处可以获取到;

d.接受验证码的手机号修改为自己的号码,然后输入自己的号码接收到的验证码去进行密码重置;

e.获取验证码的时候,会生成一个身份标识(例如cookie值),那么我们就替换他人账号的身份证重置他人的密码;

图片验证码较多的问题是:

a.图片内容比较清晰可识别;

b.验证码采用前端js刷新;

c.验证码不过期;

d.验证码本地校验;

e. 删除数据包中的验证码参数;

短信验证码较多的问题是:

a.验证码4位数字且不过期;

b.验证码未绑定用户;

c.验证码本地校验;

d.验证码编码后存在数据包中(PS一般还能导致短信内容可控);

e.验证码可复用;

在线购买商品的时候,除了修改金额还有没有别的逻辑漏洞?

a.添加两个商品,其中一个商品的数量为负数,在总价上抵消另外一个商品的价格,造成总价格为1001+99-1的结果,最终以1元支付;

b.使用例如满200元-100元的优惠券,然后在交易过程中替换商品价格为101元的商品id,最终以1元支付;

c.支付结果判断采用本地验证,通过修改返回包让系统误以为我们已成功支付,从而商品状态变为已支付状态;

d.限量购买的商品,比如没人限购1件,如果缺少数据加锁机制,择可以通过数据包并发的方式来突破限制;

e.购买商品未支付的时候,商品库存值已经扣掉相应数量,且订单未设置自动取消时间,批量操作即可导致商城所有商品无法购买;

f.越权使用他人余额来给我们支付商品,付款的时候修改数据包中的用户ID即可,有些需要支付密码的,我们可以通过暴力破解的方式进行测试。注意这里一般是使用一个简单的密码如123456,然后对用户ID进行遍历会比较容易成功;

g.商品下单的时候,一般通过修改数据暴力的地址id,然后去查看订单的时候就可以获取他人的地址等信息。

后台管理系统中,如果你有一个普通帐号,如何尝试获取管理员权限?

a.编辑个人信息的时候,修改权限组的id,一般管理员的值为0或者1;

b.后台修改密码的地方,如果是根据userid来修改密码的,可以修改id的值来修改管理员的密码;

c.在个人资料处插入XSS脚本,一般能打到管理员cookie的概率很大;

d.查看个人资料的时候,如果是根据id来显示,一般都有越权,可以遍历id获取管理员信息;

e.测试后台功能,找一下注入、上传、命令执行等漏洞,直接拿下数据库权限或者shell,再找管理员权限就轻而易举了。

显示个人用户信息的地方可能会出现什么问题?

XSS、越权、信息泄漏、文件上传、sql注入;

a.XSS的话,一般只能打到自己或者管理员,而只有后者有用;

b.越权的话一般是越权查看和编辑他人的个人信息,有时候我们还可以通过在数据包里添加一些参数来做到修改系统不允许修改的信息,如手机号、用户名等;

c.信息泄漏一般是后台执行了select *,导致用户的所有信息都在返回包里,包括该用户的密码、密保答案等不应该返回的信息;

d.头像处的文件上传,一般是任意文件上传漏洞、ImageMagick命令执行等,有时候也会存在XSS和越权的问题;

e.sql注入一般会存在于个人用户信息,选择地区以及上传头像的地方,这里注入出现的比较多;

WAF

介绍和原理

waf是web应用防火墙的简称,对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实施阻断,为web应用提供防护,也称作应用防火墙,是网络安全纵深防御体系里重要的一环。waf属于检测型及纠正型防御控制措施

对请求的内容进行规则匹配、行为分析等识别出恶意行为,并执行相关动作,这些动作包括阻断、记录、告警等

硬件型waf

串联:拦截

旁路:只进行监听,不拦截

waf识别工具

一些waf可以自定义返回的消息内容,或者全部返回自定义的404页面或200页面,有一些工具会协助作为waf设备的识别

wafw00f

使用 python wafw00f.py -h 可以查看工具的使用方法,运行示例:

python wafw00f.py http://www.xinkonglangzi.com/

sqlmap

sqlmap.py -u "http://www.taobao.com" --identify-waf --batch

CNAME架构

对于此类前置串联结构的的ByPass测试需寻找WAF与中间件、后端业务间的耦合性缺漏,比如:

1、在使用了SSL套接字的会话中,协商加密算法属请求方可控,WAF和后端业务在算法支持上可能存在差异的一个切入点,便利后端业务支持但WAF不支持的加密算法,便可直接绕过WAF了。相关工具见Github:

https://github.com/LandGrey/abuse-ssl-bypass-waf

2、针对CNAME方式接入WAF的系统,能否绕过的关键在于后端的业务配置是否严谨,如果后端业务为限制访问源,很容易通过域名解析历史和【大规模的扫描】定位到真实IP地址,修改本地host文件便可以绕过WAF直接对后端系统进行攻击

3、WAF与中间件的耦合性缺漏

还有一类串联的部署方式,即WAF设备位置后移,嵌套到中间件上,这样WAF的损耗将分摊到业务机器,这样的捆绑意味着一荣俱荣,一损皆损,又因位置后移到了业务侧,策略下发和管理都极其复杂,且中间件种类繁多,规模一大,这种架构堪称灾难。而随着业务架构的逐渐优化,一般的互联网架构会前置越来越轻的转发层,将WAF嵌套到转发层,或在转发层通过openresty等方式将请求过一边旁挂的WAF集群,这属对业务链路入侵最轻的一种方式,很多互联网公司自建的WAF采用该架构。

旁挂WAF

系统层面

利用Linux通配符特性绕过WAF策略,在bash语法中,可以使用与系统文件相同数量的" ? " , " / " 来匹配该文件,用未初始化的变量隔离特征字符;用 ' 字符拆解再拼接,绕过字符匹配

编程语言层面

利用PHP数组特性绕过WAF策略:再PHP中每个字符串都可以当作数组,这样基于字符串的正则匹配就很容易被绕过

SRC