#!/bin/bash
#########################################################################################################
#########################################################################################################
if [ "#" -lt 1 ]; then
script_name=(basename "$0")
echo "Usage:"
echo " scriptname[BASESEARCHFOLDER]"echo""echo"Callexample:"echo"script_name /apps"
exit 1
fi
JAR_FOUND=0
TARGET_CLASS_NAME="org/apache/logging/log4j/core/lookup/JndiLookup.class"
APP_LIBS_FOLDER=$1
WORK_FOLDER=/tmp/work
JAR_WORK_FOLDER=/tmp/jarwork
NESTED_JAR_WORK_FOLDER=/tmp/nestedjarwork
CDIR=$(pwd)
OIFS="IFS"IFS='\n'
inspect_folder (){
folder_location=$1
for jar_lib in (find"folder_location" -type f -iname ".jar")
do
inspect_jar_file "jar_lib"
done
}
inspect_jar_file(){
jar_file_location=\1
find=(unzip−l"jar_file_location" | grep -c "TARGETCLASSNAME")if[find -ne 0 ]
then
JAR_FOUND=1
echo ""
echo -e "\e[91m[!] Class found in the file 'jarfilelocation′.\e[0m"echo−e"\e[93m[+]TrytofindtheMavenartefactversion...\e[0m"rm−rf"JAR_WORK_FOLDER" 2>/dev/null
mkdir "JARWORKFOLDER"unzip−q−d"JAR_WORK_FOLDER" "jarfilelocation"chmod−R+r"JAR_WORK_FOLDER"
cd JARWORKFOLDERforfin(grep -r "groupId\s=\s*org.apache.logging.log4j" )
do
file_loc=(echof | cut -d":" -f1)
artefact_version=(grep−Po"version\s∗=\s∗.∗""file_loc" | sed 's/version=//g')
echo "File : jarfilelocation"echo"Metadatafile:file_loc"
echo "Log4J version : artefactversion"donecdCDIR
rm -rf JAR_WORK_FOLDER 2>/dev/null
fi
# Handle nested jar case
has_nested_jar=(unzip -l "jarfilelocation"∣grep"j˙ar" | grep -cv "Archive:")
if [ hasnestedjar−ne0]thennestedjarlibname="(basename "jar_file_location")_RANDOM"
mkdir -p "NESTEDJARWORKFOLDER/nestedjar_lib_name"
unzip -q -d "NESTEDJARWORKFOLDER/nestedjar_lib_name" "jarfilelocation"chmod−R+r"NESTED_JAR_WORK_FOLDER/nestedjarlibname"inspectfolder"NESTED_JAR_WORK_FOLDER/nestedjar_lib_name"
fi
}
echo -e "\e[93m[+] Searching class 'TARGET_CLASS_NAME' across 'APPLIBSFOLDER′folder...\e[0m"forlibin(find "APPLIBSFOLDER"−typef−iname"∗.jar"−o−iname"∗.war"−o−iname"∗.ear")dofilename=(basename "lib")filename="filename"
extension="{filename##*.}"
printf "\r[*] Inspecting file: %-80s" filename
if [ extension=="ear"]thenrm−rfWORK_FOLDER 2>/dev/null
mkdir WORKFOLDERunzip−q−dWORK_FOLDER "lib"chmod−R+rWORK_FOLDER
for war_lib in (findWORK_FOLDER -type f -iname ".war")
do
war_lib_name="(basename"war_lib")_RANDOM"warlibfolder="WORK_FOLDER/warlibname"mkdir"war_lib_folder"
unzip -q -d "warlibfolder""war_lib"
chmod -R +r "warlibfolder"doneinspectfolder"WORK_FOLDER"
rm -rf "WORKFOLDER"2>/dev/nullfiif[extension == "war" ]
then
rm -rf WORKFOLDER2>/dev/nullwarlibname="(basename "lib")_RANDOM"
war_lib_folder=WORKFOLDER/war_lib_name
mkdir -p "warlibfolder"unzip−q−d"war_lib_folder" "lib"chmod−R+r"war_lib_folder"
inspect_folder "WORKFOLDER"rm−rfWORK_FOLDER 2>/dev/null
fi
if [ extension=="jar"]theninspectjarfile"lib"
fi
done
printf "\r%-100s" " "
if [ JARFOUND−eq0]thenecho−e"\e˚[92m[V]Inspectionfinished−Classnotfound!\e[0m\n"elseecho−ne"\e˚[91m[!]Inspectionfinished−Classfound!\e[0m\n"fiIFS="OIFS"
rm -rf "NESTEDJARWORKFOLDER"2>/dev/nullexitJAR_FOUND