If you are not familiar with the ZAP source code and you need fast way to add your own pattern, then you may struggle a lot. For this reason, here are some examples. The examples are written jpython, which is personal choice.
The example refers ZAP v2.3.
Set an additional HTTP Header
you need to add the code within your scan function. Here jpython template.
def scan(sas, msg, param, value): # Copy requests before reusing them msg = msg.cloneRequest(); # set a Http Header httpRequestHeader = msg.getRequestHeader(); httpRequestHeader.setHeader("additonalHeader","valueHeader"); msg.setRequestHeader(httpRequestHeader);
Append URL Query parameter with the following
import org.apache.commons.httpclient.URI; # append URL Query parameter ... ... uri=httpRequestHeader.getURI(); query=uri.getQuery(); # check if query string is empty if not query=="": query=query+"&testParam=Values"; else: query=query+"testParam=Value"; newURI=org.apache.commons.httpclient.URI(uri.getScheme() , None , uri.getHost(), uri.getPort(), uri.getPath(), query, uri.getFragment()); httpRequestHeader.setURI(newURI);
New Http Body of POST request
import org.zaproxy.zap.network.HttpRequestBody; ... ... # set a new HttpBody of POST reqest if msg.getRequestHeader().getMethod()=="POST": newBody=org.zaproxy.zap.network.HttpRequestBody("My New HttpBody"); msg.setRequestBody(newBody);
Append to existing HTTP Body
import org.zaproxy.zap.network.HttpRequestBody; ... ... # append a new line to the HttpBody if msg.getRequestHeader().getMethod()=="POST": newBody=org.zaproxy.zap.network.HttpRequestBody(msg.getRequestBody().toString() + "\nMy Added HttpBody"); msg.setRequestBody(newBody);
Please Note that if you put Body to GET request, the script will fail with timeout.
If you are puzzled where to put all these snippets,here is following hole scrip.
Note: The script down do not simulates attack or has general purpose. It shows how embedded code parts in default template with minimal change.
""" The scan function will typically be called for every parameter in every URL and Form for every page Note that new active scripts will initially be disabled Right click the script in the Scripts tree and select "enable" """ import org.zaproxy.zap.network.HttpRequestBody; import org.apache.commons.httpclient.URI; def scan(sas, msg, param, value): # Copy requests before reusing them msg = msg.cloneRequest(); # set a additional Header httpRequestHeader = msg.getRequestHeader(); httpRequestHeader.setHeader("additonalHeader","valueHeader"); msg.setRequestHeader(httpRequestHeader); # append URL Query parameter uri=httpRequestHeader.getURI(); query=uri.getQuery(); # check if query string is empty if not query=="": query=query+"&MyParam=Value"; else: query=query+"MyParam=Value"; newURI=org.apache.commons.httpclient.URI(uri.getScheme() , None , uri.getHost(), uri.getPort(), uri.getPath(), query, uri.getFragment()); httpRequestHeader.setURI(newURI); # set a new HttpBody of the reqest if msg.getRequestHeader().getMethod()=="POST": newBody=org.zaproxy.zap.network.HttpRequestBody("My New HttpBody"); msg.setRequestBody(newBody); # append a new line to the HttpBody if msg.getRequestHeader().getMethod()=="POST": newBody=org.zaproxy.zap.network.HttpRequestBody(msg.getRequestBody().toString() + "\nMy Added HttpBody"); msg.setRequestBody(newBody); print('Custom scan called for url=' + msg.getRequestHeader().getURI().toString()); # sendAndReceive(msg, followRedirect, handleAntiCSRFtoken) sas.sendAndReceive(msg, True, False); # Test the response here, and make other requests as required if (True): # Change to a test which detects the vulnerability # raiseAlert(risk, int reliability, String name, String description, String uri, # String param, String attack, String otherInfo, String solution, String evidence, # int cweId, int wascId, HttpMessage msg) # risk: 0: info, 1: low, 2: medium, 3: high # reliability: 0: falsePassitive, 1: suspicious, 2: warning sas.raiseAlert(1, 1, 'Active Vulnerability title', 'Full description', msg.getRequestHeader().getURI().toString(), param, 'Your attack', 'Any other info', 'The solution ', '', 0, 0, msg);
Enjoy your ZAP scripts
No comments:
Post a Comment