1 package com.jsql.util; 2 3 import com.jsql.model.InjectionModel; 4 import com.jsql.model.exception.JSqlException; 5 import org.apache.commons.lang3.StringUtils; 6 import org.apache.logging.log4j.LogManager; 7 import org.apache.logging.log4j.Logger; 8 9 import java.util.AbstractMap; 10 import java.util.List; 11 import java.util.stream.Collectors; 12 import java.util.stream.Stream; 13 14 public class CookiesUtil { 15 16 private static final Logger LOGGER = LogManager.getRootLogger(); 17 18 private final InjectionModel injectionModel; 19 20 public CookiesUtil(InjectionModel injectionModel) { 21 this.injectionModel = injectionModel; 22 } 23 24 public boolean testParameters(boolean hasFoundInjection) { 25 if (!hasFoundInjection) { 26 if (!this.injectionModel.getMediatorUtils().getPreferencesUtil().isCheckingAllCookieParam()) { 27 return false; 28 } 29 LOGGER.log(LogLevelUtil.CONSOLE_DEFAULT, "{} cookies...", () -> I18nUtil.valueByKey("LOG_CHECKING")); 30 } else { 31 return true; 32 } 33 34 String rawHeader = this.injectionModel.getMediatorUtils().getParameterUtil().getRawHeader(); 35 36 List<AbstractMap.SimpleEntry<String, String>> cookies = this.injectionModel.getMediatorUtils().getParameterUtil().getListHeader() 37 .stream() 38 .filter(entry -> "cookie".equalsIgnoreCase(entry.getKey())) 39 .findFirst() 40 .map(cookieHeader -> cookieHeader.getValue().split(";")) 41 .stream() 42 .flatMap(Stream::of) 43 .filter(cookie -> cookie != null && cookie.contains("=")) 44 .map(cookie -> cookie.split("=", 2)) 45 .map(arrayEntry -> new AbstractMap.SimpleEntry<>( 46 arrayEntry[0].trim(), 47 arrayEntry[1] == null ? StringUtils.EMPTY : arrayEntry[1].trim() 48 )) 49 .collect(Collectors.toList()); 50 51 for (AbstractMap.SimpleEntry<String, String> cookie: cookies) { 52 String keyValue = cookie.getKey() + "=" + cookie.getValue(); 53 String headerCookieWithStar = rawHeader.replace(keyValue, keyValue + InjectionModel.STAR); 54 55 this.injectionModel.getMediatorUtils().getParameterUtil().initHeader(headerCookieWithStar); 56 57 try { 58 LOGGER.log( 59 LogLevelUtil.CONSOLE_DEFAULT, 60 "{} cookie {}={}", 61 () -> I18nUtil.valueByKey("LOG_CHECKING"), 62 cookie::getKey, 63 () -> cookie.getValue().replace(InjectionModel.STAR, StringUtils.EMPTY) 64 ); 65 if (this.injectionModel.getMediatorMethod().getHeader().testParameters()) { 66 return true; 67 } 68 } catch (JSqlException e) { 69 LOGGER.log( 70 LogLevelUtil.CONSOLE_ERROR, 71 String.format( 72 "No Cookie injection for %s=%s", 73 cookie.getKey(), 74 cookie.getValue().replace(InjectionModel.STAR, StringUtils.EMPTY) 75 ) 76 ); 77 } 78 } 79 return false; 80 } 81 }