Skip to content

Commit 1c02b04

Browse files
committed
解决合并存在注释的分块内容失败问题
1 parent 9168c1c commit 1c02b04

File tree

2 files changed

+79
-7
lines changed

2 files changed

+79
-7
lines changed

src/main/java/burp/Transfer.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
* 编码解码类,负责对目标请求进行编码解码
88
*/
99
public class Transfer {
10+
public static final byte http_0 = 48;
11+
public static final byte http_r = 13; // \r
12+
public static final byte http_n = 10; // \n
1013
/**
1114
* 对请求包进行chunked编码
1215
* @param requestResponse 要处理的请求响应对象
@@ -110,7 +113,7 @@ public static byte[] splitReqBody(byte[] reqBody,int minChunkedLen,int maxChunke
110113
byte_encoding_body = joinByteArray(byte_encoding_body,b);
111114
byte_encoding_body = joinByteArray(byte_encoding_body,"\r\n".getBytes());
112115
}
113-
byte_encoding_body = joinByteArray(byte_encoding_body,"0\n\n".getBytes());
116+
byte_encoding_body = joinByteArray(byte_encoding_body,"0\r\n\r\n".getBytes());
114117
return byte_encoding_body;
115118
}
116119

@@ -134,7 +137,14 @@ public static byte[] mergeReqBody(byte[] chunkedReqBody){
134137
byte[] chunkedLen = new byte[length];
135138
System.arraycopy(chunkedReqBody, j, chunkedLen, 0, length);
136139
j = i + 2;
137-
int cLen = Util.hexToDecimal(new String(chunkedLen));
140+
int cLen;
141+
String strChunkedLen = new String(chunkedLen);
142+
if(strChunkedLen.contains(";")){// 如果存在注释
143+
cLen = Util.hexToDecimal(strChunkedLen.substring(0,strChunkedLen.indexOf(";")));
144+
}else{
145+
cLen = Util.hexToDecimal(strChunkedLen);
146+
}
147+
138148
// 根据分块长度获取分块内容
139149
byte[] chunked = new byte[cLen];
140150
System.arraycopy(chunkedReqBody, j, chunked, 0, cLen);
@@ -145,9 +155,11 @@ public static byte[] mergeReqBody(byte[] chunkedReqBody){
145155
}
146156

147157
// 处理结尾0\n\n
148-
if(chunkedReqBody[i] == "0".getBytes()[0]
149-
&& chunkedReqBody[i+1] == "\n".getBytes()[0]
150-
&& chunkedReqBody[i+2] == "\n".getBytes()[0]){
158+
if(chunkedReqBody[i] == http_0
159+
&& chunkedReqBody[i+1] == http_r
160+
&& chunkedReqBody[i+2] == http_n
161+
&& chunkedReqBody[i+2] == http_r
162+
&& chunkedReqBody[i+3] == http_n){
151163
break;
152164
}
153165
}

src/main/test/TransferTest.java

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,69 @@ public static void TestSplitReqBody(){
2121

2222
}
2323

24+
public static void TestOk(){
25+
String body = "3;IWFbM4mTXBxSq7cjU2ZOrdg\r\n" +
26+
"ser\r\n" +
27+
"1;XcM0dC2gATfT2cMaX\r\n" +
28+
"v\r\n" +
29+
"1;HL3RZyqc2kk5E2ZRu0djQOu\r\n" +
30+
"i\r\n" +
31+
"3;AwPNeJDu\r\n" +
32+
"ce=\r\n" +
33+
"1;kvFfaa9\r\n" +
34+
"h\r\n" +
35+
"1;VwZXqUfdKcL\r\n" +
36+
"t\r\n" +
37+
"3;g0IdgC\r\n" +
38+
"tps\r\n" +
39+
"2;EHIqC5t\r\n" +
40+
"%3\r\n" +
41+
"3;6P49NW26kLv\r\n" +
42+
"A%2\r\n" +
43+
"1;Mg1IZGijv5keoWV3Pex\r\n" +
44+
"F\r\n" +
45+
"2;gYn0nPRoS5xfLEvE\r\n" +
46+
"%2\r\n" +
47+
"1;XqBYhlH0KbqUD1TKk\r\n" +
48+
"F\r\n" +
49+
"1;ToE8BVCsBm5VKj0C\r\n" +
50+
"y\r\n" +
51+
"2;2FLXZwRSXUAQ6ilT5pggbHUE\r\n" +
52+
"un\r\n" +
53+
"1;BZoEH3S3GqHU4Gqj0QxKj3\r\n" +
54+
".\r\n" +
55+
"1;F5ddaFsfKx1MTjMEedJh\r\n" +
56+
"s\r\n" +
57+
"2;eqijFldn5Cga4tLA\r\n" +
58+
"cn\r\n" +
59+
"3;Vcb0BzTALRJKv6ji9duogGfwO\r\n" +
60+
"yw.\r\n" +
61+
"2;BVGq0Efdg\r\n" +
62+
"co\r\n" +
63+
"2;fvCiZ\r\n" +
64+
"m%\r\n" +
65+
"3;12ViYBzk3q67b\r\n" +
66+
"2Fp\r\n" +
67+
"1;Lb1uT4\r\n" +
68+
"o\r\n" +
69+
"1;brgH3py6bSqWI1qK\r\n" +
70+
"r\r\n" +
71+
"3;pNtzewGd2XM3lAH\r\n" +
72+
"tal\r\n" +
73+
"3;5NAfSvlZmv0D\r\n" +
74+
"%2F\r\n" +
75+
"0\n" +
76+
"\n";
77+
78+
byte[] newBody = Transfer.mergeReqBody(body.getBytes());
79+
System.out.println(new String(newBody));
80+
81+
}
82+
2483
public static void main(String[] args) {
25-
TestMergeReqBody();
26-
TestSplitReqBody();
84+
// TestMergeReqBody();
85+
// TestSplitReqBody();
86+
TestOk();
2787
}
2888
}
2989

0 commit comments

Comments
 (0)