
أداة قائمة بذاتها لاكتشاف الخدمات على المنافذ المفتوحة!
الميزات • التثبيت • الاستخدام • تشغيل fingerprintx • الاستخدام كمكتبة • لماذا nmap لا؟ • ملاحظات • شكر وتقدير
fingerprintx هو أداة مشابهة لـ httpx تدعم أيضًا بصمة الخدمات مثل RDP وSSH وMySQL وPostgreSQL وKafka وغيرها. يمكن استخدام fingerprintx جنبًا إلى جنب مع ماسحات المنافذ مثل Naabu لبصمة مجموعة من المنافذ التي تم تحديدها أثناء مسح المنافذ. على سبيل المثال، قد يرغب مهندس في مسح نطاق IP ثم بصمة الخدمة قيد التشغيل على جميع المنافذ المكتشفة بسرعة.



51 إضافة لكشف الخدمات تدعم بروتوكولات TCP و UDP:
من Github
go install github.com/praetorian-inc/fingerprintx/cmd/fingerprintx@latest
من المصدر (إصدار go > 1.18)
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# مع إصدار go > 1.18
$ go build ./cmd/fingerprintx
$ ./fingerprintx -h
Docker
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# بناء
docker build -t fingerprintx .
# وتشغيله
docker run --rm fingerprintx -h
docker run --rm fingerprintx -t praetorian.com:80 --json
fingerprintx -h
الخيار -h سيعرض جميع الأعلام المدعومة لـ fingerprintx.
الاستخدام:
fingerprintx [flags]
تحديد الهدف:
يتطلب مضيف ورقم منفذ أو IP ورقم منفذ. يُفترض أن المنفذ مفتوح.
HOST:PORT أو IP:PORT
أمثلة:
fingerprintx -t praetorian.com:80
fingerprintx -l input-file.txt
fingerprintx --json -t praetorian.com:80,127.0.0.1:8000
الأعلام:
--csv تنسيق الإخراج بصيغة csv
-f, --fast الوضع السريع
-h, --help المساعدة لـ fingerprintx
--json تنسيق الإخراج بصيغة json
-l, --list string ملف إدخال يحتوي على الأهداف
-o, --output string ملف الإخراج
-t, --targets strings الهدف أو قائمة أهداف مفصولة بفواصل
-w, --timeout int المهلة (بالملي ثانية) (الافتراضي 500)
-U, --udp تشغيل إضافات UDP
-v, --verbose الوضع المفصل
الوضع السريع سيحاول فقط بصمة الخدمة الافتراضية المرتبطة بهذا المنفذ لكل هدف. على سبيل المثال، إذا كان praetorian.com:8443 هو الإدخال، فسيتم تشغيل إضافة https فقط. إذا لم يكن https قيد التشغيل على praetorian.com:8443، فلن يكون هناك أي إخراج. لماذا نفعل هذا؟ إنها طريقة سريعة لبصمة معظم الخدمات في قائمة كبيرة من المضيفين (فكر في قاعدة 80/20).
مع هدف واحد:
$ fingerprintx -t 127.0.0.1:8000
http://127.0.0.1:8000
بشكل افتراضي، يكون الإخراج بالشكل: SERVICE://HOST:PORT. للحصول على إخراج خدمة أكثر تفصيلاً، حدد JSON باستخدام العلم --json:
$ fingerprintx -t 127.0.0.1:8000 --json
{"ip":"127.0.0.1","port":8000,"service":"http","transport":"tcp","metadata":{"responseHeaders":{"Content-Length":["1154"],"Content-Type":["text/html; charset=utf-8"],"Date":["Mon, 19 Sep 2022 18:23:18 GMT"],"Server":["SimpleHTTP/0.6 Python/3.10.6"]},"status":"200 OK","statusCode":200,"version":"SimpleHTTP/0.6 Python/3.10.6"}}
أنبوب الإخراج من برنامج آخر (مثل naabu):
$ naabu 127.0.0.1 -silent 2>/dev/null | fingerprintx
http://127.0.0.1:8000
ftp://127.0.0.1:21
التشغيل مع ملف إدخال:
$ cat input.txt | fingerprintx
http://praetorian.com:80
telnet://telehack.com:23
# أو إذا كنت تفضل
$ fingerprintx -l input.txt
http://praetorian.com:80
telnet://telehack.com:23
مع المزيد من إخراج البيانات الوصفية:
$ cat input.txt | fingerprintx --json
{"host":"praetorian.com","ip":"146.148.61.165","port":80,"service":"http","transport":"tcp","metadata":{"responseHeaders":{"Connection":["keep-alive"],"Content-Type":["text/html"],"Date":["Mon, 19 Sep 2022 18:37:55 GMT"],"Etag":["W/\"5e3e263f-1703\""],"Keep-Alive":["timeout=20"],"Server":["nginx"],"Vary":["Accept-Encoding"]},"status":"404 Not Found","statusCode":404,"version":"nginx"}}
{"host":"telehack.com","ip":"64.13.139.230","port":23,"service":"telnet","transport":"tcp","metadata":{"serverData":"fffb03"}}
يمكن استيراد fingerprintx إلى مشروعك لمسح الخدمات على المنافذ المفتوحة. يتم توفير مثال على كيفية القيام بذلك هنا في دليل الأمثلة. قم بالبناء باستخدام go build scan.go. ملف آخر قد يكون مفيدًا كمرجع عند استيراد fingerprintx إلى مشروعك الخاص هو مشغل سطر الأوامر.
Nmap هو المعيار لمسح الشبكات. لماذا نستخدم fingerprintx بدلاً من nmap؟ السببان الرئيسيان هما:
fingerprintx يعمل بذكاء، وليس بجهد أكبر: أول إضافة تعمل ضد خادم بمنفذ 8080 مفتوح هي إضافة http. نهج الخدمة الافتراضية يقلل من وقت المسح في أفضل حالة. في معظم الأوقات، الخدمات التي تعمل على المنافذ 80 و443 و22 هي http وhttps وssh -- وهذا ما يفحصه fingerprintx أولاً.fingerprintx يدعم إخراج json باستخدام العلم --json. يدعم Nmap العديد من خيارات الإخراج (عادي، xml، grep)، ولكن غالبًا ما يكون من الصعب تحليلها وبرمجتها بشكل مناسب. يدعم fingerprintx إخراج json مما يسهل التكامل مع الأدوات الأخرى في خطوط المعالجة.third_party يستورد مكتبات تشفير Go؟
ssh تحدد خيارات التشفير المختلفة التي يدعمها الخادم عند جمع البيانات الوصفية أثناء عملية المصافحة. يستخدم هذا بعض الدوال غير المصدرة، ولهذا السبب تم تضمين مكتبات تشفير Go هنا مع ملف export.go.target:port مفتوح. إذا لم يكن أي من المنافذ مفتوحًا، فلن يكون هناك أي إخراج حيث لا توجد خدمات تعمل على الأهداف.zgrab2 يختلف قليلاً عن fingerprintx. بالنسبة لـ zgrab2، يجب تحديد البروتوكول مسبقًا: echo praetorian.com | zgrab2 http -p 8000، مما يفترض أنك تعرف بالفعل ما هو قيد التشغيل هناك. بالنسبة لـ fingerprintx، ليس هذا هو الحال: echo praetorian.com:8000 | fingerprintx. نهج مسح البروتوكول على "طبقة التطبيق" متشابه جدًا.fingerprintx هو عمل الكثير من الأشخاص، بما في ذلك فئة المتدربين الرائعة لدينا لعام 2022. فيما يلي قائمة بالمساهمين حتى الآن:
| الخدمة | النقل |
|---|
| Cassandra | TCP |
| ChromaDB | TCP |
| CouchDB | TCP |
| DB2 | TCP |
| DHCP | UDP |
| Diameter | TCP |
| DNS | TCP/UDP |
| Echo | TCP |
| Elasticsearch | TCP |
| Firebird | TCP |
| FTP | TCP |
| HTTP/HTTPS | TCP |
| IMAP | TCP |
| InfluxDB | TCP |
| IPMI | TCP |
| IPSEC | UDP |
| Java RMI | TCP |
| JDWP | TCP |
| Kafka | TCP |
| LDAP | TCP |
| Linux RPC | TCP |
| Memcached | TCP |
| Milvus | TCP |
| Modbus | TCP |
| MongoDB | TCP |
| MQTT | TCP |
| MSSQL | TCP |
| MySQL | TCP |
| Neo4j | TCP |
| NetBIOS-NS | UDP |
| NTP | UDP |
| OpenVPN | UDP |
| OracleDB | TCP |
| Pinecone | TCP |
| POP3 | TCP |
| PostgreSQL | TCP |
| RDP | TCP |
| Redis | TCP |
| Rsync | TCP |
| RTSP | TCP |
| SMB | TCP |
| SMPP | TCP |
| SMTP | TCP |
| SNMP | UDP |
| SNPP | TCP |
| SSH | TCP |
| STUN | UDP |
| Sybase | TCP |
| Telnet | TCP |
| VNC | TCP |