hashcat Forum
How to crack AEM/CQ sha256 hash? - Printable Version

+- hashcat Forum (https://hashcat.net/forum)
+-- Forum: Support (https://hashcat.net/forum/forum-3.html)
+--- Forum: hashcat (https://hashcat.net/forum/forum-45.html)
+--- Thread: How to crack AEM/CQ sha256 hash? (/thread-7471.html)



How to crack AEM/CQ sha256 hash? - cybhashcat - 05-01-2018

Hey guys,
in AEM (Adobe Experience Manager), I can see the the following data on every app user:
rep:password "{SHA-256}fe90d85cdcd7e79c-1000-ef182cdc47e60b472784e42a6e167d26242648c6b2e063dfd9e27eec9aa38912"

the actual password in this case is: "Aa12345678!@"

how do i put this into Hashcat? do i need to change/rewrite the format? which module do i use?

thanks!


RE: How to crack AEM/CQ sha256 hash? - undeath - 05-01-2018

first you need to find out how exactly the hash is generated


RE: How to crack AEM/CQ sha256 hash? - DanielG - 05-01-2018

Having never used Adobe Experience Manager, I googled and saw on http://experience-aem.blogspot.nl/2014/02/aem-cq-56-useful-tips-for-debugging.html that you can change the hashing from SHA-256 to SHA-512 which also shows an interesting image with the following information:

Hash Algorithm: in this case SHA-256
Hash Iterations: 1000
Hash Salt Size: 8

This seems to be correlated with your hash {SHA-256}fe90d85cdcd7e79c-1000-ef182cdc47e60b472784e42a6e167d26242648c6b2e063dfd9e27eec9aa38912

If this is correct then you would need to find an algorithm on https://hashcat.net/wiki/doku.php?id=example_hashes where you can give a salt and iterations for SHA-265. Maybe sha256crypt $5$, SHA256 (Unix) (only available in oclhashcat unfortunately)? I'm not sure yet.


RE: How to crack AEM/CQ sha256 hash? - undeath - 05-01-2018

It could also be some custom scheme. There is an unlimited number of ways to do salted iterated hashing.


RE: How to crack AEM/CQ sha256 hash? - DanielG - 05-01-2018

I tried the following schemes (with different iterations), but no luck:
  • most likely, sha_265(salt+password) then rehash the hash 1000 times
  • most likely too, sha_265(password+salt) then rehash the hash 1000 times
  • less likely sha_265(password) then rehash the hash 1000 times prepending salt every time
  • less likely sha_265(password) then rehash the hash 1000 times appending salt every time
  • even less likely sha_265(salt) then rehash the hash 1000 times prepending password every time
  • even less likely sha_265(salt) then rehash the hash 1000 times appending password every time
  • same scenario's as above, but instead of using the raw bytes from the hash, print it as 'hex string' (very unlikely)

I have added the python code to replicate if you want different schemes. 
I used the 'default' password of admin from this script: https://gist.github.com/andrewmkhoury/da868236e16a2415439b7750d4d83795

Code:
import hashlib

# {SHA-256}a9d4b340cb43807b-1000-33b8875ff3f9619e6ae984add262fb6b6f043e8ff9b065f4fb0863021aada275
# https://gist.github.com/andrewmkhoury/da868236e16a2415439b7750d4d83795, reset account admin to password admin

password = b'admin'
salt = bytearray.fromhex("a9d4b340cb43807b")
thehash = "33b8875ff3f9619e6ae984add262fb6b6f043e8ff9b065f4fb0863021aada275\n"
iterations = 1001

#most likely, sha_265(salt+password) then rehash the hash 1000 times
m = hashlib.sha256()

m.update(salt)
m.update(password)

for i in range(iterations):
    m.update(m.digest())

print m.hexdigest()
print thehash

#most likely too, sha_265(password+salt) then rehash the hash 1000 times
m = hashlib.sha256()

m.update(password)
m.update(salt)

for i in range(iterations):
    m.update(m.digest())

print m.hexdigest()
print thehash

#less likely sha_265(password) then rehash the hash 1000 times prepending salt every time
m = hashlib.sha256()

m.update(password)

for i in range(iterations):
    m.update(salt)
    m.update(m.digest())

print m.hexdigest()
print thehash

#less likely sha_265(password) then rehash the hash 1000 times appending salt every time
m = hashlib.sha256()

m.update(password)

for i in range(iterations):
    m.update(m.digest())
    m.update(salt)

print m.hexdigest()
print thehash

#even less likely sha_265(salt) then rehash the hash 1000 times prepending password every time
m = hashlib.sha256()

m.update(salt)

for i in range(iterations):
    m.update(password)
    m.update(m.digest())

print m.hexdigest()
print thehash

#even less likely sha_265(salt) then rehash the hash 1000 times appending password every time
m = hashlib.sha256()

m.update(salt)

for i in range(iterations):
    m.update(m.digest())
    m.update(password)

print m.hexdigest()
print thehash

#from here the same scenario's as above, but instead of using the raw bytes from the hash, print it as 'hex string' (very unlikely)
m = hashlib.sha256()

m.update(salt)
m.update(password)

for i in range(iterations):
    m.update(m.hexdigest())

print m.hexdigest()
print thehash

m = hashlib.sha256()

m.update(password)
m.update(salt)


for i in range(iterations):
    m.update(m.hexdigest())

print m.hexdigest()
print thehash

m = hashlib.sha256()

m.update(password)

for i in range(iterations):
    m.update(salt)
    m.update(m.hexdigest())

print m.hexdigest()
print thehash

m = hashlib.sha256()

m.update(password)

for i in range(iterations):
    m.update(m.hexdigest())
    m.update(salt)

print m.hexdigest()
print thehash

m = hashlib.sha256()

m.update(salt)

for i in range(iterations):
    m.update(password)
    m.update(m.hexdigest())

print m.hexdigest()
print thehash

m = hashlib.sha256()

m.update(salt)

for i in range(iterations):
    m.update(m.hexdigest())
    m.update(password)

print m.hexdigest()
print thehash

edit: had to change tabs into spaces because this forum removed the tabs


RE: How to crack AEM/CQ sha256 hash? - royce - 05-02-2018

Looks like this is the same as:

https://github.com/magnumripper/JohnTheRipper/pull/3240

... so John the Ripper (jumbo edition) may have it soon?