Web 攻防之业务安全:Callback自定义测试

Web 攻防之业务安全:Callback自定义测试(触发XSS漏洞)-LMLPHP

业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台(操作系统、数据库,中间件等)、业务系统自身(软件或设备)、业务所提供的服务安全狭义的业务安全指业务系统自有的软件与服务的安全


目录:

Callback自定义测试:

测试原理和方法:

测试过程:

第一步:使用 Burp Suite 的爬虫功能,从重点关注的目录(一般为网站的根目录)开始爬取,在  HTTP history 选项卡中选中要开始爬取的项,右键选择 “Spider from here”。爬取的结果会在 Target  --> Site map 中显示。在爬取完毕后,再使用 Burp Suite 过滤功能找到带有 Callback 参数的链接.(在输入关键字之后,再点击 “1” 的位置,即可让过滤功能生效)

第二步:找到 URL 带有 callback 参数的链接.

第三步:查看 URL 对应的 HTTP Response(查看响应的数据包) 的 Content-Type 类型是否为 text/html ,如果 Content-Type 为 text/html ,我们输入的标签才会被浏览器识别。则将对应的请求发送到 Repeater(重发器) 

第四步:查看 Callback 参数是否存在过滤及可控,这时我们需要在 Callback 参数值前追加一些文本类的 HTML 标签,不直接使用 script 等标签,避免 waf 等保护设备的检测。这里我们使用标签是一级标签。例如:callback=Testjsonp1,然后发送查看响应效果有没有Test 内容,如果有则存在漏洞,然后进行删除 info(在URL中) 的参数,得到精简 URL.

第五步:在 精简 URL 中把 callback 参数更换为恶意行为的 HTML 标签,在新的浏览器中进行利用.

修复建议:


免责声明:

严禁利用本文章中所提到的技术进行非法攻击,否则后果自负,上传者不承担任何责任。


Callback自定义测试:

测试原理和方法:

在浏览器中存在着同源策略,所谓同源是指域名,协议,端口相同。当使用 Ajax 异步传输数据时,非同源域名之间存在限制,其中有一种解决方法是 JSONP(JSON with Padding), 基本原理利用了  HTML <script> </script> 元素标签,远程调用 JSONP 文件来实现数据传递,JSONP 技术中一般使用 Callback(回调函数)参数来声明回调时所使用的函数名,这里往往存在安全问题,由于没有使用白名单的方法进行限制 Callback 函数名,导致攻击者可以自定义 Callback 内容,从而触发XSS等漏洞。


测试过程:

攻击者在测试前,使用 Burp Suite 的爬虫功能对网站进行爬取,筛选出带有 Callback 或者 JSONP 参数的请求,请对请求响应的 Content-Type 进行判断,如果 Content-Type text/html, 则进行下一步,接着攻击者对 Content-Type 参数进行分析,如果 Callback 参数允许攻击者插入 HTML 标签,则存在漏洞。


第一步:使用 Burp Suite 的爬虫功能,从重点关注的目录(一般为网站的根目录)开始爬取,在  HTTP history 选项卡中选中要开始爬取的项,右键选择 “Spider from here”。爬取的结果会在 Target  --> Site map 中显示。在爬取完毕后,再使用 Burp Suite 过滤功能找到带有 Callback 参数的链接.(在输入关键字之后,再点击 “1” 的位置,即可让过滤功能生效)

Web 攻防之业务安全:Callback自定义测试(触发XSS漏洞)-LMLPHP

Web 攻防之业务安全:Callback自定义测试(触发XSS漏洞)-LMLPHP

Web 攻防之业务安全:Callback自定义测试(触发XSS漏洞)-LMLPHP


第二步:找到 URL 带有 callback 参数的链接.

Web 攻防之业务安全:Callback自定义测试(触发XSS漏洞)-LMLPHP

第三步:查看 URL 对应的 HTTP Response(查看响应的数据包) 的 Content-Type 类型是否为 text/html ,如果 Content-Type 为 text/html ,我们输入的标签才会被浏览器识别。则将对应的请求发送到 Repeater(重发器) 


第四步:查看 Callback 参数是否存在过滤及可控,这时我们需要在 Callback 参数值前追加一些文本类的 HTML 标签,不直接使用 script 等标签,避免 waf 等保护设备的检测。这里我们使用标签是一级标签<h1>。例如:callback=<h1>Test</h1>jsonp1,然后发送查看响应效果有没有<h1>Test</h1> 内容,如果有则存在漏洞,然后进行删除 info(在URL中) 的参数,得到精简 URL.


第五步:在 精简 URL 中把 callback 参数更换为恶意行为的 HTML 标签,在新的浏览器中进行利用.


修复建议:

(1)严格定义 HTTP 响应中的 Content-Typejson 数据格式:Content-Type:application / json

(2)建立 Callback 函数白名单,如果传入的 Callback 参数值不在白名单内,跳转到统一的异常页面阻止其继续输出.

(3)对 Callback 参数进行 HTML 实体编码来过滤掉 “ < ”,“ > ” 等字符.

     

    

学习的书籍:Web 攻防之业务安全实战指南.

04-14 23:50