我正在测试一个网站,它大量使用REST端点。身份验证之后,应用程序将身份验证令牌添加为每个请求的一部分,形式如下:
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参数时失败了:
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())
}发布于 2020-03-04 23:53:22
对于替换规则,选择类型为"Request“,然后将regex设置为类似于(http://example.org.*)的类型,并设置替换类型类似于$1?myParamToAdd=someValue (注意,此替换器示例未经测试)。
对于一个HttpSender脚本,下面这样的脚本应该可以工作:
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
}发布于 2020-03-05 14:34:39
最后,以下HTTP发件人脚本对我起了作用:
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())
}https://security.stackexchange.com/questions/226847
复制相似问题