【JSRC小课堂】Web安全专题(二)逻辑漏洞的burpsuite插件开发

百家 作者:京东安全应急响应中心 2020-02-11 09:31:36

本期嘉宾: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 插件开发关键接口



? burpsuite插件的独立开发环境配置完毕,就需要关注到插件的接口。

?

? 下面重点讲几个关键接口的实例:

? 1. API

API接口文档可以通过如下方式获取:burpsuite 的Extender -> APIs
或通过以下链接进行查阅:
https://portswigger.net/burp/extender/api/index.html


2. IBurpExtender
IBurpExtender接口是Burpsuite插件的入口,所有的插件开发都必须要实现。
?
3. 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安全专题(三)Web漏洞的自动化信息收集


?往期相关技术分享回顾

1. 密码找回逻辑漏洞小总结—安全小课堂第三十五期

2. 交易支付逻辑漏洞小总结—安全小课堂第三十六期

3. 安全小课堂第八十九期【web漏洞之逻辑漏洞挖掘】

4. 安全小课堂第125期【业务逻辑漏洞挖掘】

5. 安全小课堂第142期【burp插件开发入门】

6.【JSRC小课堂】Web安全专题(一)


关于漏洞

京东安全相关漏洞请提交至

https://security.jd.com/


?关注JSRC
获取更多“技术干货”


关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接