Skip to content

Commit 59b6864

Browse files
authored
Merge pull request zaproxy#9214 from kingthorin/issue-9208-multipart
For multipart form-data use the non-normalized boundary when extracting
2 parents 33a8aef + 7038ca7 commit 59b6864

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

zap/src/main/java/org/parosproxy/paros/core/scanner/VariantMultipartFormParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void setMessage(HttpMessage msg) {
7979
}
8080

8181
try {
82-
parseImpl(msg, contentType);
82+
parseImpl(msg, msg.getRequestHeader().getHeader(HttpHeader.CONTENT_TYPE));
8383
} catch (Exception e) {
8484
LOGGER.error("An error occurred while parsing multipart content:", e);
8585
}

zap/src/test/java/org/parosproxy/paros/core/scanner/VariantMultipartFormParametersUnitTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.parosproxy.paros.network.HttpHeader;
3737
import org.parosproxy.paros.network.HttpMalformedHeaderException;
3838
import org.parosproxy.paros.network.HttpMessage;
39+
import org.parosproxy.paros.network.HttpRequestHeader;
3940
import org.zaproxy.zap.core.scanner.InputVector.PayloadFormat;
4041
import org.zaproxy.zap.core.scanner.InputVectorBuilder;
4142

@@ -312,6 +313,53 @@ void shouldExtractParametersFromAllPartsEvenIfSomeAreEmpty() {
312313
is(equalTo(NameValuePair.TYPE_MULTIPART_DATA_FILE_PARAM)));
313314
}
314315

316+
@Test
317+
void shouldExtractParametersWhenBoundyHasMixedCapitalization()
318+
throws HttpMalformedHeaderException {
319+
// Given
320+
VariantMultipartFormParameters variant = new VariantMultipartFormParameters();
321+
HttpRequestHeader reqHdr =
322+
new HttpRequestHeader(
323+
"""
324+
POST https://127.0.0.1:8000/login HTTP/1.1
325+
host: 127.0.0.1:8000
326+
User-Agent: curl/8.7.1
327+
Accept: */*
328+
Content-Length: 282
329+
Content-Type: multipart/form-data; boundary=------------------------o4XsAqQ54LPupcrI0dfahp
330+
""");
331+
String body =
332+
"""
333+
--------------------------o4XsAqQ54LPupcrI0dfahp\r
334+
Content-Disposition: form-data; name="email"\r
335+
\r
336+
test@example.com\r
337+
--------------------------o4XsAqQ54LPupcrI0dfahp\r
338+
Content-Disposition: form-data; name="password"\r
339+
\r
340+
testpass123\r
341+
--------------------------o4XsAqQ54LPupcrI0dfahp--\r
342+
\r
343+
""";
344+
HttpMessage message = new HttpMessage(reqHdr);
345+
message.setRequestBody(body);
346+
// When
347+
variant.setMessage(message);
348+
// Then
349+
assertThat(variant.getParamList().get(0).getPosition(), is(equalTo(1)));
350+
assertThat(variant.getParamList().get(0).getName(), is(equalTo("email")));
351+
assertThat(variant.getParamList().get(0).getValue(), is(equalTo("test@example.com")));
352+
assertThat(
353+
variant.getParamList().get(0).getType(),
354+
is(equalTo(NameValuePair.TYPE_MULTIPART_DATA_PARAM)));
355+
assertThat(variant.getParamList().get(1).getPosition(), is(equalTo(2)));
356+
assertThat(variant.getParamList().get(1).getName(), is(equalTo("password")));
357+
assertThat(variant.getParamList().get(1).getValue(), is(equalTo("testpass123")));
358+
assertThat(
359+
variant.getParamList().get(1).getType(),
360+
is(equalTo(NameValuePair.TYPE_MULTIPART_DATA_PARAM)));
361+
}
362+
315363
@Test
316364
void shouldInjectParamValueModificationInGeneralParam() {
317365
// Given

0 commit comments

Comments
 (0)