[Samba] Samba 4 LDAP NTLM password nightly injection

Bo Kersey bo at vircio.com
Tue Aug 13 10:03:40 MDT 2013


Luc,
Very helpful...  I'm doing a migration from a very non-standard samba ldap implementation that we can't just migrate.  We would like to save the users' passwords though.

I'm testing using known password hashes and I'm having trouble authenticating after I change the passwords.

How can I extract what is being inserted in to samba4 in order to verify that I'm doing things correctly?


Thanks!
Bo


----- Original Message -----
> From: "Luc Lalonde" <luc.lalonde at polymtl.ca>
> To: samba at lists.samba.org
> Cc: "Andrew Bartlett" <abartlet at samba.org>
> Sent: Tuesday, April 9, 2013 11:25:47 AM
> Subject: Re: [Samba] Samba 4 LDAP NTLM password nightly injection
> 
> Ok this works:
> 
> ####################################################################
> #!/usr/bin/env python
> 
> import sys
> 
> sys.path.insert(0, "/usr/local/samba/lib64/python2.6/site-packages")
> sys.path.insert(1, "/usr/local/samba/lib/python2.6/site-packages")
> 
> from samba import Ldb, registry
> from samba.param import LoadParm
> from samba.provision import provision, FILL_FULL, ProvisioningError,
> setsysvolacl
> from samba.samba3 import passdb
> from samba.samba3 import param as s3param
> from samba.dcerpc import lsa, samr, security
> from samba.dcerpc.security import dom_sid
> from samba.credentials import Credentials
> from samba import dsdb
> from samba.ndr import ndr_pack
> from samba import unix2nttime
> 
> # Convert Hex to Byte string
> def HexToByte( hexStr ):
>     bytes = []
>     hexStr = ''.join( hexStr.split(" ") )
>     for i in range(0, len(hexStr), 2):
>         bytes.append( chr( int (hexStr[i:i+2], 16 ) ) )
>     return ''.join( bytes )
> 
> # Connect to samba4 backend
> new_lp_ctx = s3param.get_context()
> new_lp_ctx.load("/usr/local/samba/etc/smb.conf")
> new_lp_ctx.set("private dir", "/usr/local/samba/private")
> 
> s4_passdb = passdb.PDB(new_lp_ctx.get("passdb backend"))
> 
> # Change testuser password
> new_userdata = s4_passdb.getsampwnam("testuser")
> new_userdata.nt_passwd =
> HexToByte("878D8014606CDA29677A44EFA1353FC7")
> new_userdata.lanman_passwd =
> HexToByte("552902031BEDE9EFAAD3B435B51404EE")
> s4_passdb.update_sam_account(new_userdata)
> ####################################################################
> 
> I was missing some module paths and the extra info for connecting to
> the LDB database...  Now I just have to generalize this procedure so
> that I can update the passwords every night like I do with
> Samba3-LDAP.
> 
> Andrew, thanks for the pointers.  I'm posting this in case it can
> help someone else.
> 
> ----- Original Message -----
> From: "Luc Lalonde" <luc.lalonde at polymtl.ca>
> To: "Andrew Bartlett" <abartlet at samba.org>
> Cc: samba at lists.samba.org
> Sent: Wednesday, March 27, 2013 7:38:05 PM GMT -05:00 US/Canada
> Eastern
> Subject: Re: [Samba] Samba 4 LDAP NTLM password nightly injection
> 
> Hello Andrew,
> 
> How would I convert the below base16 strings into raw bytes
> acceptable to this routine?  We presently inject the NTLM passwords
> directly into our LDAP database for Samba3.
> 
> Also, I can't seem to figure out the argument values for
> 'passdb.PDB'.  I tried 'ldb', 'samba_dsdb'.
> 
> Thanks for your help!
> 
> On 2013-03-27, at 6:18 PM, Andrew Bartlett <abartlet at samba.org>
> wrote:
> 
> > On Tue, 2013-03-26 at 11:10 -0400, Luc Lalonde wrote:
> >> Hello Andrew,
> >> 
> >> I'm finally diving into this project...
> >> 
> >> First off, my sysadmin stuff is mostly in Perl.  So my Python is
> >> rudimentary at best.
> >> 
> >> Here we go anyway...  I've looked at the 'upgrade.py' but I can't
> >> seem to figure out how to connect to the Samba4 passwd database.
> >> 
> >> In the script I see these lines:
> >> 
> >> #######################################################
> >> # Connect to samba4 backend
> >> s4_passdb = passdb.PDB(new_lp_ctx.get("passdb backend"))
> >> ########################################################
> >> 
> >> I would appreciate a hint on how to connect to the database
> >> please.  Where is the 'passdb' object referenced from?
> >> 
> >> Once that's done, from what I understand, I should be able to
> >> change the passwords directly:
> >> 
> >> #######################################################
> >> # Change foo-user password
> >> admin_userdata = s4_passdb.getsampwnam("foo-user")
> >> admin_userdata.nt_passwd = "878D8014606CDA29677A44EFA1353FC7"
> >> admin_userdata.lanman_passwd = "552902031BEDE9EFAAD3B435B51404EE"
> >> s4_passdb.update_sam_account(admin_userdata)
> >> #######################################################
> > 
> > Sort of.  Those values are not base16 strings, but raw bytes, but
> > otherwise that looks pretty much right at a first glance.
> > 
> > Andrew Bartlett
> > 
> > --
> > Andrew Bartlett
> >                                http://samba.org/~abartlet/
> > Authentication Developer, Samba Team           http://samba.org
> > 
> > 
> 
> --
> To unsubscribe from this list go to the following URL and read the
> instructions:  https://lists.samba.org/mailman/options/samba
> 
> --
> Luc Lalonde, analyste
> ---------------------------------------------------------------------
> Département de génie informatique:
> École polytechnique de Montréal
> (514) 340-4711 x5049
> Luc.Lalonde at polymtl.ca
> ---------------------------------------------------------------------
> --
> To unsubscribe from this list go to the following URL and read the
> instructions:  https://lists.samba.org/mailman/options/samba

-- 
Bo Kersey
VirCIO - managed network solutions
4314 Avenue C
Austin, TX 78751
phone: (512)374-0500

If it is free, you are the product.



More information about the samba mailing list