Skip to main content

Documentation Index

Fetch the complete documentation index at: https://hackbook.dudji.com/llms.txt

Use this file to discover all available pages before exploring further.

System Logs

Logs are the system’s memory. They record who logged in, what commands ran, which services failed, and what data moved. For a pentester, they’re both a target to pillage and a threat to cover.

The Mindset

System logs matter to a pentester from two angles:
  • Offensive — Logs contain credentials, activity trails, internal hostnames, and evidence of what’s running on the system
  • Defensive awareness — Understanding what gets logged tells you what traces you’re leaving behind
Every action you take on a compromised system is potentially being logged somewhere. Know what those sources are.

Log Locations Overview

Log FileWhat It Records
/var/log/auth.logSSH logins, sudo usage, PAM authentication (Debian/Ubuntu)
/var/log/secureSame as auth.log on RHEL/CentOS
/var/log/syslogGeneral system events, service starts/stops, cron
/var/log/kern.logKernel messages, hardware events, driver issues
/var/log/messagesGeneral messages (RHEL/CentOS equivalent of syslog)
/var/log/dpkg.logPackage installs and removals
/var/log/apache2/access.logHTTP requests to Apache
/var/log/apache2/error.logApache errors — often reveals paths and configs
/var/log/nginx/access.logHTTP requests to Nginx
/var/log/mysql/error.logMySQL errors and startups
/var/log/postgresql/PostgreSQL activity
/var/log/fail2ban.logBlocked IPs, ban events
/var/log/ufw.logFirewall allow/deny events
/var/log/mail.logMail server activity
/var/log/journal/Systemd journal (binary — read with journalctl)

Reading Logs

Basic Log Reading

# Read a full log
cat /var/log/syslog

# Last 50 lines (most recent activity)
tail -50 /var/log/auth.log

# Follow in real time
tail -f /var/log/auth.log

# First 20 lines
head -20 /var/log/syslog

# Page through a large log
less /var/log/syslog

Filtering Log Output

# Search for a specific string
grep "Failed password" /var/log/auth.log

# Case-insensitive search
grep -i "error" /var/log/syslog

# Show lines around a match (context)
grep -A 3 -B 3 "authentication failure" /var/log/auth.log

# Filter by date
grep "May 20" /var/log/auth.log

# Count occurrences
grep "Failed password" /var/log/auth.log | wc -l

Authentication Logs

/var/log/auth.log (Debian/Ubuntu) or /var/log/secure (RHEL/CentOS) is the most valuable log for a pentester. It records every login attempt, sudo command, and session event.
cat /var/log/auth.log
What to look for:
# Successful SSH logins — who logged in and from where
grep "Accepted" /var/log/auth.log
# Feb 28 18:15:01 sshd[5678]: Accepted publickey for admin from 10.14.15.2 port 43210

# Failed login attempts — brute force evidence, valid usernames
grep "Failed password" /var/log/auth.log
# Feb 28 15:04:22 sshd[3010]: Failed password for htb-student from 10.14.15.2 port 50223

# Sudo commands run — what privileged actions were taken
grep "sudo" /var/log/auth.log
# Feb 28 18:15:03 sudo: admin : TTY=pts/1 ; PWD=/home/admin ; USER=root ; COMMAND=/bin/bash

# New sessions created
grep "session opened" /var/log/auth.log

# su usage — user switching
grep "session opened for user" /var/log/auth.log
Pentest intel from auth.log:
# All unique IPs that attempted to log in
grep "Failed password\|Accepted" /var/log/auth.log | grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" | sort -u

# All usernames that were attempted (valid + invalid)
grep "Failed password" /var/log/auth.log | awk '{print $9}' | sort | uniq -c | sort -rn

# All commands run via sudo
grep "COMMAND" /var/log/auth.log | awk -F"COMMAND=" '{print $2}' | sort -u

System Logs

cat /var/log/syslog | tail -100
What to look for:
# Cron job execution — what ran and when
grep "CRON" /var/log/syslog
# Feb 28 15:00:01 server CRON[2715]: (root) CMD (/usr/local/bin/backup.sh)

# Service starts and stops
grep "systemd\[1\]" /var/log/syslog | grep -E "Started|Stopped|Failed"

# Network events
grep "NetworkManager\|dhclient" /var/log/syslog

# Errors and warnings
grep -E "error|warning|failed" /var/log/syslog -i | tail -30
Cron entries in syslog show you exactly what scripts run as root and when — cross-reference with the actual scripts to find hijack opportunities.

Kernel Logs

cat /var/log/kern.log | tail -50

# Also accessible via dmesg
dmesg | tail -50
dmesg | grep -i "error\|fail\|usb\|eth"
What to look for:
# Driver and hardware issues (may reveal kernel version weaknesses)
grep -i "error\|fail" /var/log/kern.log

# USB device connections (removable media activity)
dmesg | grep -i "usb\|storage"

# Network interface events
dmesg | grep -i "eth\|wlan\|link"

