Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/narfindustries/http-garden
تحليل الثغرات الأمنيةتحليل الشفرة الديناميكي (DAST)أمن الويبالاختبار العشوائي
GitHubnarfindustries/http-garden

http-garden

إطار عمل للاختبار التفاضلي لتنفيذات HTTP

عرض المستودع
94184منذ 2 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

The HTTP Garden

تُعد HTTP Garden مجموعة من خوادم HTTP ووكلائها المصممة لتكون قابلة للتكوين، إلى جانب سكربتات للتفاعل معها بطريقة تجعل اكتشاف الثغرات أسهل بكثير. لعرض بعض العروض الممتعة للثغرات التي يمكنك اكتشافها باستخدام HTTP Garden، شاهد محادثتنا في ShmooCon 2024.

شكر وتقدير

نود أن نشكر أصدقاءنا في Galois، وTrail of Bits، وNarf Industries، وDartmouth College لجعل هذا المشروع ممكنًا.

هذه المادة مبنية على عمل مدعوم من وكالة مشاريع الأبحاث الدفاعية المتقدمة (DARPA) بموجب رقم العقد HR0011-19-C-0076.

البدء

التبعيات

  1. يعمل HTTP Garden على Linux بمعماريتي x86_64 وAArch64، وهو غير مُختبر على منصات أخرى.
  2. تُبنى الخوادم المستهدفة وتُشغَّل في حاويات Docker، لذا ستحتاج إلى Docker.
  3. ستحتاج أيضًا إلى Python 3.12+ والحزم التالية، ويمكنك الحصول عليها من PyPI (أي باستخدام pip) أو من مدير الحزم لنظامك:
  • docker
    • للتفاعل مع Docker
  • pyyaml
    • لتحليل ملفات yaml
  • tqdm
    • لأشرطة التقدم

إذا كنت تثبّت حزم بايثون عبر مدير الحزم لنظامك، فاعلم أن أسماء الحزم قد تحتاج إلى بادئة py3- أو python3- أو python-، حسب النظام.

التشغيل

  • قم ببناء وتشغيل بعض الخوادم والوكلاء:
root@kitploit:~
./garden.sh start --build gunicorn hyper nginx haproxy
  • من صدفة أخرى، شغّل الغلاف التفاعلي:
root@kitploit:~
./garden.sh repl
  • أرسل طلب GET أساسيًا عبر HAProxy، ثم أرسل النتيجة إلى خوادم الأصل Gunicorn وHyper وNginx، واعرض ما إذا كانت تفسيراتها متطابقة:
root@kitploit:~
garden> payload 'GET / HTTP/1.1\r\nHOST: a\r\n\r\n' | transduce haproxy | fanout | grid
'GET / HTTP/1.1\r\nHOST: a\r\n\r\n'
⬇️ haproxy
'GET / HTTP/1.1\r\nhost: a\r\n\r\n'
gunicorn: [
    HTTPRequest(
        method=b'GET', uri=b'/', version=b'1.1',
        headers=[
            (b'host', b'a'),
        ],
        body=b'',
    ),
]
hyper: [
    HTTPRequest(
        method=b'GET', uri=b'/', version=b'1.1',
        headers=[
            (b'host', b'a'),
        ],
        body=b'',
    ),
]
nginx: [
    HTTPRequest(
        method=b'GET', uri=b'/', version=b'1.1',
        headers=[
            (b'host', b'a'),
            (b'content-length', b''),
            (b'content-type', b''),
        ],
        body=b'',
    ),
]
         g
         u
         n
         i h n
         c y g
         o p i
         r e n
         n r x
        +-----
gunicorn|✓ ✓ ✓
hyper   |  ✓ ✓
nginx   |    ✓

يبدو أن جميعها متوافقة. (لاحظ أنه على الرغم من أن Nginx أضاف ترويسات content-length وcontent-type، فإن الحديقة تدرك ذلك ولا تسمح لهذا الاختلاف غير المهم بالظهور في مخرجات grid.)

لنجرّب حمولة تستخدم نهاية سطر بـ LF فقط في نص رسالة مقسّمة (chunked). هذا غير مسموح به في المواصفة.

root@kitploit:~
garden> payload 'POST / HTTP/1.1\r\nHost: a\r\nTransfer-Encoding: chunked\r\n\r\n0\n\r\n' | fanout | grid
gunicorn: [
    HTTPResponse(version=b'1.1', method=b'400', reason=b'Bad Request'),
]
hyper: [
]
nginx: [
    HTTPRequest(
        method=b'POST', uri=b'/', version=b'1.1',
        headers=[
            (b'transfer-encoding', b'chunked'),
            (b'host', b'a'),
            (b'content-length', b'0'),
            (b'content-type', b''),
        ],
        body=b'',
    ),
]
         g
         u
         n
         i h n
         c y g
         o p i
         r e n
         n r x
        +-----
gunicorn|✓ ✓ X
hyper   |  ✓ X
nginx   |    ✓

حسنًا، استجاب Gunicorn بـ 400، ولم يستجب Hyper، بينما قبِل Nginx الرسالة. هذا مخالفة للمواصفة من مؤلفي Nginx وهم لا يهتمون بإصلاحها.

ربما لاحظت أيضًا أنه على الرغم من أن استجابتي Gunicorn وHyper لم تكونا متطابقتين تمامًا، فقد ظهرتا كمتوافقتين في مخرجات grid سابقًا. ذلك لأن استجاباتهما مكافئة جوهريًا (رفض الرسالة)، وتأخذ الحديقة هذا في الاعتبار.

