mirror of
https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite.git
synced 2025-12-06 00:51:28 +00:00
f
This commit is contained in:
@@ -51,77 +51,76 @@ if ! [ "$SEARCH_IN_FOLDER" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# If no candidates detected, exit quietly
|
# If no candidates detected, exit quietly
|
||||||
if [ -z "$candidates" ]; then
|
if [ "$candidates" ]; then
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Iterate candidates and extract interesting data
|
# Iterate candidates and extract interesting data
|
||||||
printf "%s\n" "$candidates" | while read -r svc; do
|
printf "%s\n" "$candidates" | while read -r svc; do
|
||||||
[ -n "$svc" ] || continue
|
[ -n "$svc" ] || continue
|
||||||
# Ensure suffix .service if missing
|
# Ensure suffix .service if missing
|
||||||
case "$svc" in
|
case "$svc" in
|
||||||
*.service) : ;;
|
*.service) : ;;
|
||||||
*) svc="$svc.service" ;;
|
*) svc="$svc.service" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
state=""
|
state=""
|
||||||
user=""
|
user=""
|
||||||
if command -v systemctl >/dev/null 2>&1; then
|
if command -v systemctl >/dev/null 2>&1; then
|
||||||
state=$(systemctl is-active "$svc" 2>/dev/null)
|
state=$(systemctl is-active "$svc" 2>/dev/null)
|
||||||
user=$(systemctl show "$svc" -p User 2>/dev/null | cut -d= -f2)
|
user=$(systemctl show "$svc" -p User 2>/dev/null | cut -d= -f2)
|
||||||
fi
|
|
||||||
|
|
||||||
[ -z "$state" ] && state="unknown"
|
|
||||||
[ -z "$user" ] && user="unknown"
|
|
||||||
|
|
||||||
echo "Service: $svc (state: $state, User: $user)" | sed -${E} "s,root,${SED_RED},g"
|
|
||||||
|
|
||||||
# Read Environment from systemd (works even if file unreadable in many setups)
|
|
||||||
envvals=$(systemctl show "$svc" -p Environment 2>/dev/null | cut -d= -f2-)
|
|
||||||
if [ -n "$envvals" ]; then
|
|
||||||
basic_user=$(printf "%s\n" "$envvals" | tr ' ' '\n' | grep -E '^BASIC_AUTH_USER=' | head -n1 | cut -d= -f2-)
|
|
||||||
basic_pwd=$(printf "%s\n" "$envvals" | tr ' ' '\n' | grep -E '^BASIC_AUTH_PWD=' | head -n1 | cut -d= -f2-)
|
|
||||||
dbpath=$(printf "%s\n" "$envvals" | tr ' ' '\n' | grep -E '^CRON_DB_PATH=' | head -n1 | cut -d= -f2-)
|
|
||||||
port=$(printf "%s\n" "$envvals" | tr ' ' '\n' | grep -E '^PORT=' | head -n1 | cut -d= -f2-)
|
|
||||||
|
|
||||||
if [ -n "$basic_user" ] || [ -n "$basic_pwd" ]; then
|
|
||||||
uprint="$basic_user"
|
|
||||||
pprint="$basic_pwd"
|
|
||||||
[ -n "$basic_pwd" ] && pprint="$basic_pwd"
|
|
||||||
echo " └─ Basic-Auth credentials in Environment: user='${uprint}' pwd='${pprint}'" | sed -${E} "s,pwd='[^']*',${SED_RED_YELLOW},g"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$dbpath" ]; then
|
[ -z "$state" ] && state="unknown"
|
||||||
echo " └─ CRON_DB_PATH: $dbpath"
|
[ -z "$user" ] && user="unknown"
|
||||||
fi
|
|
||||||
|
|
||||||
# Check listener bound to localhost
|
echo "Service: $svc (state: $state, User: $user)" | sed -${E} "s,root,${SED_RED},g"
|
||||||
[ -z "$port" ] && port=8000
|
|
||||||
if command -v ss >/dev/null 2>&1; then
|
# Read Environment from systemd (works even if file unreadable in many setups)
|
||||||
if ss -ltn 2>/dev/null | grep -qE "127\.0\.0\.1:${port}[[:space:]]"; then
|
envvals=$(systemctl show "$svc" -p Environment 2>/dev/null | cut -d= -f2-)
|
||||||
echo " └─ Listener detected on 127.0.0.1:${port} (likely Crontab UI)."
|
if [ -n "$envvals" ]; then
|
||||||
|
basic_user=$(printf "%s\n" "$envvals" | tr ' ' '\n' | grep -E '^BASIC_AUTH_USER=' | head -n1 | cut -d= -f2-)
|
||||||
|
basic_pwd=$(printf "%s\n" "$envvals" | tr ' ' '\n' | grep -E '^BASIC_AUTH_PWD=' | head -n1 | cut -d= -f2-)
|
||||||
|
dbpath=$(printf "%s\n" "$envvals" | tr ' ' '\n' | grep -E '^CRON_DB_PATH=' | head -n1 | cut -d= -f2-)
|
||||||
|
port=$(printf "%s\n" "$envvals" | tr ' ' '\n' | grep -E '^PORT=' | head -n1 | cut -d= -f2-)
|
||||||
|
|
||||||
|
if [ -n "$basic_user" ] || [ -n "$basic_pwd" ]; then
|
||||||
|
uprint="$basic_user"
|
||||||
|
pprint="$basic_pwd"
|
||||||
|
[ -n "$basic_pwd" ] && pprint="$basic_pwd"
|
||||||
|
echo " └─ Basic-Auth credentials in Environment: user='${uprint}' pwd='${pprint}'" | sed -${E} "s,pwd='[^']*',${SED_RED_YELLOW},g"
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
if netstat -tnl 2>/dev/null | grep -qE "127\.0\.0\.1:${port}[[:space:]]"; then
|
|
||||||
echo " └─ Listener detected on 127.0.0.1:${port} (likely Crontab UI)."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If we know DB path, try to read crontab.db for obvious secrets and check perms
|
if [ -n "$dbpath" ]; then
|
||||||
if [ -n "$dbpath" ] && [ -d "$dbpath" ] && [ -r "$dbpath" ]; then
|
echo " └─ CRON_DB_PATH: $dbpath"
|
||||||
dbfile="$dbpath/crontab.db"
|
fi
|
||||||
if [ -f "$dbfile" ]; then
|
|
||||||
perms=$(ls -ld "$dbpath" 2>/dev/null | awk '{print $1, $3, $4}')
|
# Check listener bound to localhost
|
||||||
echo " └─ DB dir perms: $perms"
|
[ -z "$port" ] && port=8000
|
||||||
if [ -w "$dbpath" ] || [ -w "$dbfile" ]; then
|
if command -v ss >/dev/null 2>&1; then
|
||||||
echo " └─ Writable by current user -> potential job injection!" | sed -${E} "s,.*,${SED_RED},g"
|
if ss -ltn 2>/dev/null | grep -qE "127\.0\.0\.1:${port}[[:space:]]"; then
|
||||||
|
echo " └─ Listener detected on 127.0.0.1:${port} (likely Crontab UI)."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if netstat -tnl 2>/dev/null | grep -qE "127\.0\.0\.1:${port}[[:space:]]"; then
|
||||||
|
echo " └─ Listener detected on 127.0.0.1:${port} (likely Crontab UI)."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If we know DB path, try to read crontab.db for obvious secrets and check perms
|
||||||
|
if [ -n "$dbpath" ] && [ -d "$dbpath" ] && [ -r "$dbpath" ]; then
|
||||||
|
dbfile="$dbpath/crontab.db"
|
||||||
|
if [ -f "$dbfile" ]; then
|
||||||
|
perms=$(ls -ld "$dbpath" 2>/dev/null | awk '{print $1, $3, $4}')
|
||||||
|
echo " └─ DB dir perms: $perms"
|
||||||
|
if [ -w "$dbpath" ] || [ -w "$dbfile" ]; then
|
||||||
|
echo " └─ Writable by current user -> potential job injection!" | sed -${E} "s,.*,${SED_RED},g"
|
||||||
|
fi
|
||||||
|
echo " └─ Inspecting $dbfile for embedded secrets in commands (zip -P / --password / pass/token/secret)..."
|
||||||
|
grep -E "-P[[:space:]]+\S+|--password[[:space:]]+\S+|[Pp]ass(word)?|[Tt]oken|[Ss]ecret" "$dbfile" 2>/dev/null | head -n 20 | sed -${E} "s,(${SED_RED_YELLOW}),\1,g"
|
||||||
fi
|
fi
|
||||||
echo " └─ Inspecting $dbfile for embedded secrets in commands (zip -P / --password / pass/token/secret)..."
|
|
||||||
grep -E "-P[[:space:]]+\S+|--password[[:space:]]+\S+|[Pp]ass(word)?|[Tt]oken|[Ss]ecret" "$dbfile" 2>/dev/null | head -n 20 | sed -${E} "s,(${SED_RED_YELLOW}),\1,g"
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
echo ""
|
||||||
echo ""
|
done
|
||||||
done
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user