Voglio raccogliere una serie di quick-setup e suggerimenti utili per attività di amministrazione e troubleshooting su installazioni di Alfresco. Partiamo con questo articolo in cui mostro come ripristinare la password di amministrazione nel caso in cui fosse smarrita o dimenticata. Sul wiki ufficiale di Alfresco è riportata un’utilissima documentazione sul pattern utilizzato per la sicurezza e l’autenticazione a cui farò riferimento.
NOTA 1– Le soluzioni riportate sono applicabili per l’utenza di amministrazione secondo la authentication chain AlfrescoNtlm di default, non vengono considerati sottosistemi di autenticazione di terze parti come Active-Directory, LDAP o altri sistemi di Single Sign-on esterni.
NOTA 2 – Nel meccanismo di autenticazione AlfrescoNtlm, le password sono salvate sul database di Alfresco come MD4 hash della stringa codificata UTF16LE (i.e. NTLM). Ecco un esempio per la stringa ‘admin‘.
1. stringa plain-text ==> admin 2. stringa UTF16LE-encoded ==> a\x00d\x00m\x00i\x00n\x00 3. MD4 della stringa UTF16LE-encoded (NTLM) ==> 209c6174da490caeb422f3fa5a7ae634 (memorizzata sul database)
SOLUZIONE 1. Si conoscono le credenziali di almeno un utente senza privilegi di amministrazione (per esempio “bob”).
– Alfresco 3.2 e superiori
$ vi ALF_HOME/tomcat/shared/classes/alfresco-global.properties # Add this alfresco_user_store.adminusername=bob
– Alfresco 3.0 e precedenti
$ vi ALF_HOME/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/authority-services-context.xml
<property name="adminUsers"> <set> <value>admin</value> <value>bob</value> </set> </property>
Riavviare Alfresco e loggarsi come ‘bob‘. Reimpostare la password per l’utente ‘admin‘ quindi ripristinare la configurazione.
SOLUZIONE 2. Non si conoscono le credenziali di nessun utente ma si ha accesso in lettura/scrittura sul database Alfresco.
mysql> use alfresco_db; SELECT anp1.node_id, anp1.qname_id, anp1.string_value FROM alf_node_properties anp1 INNER JOIN alf_qname aq1 ON aq1.id = anp1.qname_id INNER JOIN alf_node_properties anp2 ON anp2.node_id = anp1.node_id INNER JOIN alf_qname aq2 ON aq2.id = anp2.qname_id WHERE aq1.local_name = 'password' AND aq2.local_name = 'username' AND anp2.string_value = 'admin'; +---------+----------+----------------------------------+ | node_id | qname_id | string_value | +---------+----------+----------------------------------+ | 4 | 11 | 7A21990FCD3D759941E45C490F143D5F | +---------+----------+----------------------------------+ 1 row in set (0.00 sec)
in questo esempio di vede il valore NTLM per la password ‘12345’. Eseguire un update sulla colonna string_value column con node_id=4 e qname_id=11:
mysql> UPDATE alf_node_properties SET string_value='209c6174da490caeb422f3fa5a7ae634' WHERE node_id=4 and qname_id=10;
Il nuovo valore ‘209c6174da490caeb422f3fa5a7ae634’ inserito è l’hash NTLM della stringa ‘admin’ perciò è possibile accedere su Alfresco usando le credenziali di default admin/admin.
SOLUZIONE 3 .Hacking dell’hash NTML di Alfresco usando MDCRACK (solo a scopi di studio o penetration test )
Completo questo post con un caso di studio interessante di hacking basato su un approccio a bruteforce dell’hash NTML con mdcrack. Questo esempio deve essere inteso come attività di supporto a penetration tester, amministratori di sistema e utenti che vogliono verificare la robustezza della propria password o di un altro utente per cui hanno avuto il permesso di farlo allo scopo di determinarne il livello di sicurezza. Declino ogni responsabilità per ogni azione illegale basata su questo post.
#NTLM for 'admin' : 209C6174DA490CAEB422F3FA5A7AE634 $ mdcrack -M NTLM1 -S 5 209c6174da490caeb422f3fa5a7ae634