
حقن القوالب غير المصرح به في Confluence
confluence.home إلى عنوان confluence home في الملف ./confluence/WEB-INF/classes/confluence-init.propertiesCATALINA_OPTS حتى يتمكن البرنامج من العمل في وضع التصحيح عن بُعد (remote debug)في نظام ويندوز، الملف ./bin/setenv.bat
set CATALINA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
في نظام لينكس، الملف ./bin/setenv.sh
CATALINA_OPTS="-Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 ${CATALINA_OPTS}"
Remote JVM Debug بقيمة host و port هي localhost:5005 و Command line arguments for remote JVM-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
$ su - postgres
postgres@ubuntu:~$ psql -U postgres
postgres@ubuntu:~$ psql -U postgres
psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help.
postgres=# CREATE USER wiki WITH PASSWORD 'wiki';
CREATE ROLE
postgres=# CREATE DATABASE wiki OWNER wiki;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE jira TO wiki;
GRANT
نحتاج إلى إضافة حزم jar التالية: ./confluence/WEB-INF/atlassian-bundled-plugins/widgetconnector-x.x.x.jar, ./confluence/WEB-INF/lib/confluence-x.x.x.jar, ./confluence/WEB-INF/lib/velocity-x.x.x-atlassian-x.jar إلى lib حتى نتمكن عند التصحيح من رؤية الكود المصدري اللازم.
نقوم بتشغيل الملف ./bin/start-confluence.bat ويمكنكم الاطلاع على هذا الدليل لتثبيته من الكود المصدري.
بعد قراءة الوصف، يمكننا معرفة أن هذا الخطأ يبدأ من ميزة Widget Connector، لذلك قمت بالبحث فورًا لمعرفة ما هي هذه الميزة وكيفية استخدامها:
ادخل إلى تحرير صفحة

اختر Other macros
اختر Widget connector

قمت باختيار بعض القيم عشوائيًا ثم ضغطت على preview، وبعدها انتقلت إلى burp لأرى ما إذا كان هناك شيء مثير.

في هذه الحزمة، لاحظت وجود معامل "pluginKey":"com.atlassian.confluence.extra.widgetconnector"، لذلك خمنت أن ميزة Widget Connector معرفة في الكلاس com.atlassian.confluence.extra.widgetconnector، وبالتالي بحثت في المسار لمعرفة ما إذا كانت هناك حزمة jar مشبوهة.

جرّبت إضافة الملف ./confluence/WEB-INF/atlassian-bundled-plugins/widgetconnector-x.x.x.jar إلى lib الخاص بالمشروع حتى أتمكن من قراءة الكود المصدري وتصحيحه.
طريقة إضافة ملف jar إلى lib
عند فتح حزمة widgetconnector لفت انتباهي الكلاس WidgetMacro، لذلك وضعت نقطة توقف (breakpoint) في المُنشئ ودالة execute لهذا الكلاس لمعرفة ما إذا كان يتم استدعاؤه عند استخدام ميزة Preview 🕵️

execute، ثم استدعى البرنامج DefaultRenderManager.getEmbeddedHtml