
أداة استغلال الطابعات - الأداة التي جعلت الغوص في القمامة قديمًا.
هل طابعتك آمنة؟ تحقق قبل أن يفعل ذلك شخص آخر...
PRET هي أداة جديدة لاختبار أمان الطابعات تم تطويرها في إطار رسالة ماجستير في جامعة الرور في بوخوم. تتصل بالجهاز عبر الشبكة أو USB وتستغل ميزات لغة طابعة معينة. حالياً يتم دعم PostScript و PJL و PCL وهي المستخدمة في معظم طابعات الليزر. وهذا يتيح أشياء رائعة مثل التقاط أو التلاعب بمهام الطباعة، والوصول إلى نظام ملفات الطابعة وذاكرتها، أو حتى إلحاق الضرر المادي بالجهاز. جميع الهجمات موثقة بالتفصيل في ويكي هاكينغ الطابعات.
الفكرة الرئيسية لـ PRET هي تسهيل التواصل بين المستخدم النهائي والطابعة. لذلك، بعد إدخال أمر يشبه يونكس، تقوم PRET بترجمته إلى PostScript أو PJL أو PCL، وإرساله إلى الطابعة، وتقييم النتيجة، وترجمتها مرة أخرى إلى تنسيق سهل للمستخدم. تقدم PRET مجموعة كبيرة من الأوامر المفيدة لهجمات الطابعات والاختبارات العشوائية (fuzzing).

PRET تتطلب فقط مترجم Python2. ولكن للإخراج الملون ودعم SNMP، يلزم تثبيت وحدات طرف ثالث:
# pip install colorama pysnmp
إذا كنت تعمل على وحدة تحكم ويندوز ولا تظهر أحرف Unicode بشكل صحيح، قم بتثبيت وحدة win_unicode_console:
# pip install win_unicode_console
للطباعة التجريبية 'بدون سائق' (انظر أمر print)، يجب تثبيت ImageMagick و GhostScript:
# apt-get install imagemagick ghostscript
usage: pret.py [-h] [-s] [-q] [-d] [-i file] [-o file] target {ps,pjl,pcl}
positional arguments:
target printer device or hostname
{ps,pjl,pcl} printing language to abuse
optional arguments:
-h, --help show this help message and exit
-s, --safe verify if language is supported
-q, --quiet suppress warnings and chit-chat
-d, --debug enter debug mode (show traffic)
-i file, --load file load and run commands from file
-o file, --log file log raw data sent to the target
$ ./pret.py laserjet.lan ps
$ ./pret.py /dev/usb/lp0 pjl
PRET تتطلب هدفاً صالحاً ولغة طابعة كوسائط. يمكن أن يكون الهدف إما عنوان IP/اسم مضيف طابعة شبكة (مع فتح المنفذ 9100/tcp) أو جهاز مثل /dev/usb/lp0 لطابعة USB محلية. لاكتشاف جميع طابعات الشبكة في شبكتك الفرعية بسرعة باستخدام بث SNMP، قم ببساطة بتشغيل PRET بدون وسائط:
./pret.py
No target given, discovering local printers
address device uptime status
───────────────────────────────────────────────────────────────────────────────
192.168.1.5 hp LaserJet 4250 10:21:49 Ready
192.168.1.11 HP LaserJet M3027 MFP 13 days Paper jam
192.168.1.27 Lexmark X792 153 days Ready
192.168.1.28 Brother MFC-7860DW 16:31:17 Sleep mode
لغة الطابعة التي سيتم استغلالها يجب أن تكون واحدة من ps أو pjl أو pcl. ليست كل اللغات مدعومة في كل طابعة، لذا قد ترغب في تبديل اللغات إذا لم تتلق أي ردود. كل لغة طابعة ترتبط بمجموعة مختلفة من أوامر PRET ولها قدرات مختلفة للاستغلال.
--safe يحاول التحقق عبر IPP و HTTP و SNMP ما إذا كانت لغة الطباعة المحددة (PS/PJL/PCL) مدعومة بالفعل من قبل الجهاز قبل الاتصال. على الطابعات غير المتصلة بالشبكة (USB، كابل متوازي) سيفشل هذا الاختبار.
--quit يقوم بقمع تحديد نموذج الطابعة ورسالة الترحيب وبعض الأحاديث الجانبية الأخرى.
--debug يظهر تدفق البيانات المرسلة فعلياً إلى الجهاز والردود المستلمة. لاحظ أن بيانات الرأس وغيرها من النفقات العامة يتم تصفيتها. لرؤية كل حركة المرور، استخدم wireshark. يمكن أيضاً تشغيل/إيقاف التصحيح داخل جلسة PRET باستخدام الأمر debug.
--load filename يقرأ وينفذ أوامر PRET من ملف نصي. هذا مفيد للأتمتة. يمكن أيضاً استدعاء ملفات الأوامر لاحقاً داخل جلسة PRET عبر الأمر load.
--log filename يكتب نسخة من تدفق البيانات الخام المرسلة إلى الطابعة في ملف. يمكن أن يكون هذا مفيداً لبناء ملف مهمة طباعة ضارة يمكن نشرها على طابعة أخرى لا يمكن الوصول إليها مباشرة، مثلاً بطباعته من محرك أقراص USB.
بعد الاتصال بجهاز طابعة، سترى شاشة PRET ويمكنك تنفيذ أوامر مختلفة:
$ ./pret.py laserjet.lan pjl
________________
_/_______________/|
/___________/___//|| PRET | Printer Exploitation Toolkit v0.25
|=== |----| || by Jens Mueller <[email protected]>
| | ô| ||
|___________| ô| ||
| ||/.´---.|| | || 「 cause your device can be
|-||/_____\||-. | |´ more fun than paper jams 」
|_||=L==H==||_|__|/
(ASCII art by
Jan Foerster)
Connection to laserjet.lan established
Device: hp LaserJet 4250
Welcome to the pret shell. Type help or ? to list commands.
laserjet.lan:/> help
Available commands (type help <topic>):
=======================================
append debug edit free id ls open restart timeout
cat delete env fuzz info mirror printenv selftest touch
cd df exit get load mkdir put set traversal
chvol disable find help lock nvram pwd site unlock
close display format hold loop offline reset status version
laserjet.lan:/> ls ../../
- 834 .profile
d - bin
d - dev
d - etc
d - hp
d - hpmnt
- 1276 init
d - lib
d - pipe
d - tmp
laserjet.lan:/> exit
قائمة بأوامر PRET العامة موضحة أدناه:
help عرض الأوامر المتاحة أو الحصول على مساعدة مفصلة باستخدام 'help cmd'.
debug الدخول في وضع التصحيح. استخدم 'hex' لعرض hexadecimal: debug [hex]
load تشغيل الأوامر من ملف: load cmd.txt
loop تشغيل أمر لعدة وسائط: loop <cmd> <arg1> <arg2> …
open الاتصال بجهاز بعيد: open <target>
close قطع الاتصال بالجهاز.
timeout تعيين مهلة الاتصال: timeout <seconds>
discover اكتشاف أجهزة الطابعة المحلية عبر SNMP.
print طباعة ملف صورة أو نص خام: print <file>|"text"
site تنفيذ أمر مخصص على الطابعة: site <command>
exit الخروج من المفسر.
عمليات نظام الملفات العامة مع تنفيذ خاص بلغة PS/PJL/PCL: