burpsuite 越权分析插件"Auth Analyzer Plus"
2023-3-29 11:46:0 Author: xz.aliyun.com(查看原文) 阅读量:35 收藏

在burpsuite中有许多测试越权的优秀插件
其中比较常用的就是Authz和Auth Analyzer了

他们的页面分别是这样的

简单说一下什么是越权
场景:已知admin的账号密码和一普通用户的账号密码
如果普通用户能够访问到只有admin有权访问的页面就称为越权
而这些插件实现的原理就是修改cookie来表示不同的用户

那么我遇到一个问题
场景:已知A网站的管理员账号密码,A网站的普通用户账号密码,B网站的普通用户账号密码,并且A网站和B网站用的是同一套系统

一般测越权的话就是测试A网站的管理员和A网站的普通用户
即交叉区域

第一点,我们没有得到B网站的管理员权限
第二点,A网站的管理员和A网站的普通用户之间的越权不一定适用于B网站
虽然用的是同一套系统,由于管理员配置不一样,同一个越权点有的网站可以有的网站不可以

第三点,找出此套系统的通用越权漏洞
ABC均为同一套系统,
用一个管理员与其他网站的用户测试得到的相同部分极有可能为系统本身存在的越权漏洞

首先在插件替换host和cookie的内容

这个方法是不行的,虽然在请求头里host是被替换成了网站B
但实际上访问的地址仍然是网站A
很明显插件只支持替换同一个域名下的cookie检测
也想过用宏定义能否实现
最后果然还是剩下这条路,魔改Auth Analyzer插件(当然我也是没开发过bp插件的)

于是乎,走上了学习开发bp插件的道路
这里主要是看代码怎么写
那些开发插件的环境先忽略
毕竟文章名字不叫"从零基础开发bp插件"


红色框里的是重要的,其他的都是开发所需要固定套路

if (messageIsRequest){
    IRequestInfo analyzeRequest = helpers.analyzeRequest(messageInfo);
    List<String> headers = analyzeRequest.getHeaders();//获取headers,结果为字符串列表
    //遍历全部的代理头,如果是以Cookie开头则删除
    for (String header : headers){
        if (header.startsWith("Cookie")) {
            headers.remove(header);
        }
    }
    //添加新的代理头,即新的Cookie
    headers.add("Cookie: new cookie");
    //这里是遍历输出代理头
    for (String header : headers){
        stdout.println("header "+header);
    }
}

把代码打包jar文件导入bp插件看看什么效果

注意:这里的host不是代理头里面的host,准确的说,也不是替换,而是以一个新的host

导入插件后看logger++
并且从日志可以看出第二个请求确确实实访问的是www.baidu.com
上面代码写死了就是要访问www.baidu.com发起一个一模一样但cookie不同的请求

具体的数据包

至此我们所需要的功能就做完了

修改思路:如果在替换框里检测到Host,就建立一个新的service,以新的Host去发起请求

既然是修改源码那就必须知道需要修改的部分
源码目录如下

在代码中全局搜索找到含有makeHttpRequest的地方
在/src/com/protect7/authanalyzer/controller/RequestController.java发现如下

也就是说最后执行的service是由originalRequestResponse.getHttpService()得到的

修改这个service如下,让新的请求访问baidu,而其他不变

修改代码后打包成jar导入插件查看效果

至此,我们所需要的功能已经实现了

在原来的插件中,虽然把host替换成了xxx,但是访问的地址仍旧是原来的地址

我们需要做的就是把host真正替换掉,去访问替换后的host
修改源码如下

String newHost = "";
for(String header : modifiedHeaders){
    if (header.startsWith("Host")){
        newHost = header.substring(header.indexOf(":")+1);
    }
}
//上面的代码负责遍历已修改过的headers,找出修改后的Host并提取出来
//下面的代码负责使用提取到的Host,发起一个新的请求
IHttpService service = originalRequestResponse.getHttpService();
IHttpService newService = BurpExtender.callbacks.getHelpers().buildHttpService(newHost, service.getPort(), service.getProtocol());
IHttpRequestResponse sessionRequestResponse = BurpExtender.callbacks.makeHttpRequest(newService, message);

此时就可以完美解决开始我所提出的问题
使用方法和原来的插件是一样的
现有A网站的管理员和B网站的普通用户,AB网站使用同一套系统
插件配置如下

然后只需要登录A网站的管理员去尝试所有功能就可以跨站测试越权了
改也改完来了,扔到github上,有需要的自取吧
https://github.com/VVeakee/auth-analyzer-plus


文章来源: https://xz.aliyun.com/t/12363
如有侵权请联系:admin#unsafe.sh