Skip to main content

Want to Practice These Techniques?

Try Hackviser's interactive cyber security upskilling platform - Learn by doing!

Start Practicing Now

IPP, CUPS and JetDirect

Default Ports: 631 (IPP/CUPS), 9100 (JetDirect/raw printing)

IPP, CUPS, and JetDirect are printing protocols and services used by printers, print servers, and Linux/macOS print systems. In pentests, exposed print services can leak device info, jobs, usernames, internal names, and sometimes allow unauthenticated print or admin actions.

Connect

Using Browser

CUPS often exposes a web interface on port 631.

http://target.com:631/
https://target.com:631/

Using curl

HTTP checks identify CUPS, IPP, and admin paths.

curl -I http://target.com:631/
curl -I http://target.com:631/admin
curl -I http://target.com:631/printers/

Using lpstat

lpstat lists printers and queues from CUPS.

lpstat -h target.com:631 -v
lpstat -h target.com:631 -p
lpstat -h target.com:631 -o

Using ipptool

ipptool queries IPP attributes.

ipptool -tv ipp://target.com:631/printers/printer get-printer-attributes.test
ipptool -tv ipp://target.com:631/printers/printer get-jobs.test

Using Netcat for JetDirect

JetDirect accepts raw print data on port 9100.

echo "authorized print test" | nc target.com 9100
printf "\033%-12345X@PJL INFO ID\r\n\033%-12345X" | nc target.com 9100

Recon

Service Detection with Nmap

Scan print ports and nearby web interfaces.

nmap -p 631,9100,515,80,443 -sV target.com
nmap -p 631 --script http-title,http-headers target.com
nmap -p 9100 --script pjl-ready-message target.com

IPP Enumeration

IPP attributes reveal printer names, locations, models, and supported operations.

ipptool -tv ipp://target.com:631/ipp/print get-printer-attributes.test
ipptool -tv ipp://target.com:631/printers/printer get-printer-attributes.test

CUPS Fingerprinting

CUPS pages reveal version and queue names.

curl -s http://target.com:631/ | grep -Ei 'cups|printer|admin|version'
curl -s http://target.com:631/printers/ | grep -Ei 'printer|queue|class'

JetDirect Fingerprinting

PJL commands may return device model and status.

printf "\033%-12345X@PJL INFO ID\r\n\033%-12345X" | nc target.com 9100
printf "\033%-12345X@PJL INFO STATUS\r\n\033%-12345X" | nc target.com 9100

Enumeration

Queue Enumeration

Queues reveal printer names, locations, and job status.

lpstat -h target.com:631 -v
lpstat -h target.com:631 -p
lpstat -h target.com:631 -o

Job Enumeration

Print jobs may leak usernames, filenames, or document titles.

ipptool -tv ipp://target.com:631/printers/printer get-jobs.test
curl -s http://target.com:631/jobs/

Device Attribute Enumeration

Attributes expose model, firmware, location, and supported operations.

ipptool -tv ipp://target.com:631/printers/printer get-printer-attributes.test
printf "\033%-12345X@PJL INFO VARIABLES\r\n\033%-12345X" | nc target.com 9100

Admin Path Enumeration

Check whether CUPS admin pages require authentication.

curl -i http://target.com:631/admin
curl -i http://target.com:631/admin/conf/cupsd.conf

Attack Vectors

Unauthenticated Printing

Open queues may allow anyone to submit jobs.

lp -h target.com:631 -d printer test.txt
echo "authorized print test" | nc target.com 9100

Job Information Disclosure

Jobs and history can reveal users, filenames, and departments.

lpstat -h target.com:631 -o
curl -s http://target.com:631/jobs/

CUPS Admin Exposure

Exposed admin endpoints may allow configuration changes if auth is weak.

curl -i http://target.com:631/admin
curl -i http://target.com:631/admin/log/error_log

PJL Information Leakage

PJL can disclose device information on raw print ports.

printf "\033%-12345X@PJL INFO ID\r\n\033%-12345X" | nc target.com 9100
printf "\033%-12345X@PJL INFO CONFIG\r\n\033%-12345X" | nc target.com 9100

Printer Abuse

Printing tests should use a small controlled page to avoid disruption.

echo "Authorized pentest print check" | nc target.com 9100

Post-Exploitation

Printer Inventory

Collect queues, models, and locations for the report.

lpstat -h target.com:631 -v > printers.txt
ipptool -tv ipp://target.com:631/printers/printer get-printer-attributes.test > printer-attributes.txt

User and Document Review

Review job metadata only; avoid retrieving document content unless scoped.

lpstat -h target.com:631 -o > print-jobs.txt
grep -Ei 'user|owner|job|document|title' print-jobs.txt

Logging Check

Submit one controlled job and confirm it is logged.

echo "Authorized pentest print check" | nc target.com 9100

Useful Tools

ToolPurpose
nmapPort and service detection
curlCUPS web checks
lpstatQueue and job enumeration
lpControlled print submission
ipptoolIPP attribute queries
ncJetDirect/PJL testing
PRETPrinter exploitation framework

Security Misconfigurations

MisconfigurationRisk
CUPS exposed broadlyPrinter and queue disclosure
Unauthenticated printingAbuse and disruption
Job history visibleUser and document metadata leakage
CUPS admin exposedConfiguration risk
JetDirect exposedRaw print and PJL information leakage
Weak printer credentialsDevice administration
No network segmentationPrinter attack surface exposure