【JSRC 小课堂】Web 安全专题(二)逻辑漏洞的 burpsuite 插件开发
本期嘉宾:3stoneBrother,京东集团攻防与实验室安全工程师,业务蓝军负责人,熟悉Web渗透测试,长期致力于甲方Web业务安全方向攻击与防御研究。
✎小课堂黑板报
上期我们谈到漏洞挖掘的基本思路,本期将继续和大家探讨,如何根据实际需求开发出提高安全测试效率的工具,以支持漏洞的挖掘。
目前业内不乏优秀的工具,CO2, Logger++, Autorize, XSS Validato都是不错的选择,但通用化的工具不能完全符合Web安全测试人员的特定需求。从实际业务的操作效率方面考虑,独立开发出适用实际业务的插件是必要的。
基础知识:burpsuite
burpsuite是Web应用程序渗透测试集成平台,常被用来进行网站渗透测试。burpsuite提供了丰富的开发接口,且支持Java、Python、Ruby语言的扩展。
数据信息在用户端最终是希望展示给使用者的,需要进行明文展现,这种基于用户体验角度的考虑恰好为攻击者提供了机会,现阶段的攻击者更倾向于在用户端利用这类弱点进行攻击。
传统的安全防御设备和防御措施对逻辑漏洞的治理收效甚微,而且逻辑漏洞的种类相当丰富。在实际业务处理中,通用的逻辑漏洞解决方案往往效果不佳,但一个业务层抽象得来的模型,在其自身站点往往具有通用性。
例如,某个URL存在越权,可能该站点的其他URL也存在类似的问题。我们基于该URL的特征,自行独立开发出burpsuite插件,对该站点进行批量扫描,就能更全面的发现同类问题。
Step 1 独立开发环境配置
burpsuite插件的独立开发,需要在某个配置环境下进行。burpsuite支持Java、Python、Ruby三种语言的扩展,下面以python语言环境为例进行讲解。
burpsuite会在java环境下运行,涉及的数据库基本都是java语言的脚本。Python作为开发语言,想要调用Java库就需要借助Jython:
我们以MacOS为例,
代码运行: brew install jython
Jython环境的配置:
Extender-> options -> python Environment -> select file,导入已下载好的jython jar数据包(操作至下图所示即可)
Step 2 插件开发关键接口
下面重点讲几个关键接口的实例:
1. API
API接口文档可以通过如下方式获取:burpsuite 的Extender -> APIs
或通过以下链接进行查阅:
https://portswigger.net/burp/extender/api/index.html
IBurpExtender
IBurpExtender接口是Burpsuite插件的入口,所有的插件开发都必须要实现。
registerExtenderCallback
IBurpExtenderCallbacks这个接口几乎是必备的,我们在插件编写的过程中会经常用到。运行代码参考下图:
通过参数callbacks可以获得核心基础库,例如日志、请求、返回值修改等。
4.IExtensionHelpers
IExtensionHelpers接口提供了插件编写扩展中常用的一些通用函数。 如:IRequestInfo analyzeRequest(byte[] request)analyzeRequest函数
我们通过如上函数可以拿到请求的细节。
5.IHttpRequestResponse
IHttpRequestResponse接口包含了每个请求和响应的细节,我们在brupsuite中的每个请求或者响应都是IHttpRequestResponse实例。通过getRequest()可以获取请求和响应的细节信息。
我们以registerHttpListener为例进行代码说明:
如上图所示,我们在user和webserver间建立监听,调用HttpListener接口,获取请求和响应的日志。我们想要实现这个功能,最重要的是利用下图的方法:
这里需要注意的是,如果我们没有注册,processHttpMessage方法是不会生效的。processHttpMessage是处理请求和响应包的必要插件。代码运行:processHttpMessage(inttoolFlag,booean messageIsRequest, IHttpRequestResponse messageInfo)
通过messageInfo这个参数,我们可以获取到request和response日志。
下图是个demo,我们在做渗透测试的过程中,会遇到目录字典不全的情况,我们可以将这个URI生成目录字典,为目录爆破做准备。
Step 3 逻辑漏洞检测插件开发
重点的开发接口实现完毕,我们就可以进入到具体的业务场景,例如开发出逻辑漏洞的检测插件,具体步骤如下:
确认哪些是有效的cookie值
a.在burpsuite中拦截数据包进行cookie值的获取(注:cookie指某些网站为了辨别用户身份而储存在用户本地终端上的数据)。
b.获取到cookie值,接着是遍历每个cookie,用单个cookie分别进行请求,根据响应的长度确定哪个cookie是有效cookie,代码运行参考下图:
这样可以检测逻辑漏洞的插件的开发好啦。
那么通过burpsuite开发出的逻辑漏洞检测插件可以达到什么样的效果呢?
从上图可以看出,数据部分是每个cookie的key的单独请求,这些单独请求会对应响应长度数据列表。根据响应的长度大小,我们可以确认出有效cookie。响应长度和其他长度不同的数据往往就是有效cookie。
延伸讲解:针对DES和AES加密参数的逻辑漏洞挖掘
AES和DES属于对称加密,即用户端和服务器端都可以找到秘钥,我们找到密钥即可进行逻辑漏洞测试。
某次对微信小程序进行渗透测试,burpsuite抓包时发现订单ID参数以密文形式进行传输,通过反编译微信小程序包,我发现了密钥,密钥的加密方法是DES加密,获取过程参见下图:
运行如下代码获取订单ID密文:
在burpsuite的检测思路小结:
1.遍历明文ID
2.对明文ID进行加密生成字典
3.利用burpsuite的爆破插件进行爆破。
遇到参数加密的情况并不可怕,既然是对称加密,那么我们一定可以在用户端获得密钥,通过对js代码进行分析往往就能够取得密钥。
DES和AES加密参数的逻辑漏洞挖掘插件开发tips
对消息体进行解析
analyzeRequest=helpers.analyzeRequest(messageInfo)
获取请求头
headers=analyzeRequest.getHeaders()
获取参数列表
paraList=analyzeRequest.getParameters();#获取参数列表,参数分为三种类型,URL中的参数,cookie中的参数,body中的参数。
forpara in paraList:
这里可以考虑对加密参数进行筛选
key= para.getName() # 获取参数名
value= para.getValue() # 获取参数
aesValue = aes.encrypt(value);
aesValue = URLEncoder.encode(aesvalue);
newPara=helpers.buildParameter(key, aesValue, para.getType()); #构造新的参数
updateRequest= helpers.updateParameter(new_Request, newPara); #构造新的请求包
messageInfo.setRequest(updateRequest);//设置最终新的请求包
若作为插件开发更改AES秘钥即可。
附: 逻辑漏洞检测插件推荐
Broken Access Control
Burplay/Multi Session Replay - Burplay is a Burp Extension allowing for replaying any number of requests using same modifications definition. Its main purpose is to aid in searching for Privilege Escalation issues.
AuthMatrix - AuthMatrix is a Burp Suite extension that provides a simple way to test authorization in web applications and web services.
Autorize - Automatic authorization enforcement detection extension for burp suite written in Jython developed by Barak Tawily in order to ease application security people work and allow them perform an automatic authorization tests.
AutoRepeater - Automated HTTP Request Repeating With Burp Suite.
UUID issues for Burp Suite - UUID issues for Burp Suite.
Authz - Burp plugin to test for authorization flaws.
Paramalyzer - Paramalyzer - Burp extension for parameter analysis of large-scale web application penetration tests.
Q & A
Q : burpsuite 如何对App https抓包?
A : 挂上代理,访问http://burp,下载证书并导入手机,注意手机中只能导入.cer的证书。
小伙伴们
针对本期内容和小课堂课程
如果您有哪些问题和建议,欢迎更多白帽子们
加入 JSRC 安全小课堂。
小课堂开课 QQ 群:464465695
下期预告:
Web安全专题(三)SRC漏洞挖掘技巧:三步走收集高质量信息
欢迎点击【京东智联云】,了解开发者社区
更多精彩技术实践与独家干货解析
欢迎关注【京东智联云开发者】公众号
版权声明: 本文为 InfoQ 作者【京东智联云开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/38f820b21e2b6bf0d7a6e844d】。文章转载请联系作者。
评论