بنية الدليل

images

يحتوي دليل images على دليل فرعي لكل خادم HTTP ومحوّل في الحديقة. يحصل كل هدف على صورة Docker خاصة به. تُبنى جميع البرامج من المصدر عند الإمكان. ولتسهيل بناء إصدارات متعددة من كل هدف، تُحدَّد معاملات جميع الأهداف برابط المستودع (APP_REPO) واسم الفرع (APP_BRANCH) وقيمة الالتزام (APP_VERSION).

tools

يحتوي دليل tools على السكربتات المستخدمة للتفاعل مع الخوادم. ستجد بداخله:

  • probe_quirks.py: سكربت لتعداد الشذوذات غير المؤذية في تحليل HTTP في الأنظمة قيد الاختبار بحيث يتم تجاهلها أثناء التلغيم (fuzzing)،
  • repl.py: واجهة المستخدم الأساسية لـ HTTP Garden،
  • update.py: سكربت لتحديث قيم الالتزام في docker-compose.yml،
  • ...وبعض السكربتات الإضافية غير المخصصة للمستخدمين.

الأهداف

خوادم HTTP

|-| | aiohttp | | apache_httpd | | apache_tomcat | | appweb | | aws_c_http | | cpp_httplib | | eclipse_grizzly | | eclipse_jetty | | fasthttp | | go_stdlib | | gunicorn | | h2o | | haproxy_fcgi | | hyper | | hypercorn | | ktor | | libevent | | libmicrohttpd | | libsoup | | lighttpd | | mongoose | | netty | | nginx | | node_stdlib | | openbsd_httpd | | openlitespeed | | openwrt_uhttpd | | protocol_http1 | | puma | | tornado | | | | | | | | | | | | |

محولات HTTP

|-| | apache_httpd_proxy | | apache_traffic_server | | envoy | | go_stdlib_proxy | | h2o_proxy | | haproxy | | lighttpd_proxy | | nghttpx | | nginx_proxy | | openlitespeed_proxy | | pound | | squid | | varnish | | yahns_proxy |

الاستثناءات

فيما يلي شرح لبعض الاستثناءات البارزة من الحديقة:

النتائج

انظر TROPHIES.md للحصول على قائمة كاملة بالثغرات التي عثرت عليها الحديقة.

تنزيل الأداة
twisted
undertow
uvicorn
waitress
webrick
yahns
الاسمالسبب
أي شيء من Microsoftأخبرتنا MSRC أن «HTTP smuggling لا يُعتبر ثغرة أمنية»، ولا أشعر بحاجة خاصة لمساعدة Microsoft.
unicornيستخدم محلّل HTTP نفسه المستخدم في yahns.
SwiftNIOيستخدم llhttp لتحليل HTTP، وهو مغطى بالفعل بواسطة node_stdlib.
Bunيستخدم picohttpparser لتحليل HTTP، وهو مغطى بالفعل بواسطة h2o.
Denoيستخدم hyper لتحليل HTTP، وهو موجود بالفعل في الحديقة.
Daphneيستخدم twisted لتحليل HTTP، وهو موجود بالفعل في الحديقة.
pitchforkيستخدم المحلّل نفسه المستخدم في yahns.
nghttpxيستخدم lhttp لتحليل HTTP، وهو مغطى بالفعل بواسطة node_stdlib.
Cherootيتجاهل تقاريرنا.
CherryPyيستخدم cheroot لتحليل HTTP.
libhttpserverيستخدم libmicrohttpd لتحليل HTTP، وهو موجود بالفعل في الحديقة.
Werkzeugيستخدم المكتبة القياسية لـ CPython لتحليل HTTP، وهي موجودة بالفعل في الحديقة.
Caddyيستخدم المكتبة القياسية لـ Go لتحليل HTTP، وهي موجودة بالفعل في الحديقة.
Tengineيستخدم محلّل HTTP الخاص بـ Nginx.
OpenRestyيستخدم محلّل HTTP الخاص بـ Nginx.
Google Cloud Global External Application Load Balancerمبني على Envoy.
Google Cloud Regional External Application Load Balancerمبني على Envoy.
Phusion Passengerيستخدم llhttpd لتحليل HTTP، وهو مغطى بالفعل بواسطة node_stdlib.
passimيستخدم libsoup لتحليل HTTP، وهو موجود بالفعل في الحديقة.
boaلم يعد يُصان.
Ulfiusيستخدم libmicrohttpd، وهو موجود بالفعل في الحديقة.
Vultr Load Balancerإنه في الأساس HAProxy، وهو موجود بالفعل في الحديقة.
VMWare Avi Load Balancerإنه في الأساس Nginx، وهو موجود بالفعل في الحديقة.
Sanicيستخدم httptools، وهو مغطى بالفعل بواسطة Uvicorn.
CPython http.serverغير مخصص للاستخدام في الإنتاج.
openjdk_stdlibلا يوفر قناة واضحة للإبلاغ عن الثغرات.
dart_stdlibتجاهل التقارير السابقة.
eventletمكتبة HTTP الخاصة به هي مجرد نسخة مشتقة من تلك الموجودة في المكتبة القياسية لـ CPython.
uwsgiلا يدعم أجسام الرسائل المقسّمة (chunked).