[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/test502git/APIKit/main/src/main/java/burp/CookieManager.java [Back]  [Original]

package burp;

import burp.utils.CommonUtils;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class CookieManager implements IHttpListener {
    // 
    private final HashMap cookies = new HashMap();

    public static byte[] getRequest(IHttpService httpService, byte[] request) {
        IExtensionHelpers helpers = BurpExtender.getHelpers();

        byte[] newRequest;

        IRequestInfo requestInfo = helpers.analyzeRequest(httpService, request);
        List headers = requestInfo.getHeaders();
        List newHeaders = new ArrayList();

        newHeaders.add(headers.get(0));
        newHeaders.addAll(headers.subList(1, headers.size()).stream().filter(
                header -> !"cookie".equalsIgnoreCase(header.split(":", 2)[0])
        ).collect(Collectors.toList())); //  Cookie

        if (BurpExtender.getConfigPanel().getIncludeCookie()) {
            String cookieHeader = BurpExtender.getCookieManager().getCookieHeader(requestInfo.getUrl());
            if (cookieHeader != null) {
                newHeaders.add(cookieHeader);
            }

            newRequest = helpers.buildHttpMessage(newHeaders, CommonUtils.getHttpRequestBody(request));
        } else {
            newRequest = helpers.buildHttpMessage(newHeaders, CommonUtils.getHttpRequestBody(request));
        }
        return newRequest;
    }

    public static IHttpRequestResponse makeHttpRequest(IHttpService httpService, byte[] request) {
        byte[] newRequest = CookieManager.getRequest(httpService, request);
        return BurpExtender.getCallbacks().makeHttpRequest(httpService, newRequest);
    }

    private String urlToOrigin(URL url) {
        int port = url.getPort();
        if (port == -1) {
            if ("http".equals(url.getProtocol())) {
                port = 80;
            } else {
                port = 443;
            }
        }
        return url.getProtocol() + "://" + url.getHost() + ":" + port;
    }

    private HashMap parseCookie(String cookie) {
        HashMap result = new HashMap();
        String[] keyValuePairs = cookie.split(";");

        for (String keyValuePair : keyValuePairs) {
            keyValuePair = keyValuePair.trim();
            String[] keyValue = keyValuePair.split("=", 2);

            if ("".equals(keyValue[0])) {
                continue; //  key
            }

            if (keyValue.length == 2) {
                result.put(keyValue[0], keyValue[1]);
            } else {
                result.put(keyValue[0], "");
            }
        }
        return result;
    }

    private String joinCookieKeyValue(HashMap cookie) {
        StringBuilder builder = new StringBuilder(new String());

        for (Map.Entry entry : cookie.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
            builder.append(key);
            builder.append("=");
            builder.append(value);
            builder.append("; ");
        }
        return builder.toString();
    }

    @Override
    public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo) {
        if (messageIsRequest) {
            //  Cookie, , 

            IRequestInfo requestInfo = BurpExtender.getHelpers().analyzeRequest(messageInfo);
            String origin = this.urlToOrigin(requestInfo.getUrl());
            List headers = requestInfo.getHeaders();

            //  Cookie Header
            List cookies = headers.subList(1, headers.size()).stream().filter(
                    header -> "cookie".equalsIgnoreCase(header.split(":", 2)[0])
            ).collect(Collectors.toList());

            for (String cookieHeader : cookies) {
                String[] temp = cookieHeader.split(":", 2);
                if (temp.length == 2) {
                    HashMap cookie = this.parseCookie(temp[1]);

                    //  Cookie
                    if (this.cookies.get(origin) == null) {
                        this.cookies.put(origin, cookie);
                    } else {
                        this.cookies.get(origin).putAll(cookie);
                    }
                }
            }
        }
    }

    public String getCookieHeader(URL url) {
        HashMap cookie = this.cookies.get(this.urlToOrigin(url));
        if (cookie != null) {
            return "Cookie: " + this.joinCookieKeyValue(cookie);
        } else {
            return null;
        }
    }
}

Web Proxy Viewer  |  New URL  |  Original Page