经过前两章的努力环境已经创建好,在配置好LDAP的客户端通过ssh登录测试用户,同时在LDAP服务端抓LDAP客户端流量进行分析
如果对本文中的一些名词不熟悉,可以参考下一篇的内容:
环境
LDAPServer: 172.21.39.102
LDAPClient: 172.21.39.101
OS: CentOS 7.9
管理员:admin 密码:Admin123!
用户1:User1 密码:User1111
用户2:User2 密码:User2222
LDAP认证流程
1. 用户输入用户名和密码
当用户需要访问LDAPServer时,用户输入用户名和密码,向LDAPClient发起认证请求
注意这里是在LDAPClient上登陆,访问的IP同样为LDAPClient的IP
ssh -l User1 172.21.39.101
密码为User1111
2. 管理员绑定请求报文
LDAP客户端获取到用户的用户名和密码,以管理员DN和管理员密码为参数向LDAP服务器发送管理员绑定请求报文以获得查询权限,有查询权限才能查询
关注protocolOP报文主体内容
- 报文类型为bindRequest(0) 绑定请求报文
- 带有name字段,即管理员DN
- 带有authentication字段,表示为simple方式,以及带有管理员密码
3. 管理员绑定响应报文
LDAP服务器收到管理员绑定请求报文后,验证管理员DN和管理员密码是否正确
如果管理员DN和管理员密码正确,则向LDAP客户端发送绑定成功的管理员绑定响应报文
关注protocolOP报文主体内容
- 报文类型为bindResponse(1) 绑定响应报文
- resultCode为success (0),表示绑定成功
4. 用户DN查询请求报文
LDAP客户端收到绑定响应报文后,以用户输入的用户名为参数构造过滤条件(filter),向LDAP服务器发送用户DN查询请求报文
关注protocolOP报文主体内容
- 报文类型为searchRequest(3) 查询请求报文
- 认证通过后,客户端向服务器发送查询请求报文,该报文中包括查询范围、查询起点、过滤条件等
- 带有baseObject字段,表示Base DN根区别名
- 带有Filter字段,以uid与对象类型作为并列的过滤条件进行查询
5. 用户DN查询响应报文
LDAP服务器收到用户DN查询请求报文后,根据报文中的查询起点、查询范围、以及过滤条件,对用户DN进行查找
查询起点为Base DN根区别名,如果查询成功,则向LDAP客户端发送查询成功的响应报文
关注protocolOP报文主体内容
- 报文类型为searchResEntry(4) 查询结果返回报文
- 报文中包括查询得到的匹配的DN
- 带有objectName字段,表示匹配的Entry的DN
LDAP服务器还会返回一个查询状态的包
关注protocolOP报文主体内容
- 报文类型为searchResDone(5) 服务器返回给客户端的查询状态
- resultCode为success (0),表示查询成功
6. 用户绑定请求报文
LDAP客户端根据查询得到的用户DN和用户输入的密码为参数,向LDAP服务器发送用户绑定请求报文
关注protocolOP报文主体内容
- 报文类型为bindRequest(0) 绑定请求报文
- 带有name字段,即用户DN
- 带有authentication字段,表示为simple方式,以及带有用户输入的密码
7. 用户绑定响应报文
LDAP服务器收到用户绑定请求报文后,检查用户输入的密码是否正确
- 如果用户输入的密码正确,则向LDAP客户端发送绑定成功的绑定响应报文
- 如果用户输入的密码不正确,则向LDAP客户端发送绑定失败的响应报文
- LDAP客户端以查询到的下一个用户DN为参数,继续向LDAP服务器发送绑定请求,直至有一个DN绑定成功
- 如果所有用户DN都绑定失败,则LDAP客户端通知用户认证失败
关注protocolOP报文主体内容
- 报文类型为bindResponse(1) 绑定响应报文
- resultCode为success (0),表示绑定成功
8. 认证响应报文
认证成功后,LDAP客户端通知用户认证成功,用户获得访问权限
即LDAP客户端收到绑定成功的绑定响应报文后,可以ssh即可连接成功
此条流量报文不作分析,因为是ssh的加密通讯内容,传入认证信息,与本文重点LDAP无关
相关资源
本文分析的流量包可从以下链接下载:
https://download.csdn.net/download/Dalock/91348089
不过还是更建议自己搭环境抓包分析