Files
HaE/src/main/java/burp/action/ProcessMessage.java

93 lines
3.7 KiB
Java
Raw Normal View History

2021-10-21 23:42:15 +08:00
package burp.action;
import burp.IExtensionHelpers;
import java.util.ArrayList;
import java.util.Arrays;
2022-04-08 17:21:40 +08:00
import java.util.HashMap;
2021-10-21 23:42:15 +08:00
import java.util.List;
import java.util.Map;
public class ProcessMessage {
MatchHTTP mh = new MatchHTTP();
ExtractContent ec = new ExtractContent();
DoAction da = new DoAction();
GetColorKey gck = new GetColorKey();
UpgradeColor uc = new UpgradeColor();
2022-06-23 15:34:22 +08:00
public List<Map<String, String>> processMessageByContent(IExtensionHelpers helpers, byte[] content, boolean isRequest, boolean messageInfo, String host) {
2022-04-08 17:21:40 +08:00
List<Map<String, String>> result = new ArrayList<>();;
2021-10-21 23:42:15 +08:00
Map<String, Map<String, Object>> obj;
if (isRequest) {
2022-01-11 14:46:25 +08:00
// 获取报文头
List<String> requestTmpHeaders = helpers.analyzeRequest(content).getHeaders();
String requestHeaders = String.join("\n", requestTmpHeaders);
2021-10-21 23:42:15 +08:00
try {
// 流量清洗
2022-01-11 14:46:25 +08:00
String urlString = requestTmpHeaders.get(0).split(" ")[1];
2021-10-21 23:42:15 +08:00
urlString = urlString.indexOf("?") > 0 ? urlString.substring(0, urlString.indexOf("?")) : urlString;
// 正则判断
if (mh.matchSuffix(urlString)) {
return result;
}
} catch (Exception e) {
return result;
}
2022-01-11 14:46:25 +08:00
2021-10-21 23:42:15 +08:00
// 获取报文主体
2022-01-11 14:46:25 +08:00
int requestBodyOffset = helpers.analyzeRequest(content).getBodyOffset();
2021-10-21 23:42:15 +08:00
byte[] requestBody = Arrays.copyOfRange(content, requestBodyOffset, content.length);
2022-06-23 15:34:22 +08:00
obj = ec.matchRegex(content, requestHeaders, requestBody, "request", host);
2021-10-21 23:42:15 +08:00
} else {
try {
// 流量清洗
String inferredMimeType = String.format("hae.%s", helpers.analyzeResponse(content).getInferredMimeType().toLowerCase());
String statedMimeType = String.format("hae.%s", helpers.analyzeResponse(content).getStatedMimeType().toLowerCase());
// 正则判断
if (mh.matchSuffix(statedMimeType) || mh.matchSuffix(inferredMimeType)) {
return result;
}
} catch (Exception e) {
return result;
}
// 获取报文头
List<String> responseTmpHeaders = helpers.analyzeResponse(content).getHeaders();
String responseHeaders = String.join("\n", responseTmpHeaders);
// 获取报文主体
int responseBodyOffset = helpers.analyzeResponse(content).getBodyOffset();
byte[] responseBody = Arrays.copyOfRange(content, responseBodyOffset, content.length);
2022-06-23 15:34:22 +08:00
obj = ec.matchRegex(content, responseHeaders, responseBody, "response", host);
2021-10-21 23:42:15 +08:00
}
2022-06-23 15:34:22 +08:00
if (obj.size() > 0) {
if (messageInfo) {
List<List<String>> resultList = da.highlightAndComment(obj);
List<String> colorList = resultList.get(0);
List<String> commentList = resultList.get(1);
if (colorList.size() != 0 && commentList.size() != 0) {
String color = uc.getEndColor(gck.getColorKeys(colorList));
Map<String, String> colorMap = new HashMap<String, String>(){{
put("color", color);
}};
Map<String, String> commentMap = new HashMap<String, String>(){{
put("comment", String.join(", ", commentList));
}};
result.add(colorMap);
result.add(commentMap);
}
} else {
2021-10-21 23:42:15 +08:00
result.add(da.extractString(obj));
}
}
return result;
}
}