# Out-of-memory events (reveals memory pressure — useful for DoS research)
grep "Out of memory\|oom" /var/log/kern.log

Application Logs

Web Server Logs

# Apache access log — every HTTP request
cat /var/log/apache2/access.log | tail -50

# Apache error log — application errors, path disclosures
cat /var/log/apache2/error.log | tail -50

# Nginx
cat /var/log/nginx/access.log | tail -50
cat /var/log/nginx/error.log | tail -50
Hunting credentials in web logs:
# Credentials passed in GET parameters (bad practice but it happens)
grep -E "password=|passwd=|pass=|token=|key=|secret=" /var/log/apache2/access.log

# POST data isn't logged by default, but errors sometimes expose it
grep -i "password\|credential" /var/log/apache2/error.log

# User agents — identify tools used against this server
awk '{print $12}' /var/log/apache2/access.log | sort | uniq -c | sort -rn | head -20

# Most active IPs
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -rn | head -20

Database Logs

# MySQL errors (connection attempts, auth failures)
cat /var/log/mysql/error.log

# PostgreSQL logs
ls /var/log/postgresql/
cat /var/log/postgresql/postgresql-*-main.log | tail -50

Systemd Journal

On modern systems, many logs go to the systemd journal instead of flat files.
# All logs (most recent first)
journalctl -r

# Logs for a specific service
journalctl -u ssh.service
journalctl -u apache2.service
journalctl -u cron.service

# Logs since last boot
journalctl -b

# Logs from a specific time window
journalctl --since "2024-01-01 00:00" --until "2024-01-01 23:59"

# Follow in real time
journalctl -f

# Show only errors
journalctl -p err

# Without pager (pipe-friendly)
journalctl -u ssh --no-pager | grep "Accepted"

Security Logs

# Fail2ban — which IPs got banned and for what
cat /var/log/fail2ban.log
grep "Ban\|Unban" /var/log/fail2ban.log | tail -20

# UFW firewall events
cat /var/log/ufw.log | tail -50
grep "BLOCK" /var/log/ufw.log | awk '{print $12}' | sort | uniq -c | sort -rn

# AppArmor denials (processes hitting security boundaries)
grep "DENIED\|apparmor" /var/log/syslog | tail -20

# Audit daemon (if auditd is running)
cat /var/log/audit/audit.log 2>/dev/null | tail -50
ausearch -k passwd_changes 2>/dev/null    # Search audit log by key

Log Analysis for Pentesters

Reconstructing What Happened

# Timeline of all auth events for a specific user
grep "htb-student" /var/log/auth.log | sort

# What commands did admin run via sudo today?
grep "sudo.*admin\|admin.*sudo" /var/log/auth.log | grep "COMMAND"

# What connected to this machine in the last hour?
grep "Accepted\|Failed" /var/log/auth.log | tail -100

# What services restarted recently?
grep "Started\|Stopped" /var/log/syslog | tail -30

# Any privilege escalation attempts?
grep "su\[" /var/log/auth.log
grep "sudo" /var/log/auth.log | grep -v "session\|pam"

Finding Cleartext Credentials in Logs

# Broad credential search across all readable logs
grep -rE "password|passwd|secret|token|credential|api.key" /var/log/ 2>/dev/null | grep -v "^Binary"

# FTP credentials (often logged in plaintext)
grep -i "pass\|user" /var/log/vsftpd.log 2>/dev/null

# SMTP AUTH credentials
grep -i "AUTH\|LOGIN" /var/log/mail.log 2>/dev/null

Log Enumeration Checklist

# 1. Auth events — who logged in, from where
grep "Accepted\|Failed" /var/log/auth.log | tail -50

# 2. Sudo commands run on the system
grep "COMMAND" /var/log/auth.log | tail -30

# 3. Cron job execution history
grep "CRON" /var/log/syslog | tail -30

# 4. Recent service failures
journalctl -p err -b --no-pager | tail -30

# 5. Web server credential exposure
grep -E "password=|token=|key=" /var/log/apache2/access.log 2>/dev/null

# 6. Fail2ban bans — shows attack history
grep "Ban" /var/log/fail2ban.log 2>/dev/null | tail -20

# 7. All logs with credential mentions
grep -rl "password\|passwd\|secret" /var/log/ 2>/dev/null

# 8. Kernel issues (potential CVE leads)
dmesg | grep -i "error\|fail" | tail -20

Quick Reference

CommandPurpose
tail -f /var/log/auth.logLive authentication events
grep "Accepted" /var/log/auth.logSuccessful SSH logins
grep "COMMAND" /var/log/auth.logSudo command history
grep "CRON" /var/log/syslogCron job execution
journalctl -u <service>Service-specific logs
journalctl -p err -bAll errors since last boot
dmesg | tail -50Recent kernel messages
grep -r "password" /var/log/Credential hunt in all logs

Next: Linux Security & Hardening — understanding SELinux, AppArmor, TCP Wrappers, and the defenses you’ll encounter on hardened systems.