首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OWASP :向每个请求添加参数

OWASP :向每个请求添加参数
EN

Security用户
提问于 2020-03-04 22:00:56
回答 2查看 2.1K关注 0票数 0

我正在测试一个网站,它大量使用REST端点。身份验证之后,应用程序将身份验证令牌添加为每个请求的一部分,形式如下:

代码语言:javascript
复制
OPTIONS
https://www.target.com/api/Action/some-action?data=foobar&access_token=THISISTHETOKEN
User-Agent: ...
Accept: */*
..
Host: target.com
Length: 0

我如何强制每个请求(在蜘蛛,扫描仪等内部)使用此预定义参数使我可以通过浏览器进行身份验证?

更新:

我尝试创建一个Http Sender脚本,但在修改http url参数时失败了:

代码语言:javascript
复制
function sendingRequest(msg, initiator, helper) {
    var token = org.parosproxy.paros.network.HtmlParameter
    token.setType(org.parosproxy.paros.network.HtmlParameter.Type.url)
    token.setName('access_token')
    token.setValue('foo')
    print('token: ' + String(token))
    msg.getUrlParams().add(token)
    print(msg.getUrlParams())
}
EN

回答 2

Security用户

发布于 2020-03-04 23:53:22

您可以设置置换器规则或创建Http发件人脚本

对于替换规则,选择类型为"Request“,然后将regex设置为类似于(http://example.org.*)的类型,并设置替换类型类似于$1?myParamToAdd=someValue (注意,此替换器示例未经测试)。

对于一个HttpSender脚本,下面这样的脚本应该可以工作:

代码语言:javascript
复制
var URL_TYPE    = org.parosproxy.paros.network.HtmlParameter.Type.url;
var HtmlParameter = Java.type('org.parosproxy.paros.network.HtmlParameter');

var paramName = 'myParamToAdd';
var paramValue = 'someValuetoAdd';

function sendingRequest(msg, initiator, helper) {
  if (!msg.getRequestHeader().getURI().toString().contains(paramName + '=' + paramValue)) {
    //You might want to add a check here for the proper domain or path as well..
    var urlParams = msg.getUrlParams();
    var newParam = new HtmlParameter(URL_TYPE, paramName, paramValue);
    urlParams.add(newParam); // you could print this if you need to see what's up
    msg.setGetParams(urlParams);
  }
  return msg;
}

function responseReceived(msg, initiator, helper) {
  //Nothing to do here
}
票数 4
EN

Security用户

发布于 2020-03-05 14:34:39

最后,以下HTTP发件人脚本对我起了作用:

代码语言:javascript
复制
var URL_TYPE   = org.parosproxy.paros.network.HtmlParameter.Type.url;
var authTokenName = 'access_token'
var authTokenValue = 'xrVNjdzmUomrpFcoyliUQYvfpgGPF5q8e2kCQNfhcs6pzO4yh22RACvSGNCeuMMg'

function sendingRequest(msg, initiator, helper) {
    var urlParams = msg.getUrlParams();
        // print ("Url Params before update: " + urlParams);
     var updatedUrlParams = modifyParams(urlParams);
     // print ("Url Params after update: " + updatedUrlParams);
     msg.setGetParams(updatedUrlParams);
}

function modifyParams(params) {
    var hasAccessToken = 0
    var iterator = params.iterator();
    while(iterator.hasNext()) {
        var param = iterator.next();
        // Check if the url parameters has the antiCsrfTokenName in it.
       //print('param:' + param.getName())
        if (param.getName().equals(authTokenName)) {
            var secureTokenValue = param.getValue();
          print('[i] auth:' + secureTokenValue)
            hasAccessToken = 1            
        }
    }
    if(hasAccessToken==0){
        print('[i] no token. Update query.')

        var HtmlParameter = Java.type('org.parosproxy.paros.network.HtmlParameter')
        var newParam = new HtmlParameter(URL_TYPE, authTokenName, authTokenValue);

        params.add(newParam) 
        print('[i] mod auth:' + params) 

    }

    return params;
}


function responseReceived(msg, initiator, helper) {
    // Debugging can be done using println like this
    //print('responseReceived called for url=' + msg.getRequestHeader().getURI().toString())
}
票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/226847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档