
Confluence 비인가 템플릿 인젝션
confluence.home 값을 ./confluence/WEB-INF/classes/confluence-init.properties 파일의 confluence home 주소로 수정합니다CATALINA_OPTS 값을 추가합니다Windows의 경우, ./bin/setenv.bat 파일
set CATALINA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Linux의 경우, ./bin/setenv.sh 파일
CATALINA_OPTS="-Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 ${CATALINA_OPTS}"
Remote JVM Debug 디버그 구성(Debug Configuration)을 생성하고 host 및 port 값을 localhost:5005로 설정하며 Command line aguments 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
./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에 추가해야 합니다. 이렇게 하면 디버그할 때 필요한 소스(source)를 확인할 수 있습니다.
./bin/start-confluence.bat 파일을 실행하면 됩니다. 소스에서 설치하는 방법은 이 가이드를 참고할 수 있습니다.
설명(Description)을 읽어보면 이 버그가 Widget Connector 기능에서 시작된다는 것을 알 수 있습니다. 그래서 이 기능이 무엇이고 어떻게 사용하는지 바로 구글링해봤습니다:
페이지 편집 화면으로 진입

Other macros 선택
Widget connector 선택

아무 값이나 골라 미리보기(preview)를 누른 뒤, burp로 넘어가 특별한 게 없는지 확인했습니다.

이 패킷에서 "pluginKey":"com.atlassian.confluence.extra.widgetconnector" 파라미터를 확인했습니다. 그래서 Widget Connector 기능이 com.atlassian.confluence.extra.widgetconnector 클래스에 정의되어 있을 것이라고 추측하고, 경로(path)에서 수상한 jar 파일이 있는지 검색해봤습니다.

소스 코드를 읽고 디버그할 수 있도록 ./confluence/WEB-INF/atlassian-bundled-plugins/widgetconnector-x.x.x.jar 파일을 프로젝트의 lib에 추가해봤습니다.
lib에 jar 파일을 추가하는 방법
widgetconnector 패키지를 열어보니 WidgetMacro 클래스가 눈에 띄어서, Preview 기능을 사용할 때 이 클래스가 호출되는지 확인하기 위해 생성자(constructor)와 execute 함수에 중단점(breakpoint)을 설정했습니다 🕵️

execute 함수가 호출되었고, 이후 프로그램은 DefaultRenderManager.getEmbeddedHtml을 호출합니다